<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Jan 29, 2013, at 3:20 PM, Frank Feuerbacher <<a href="mailto:fbacher@brisbin.net">fbacher@brisbin.net</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<div text="#000000" bgcolor="#FFFFFF">
I'm using myth to record movies that I want to encode and then
import into XBMC. We have been using XBMC for years and reluctant to
migrate. I have seen several tools mentioned for exporting, but a
lot of the notes I read appear a bit dated. I'm seeking suggestions
on what tools or techniques I consider pursuing.<br>
<br>
Ideally I would like the script to grab all of the latest movies
(not TV shows) from Mythtv, convert to mpeg2, name them
appropriately for XBMC (Movie_name (release_Year)), place them in a
directory and delete the mythtv entry. I will then take care of
editing, encoding and importing the file into XBMC. I would like to
have the option to edit in Mythtv, but I am having trouble with the
transcode command (there is a defect open for this). <br>
<br>
My guess is that I will end up hacking <b>mythbrake</b> that I have
already hacked a bit on. <br>
<br></div></blockquote>This might get you started… I use this to export shows to Plex, should work just as well for XBMC. I use it as a user job, and only select it for the recordings that I want to export. You could tweak it to look for movies I suppose, or just add it as a user job for the movie recording rules you want.</div><div><br></div><div><div>$ cat ExportToPlex.pl </div><div>#!/usr/bin/perl</div><div>#</div><div># ExportToPlex.pl</div><div># version 1.0 - First revision</div><div>#</div><div># See 'sub usage' for detailed description of what the script does.</div><div><br></div><div>use strict;</div><div>use warnings;</div><div><br></div><div>sub usage {</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>print "$0:\n";</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>print "</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>This Script exports files to a central share in a naming format that Plex likes.</div><div><span class="Apple-tab-span" style="white-space:pre">        </span></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>Required arguments:</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>-starttime<span class="Apple-tab-span" style="white-space:pre">                </span>UTC String of recording start time</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>-chanid<span class="Apple-tab-span" style="white-space:pre">                        </span>Channel ID from MythTVs</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>-backend<span class="Apple-tab-span" style="white-space:pre">                </span>hostname or IP address of your backend </div><div><span class="Apple-tab-span" style="white-space:pre">                </span>-destination<span class="Apple-tab-span" style="white-space:pre">        </span>Location in which exports will reside</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>\n";</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>exit;</div><div><br></div><div>}</div><div><br></div><div># use modules</div><div>use LWP::UserAgent;</div><div>use HTTP::Request;</div><div>use Getopt::Long;</div><div>use XML::Simple;</div><div>use File::Spec;</div><div><br></div><div>#Handle command line arguments</div><div>my $numArgs = $#ARGV + 1;</div><div>logit("Number of arguments = $numArgs");</div><div><br></div><div>my ( $GetOptResult, $help, $starttime, $chanid, $test, $backend, $destination );</div><div><br></div><div>#-- prints usage if no command line parameters are passed or there is an unknown</div><div># parameter or help option is passed</div><div>$GetOptResult = GetOptions(</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>'help|?' => \$help,</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>'starttime=s' => \$starttime, #Start time of recording</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>'chanid=s' => \$chanid, #chanid of recording</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>'backend=s' => \$backend, #Backend of the server</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>'destination=s' => \$destination, #Destination folder</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>'test' => \$test, #show what would be done, don't actually do it.</div><div>);</div><div><br></div><div>usage()</div><div> if ( ( $numArgs < 1 )</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>or ( defined $help )</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>or ( !$GetOptResult )</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>or ( !$starttime )</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>or ( !$chanid )</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>or ( !$backend )</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>or ( !$destination ) );</div><div><br></div><div>logit("StartTime = $starttime");</div><div>logit("Chanid = $chanid");</div><div>logit("Backend = $backend");</div><div>logit("destination = $destination");</div><div>logit("test = $test") if ( defined $test );</div><div>my $wget = `bash -l -c "which wget"` or die "Couldn't find wget";</div><div>chomp $wget;</div><div>logit("wget = $wget");</div><div><br></div><div>#Get recording info</div><div>my $agent =</div><div> LWP::UserAgent->new( env_proxy => 1, keep_alive => 1, timeout => 30 );</div><div>my $url =</div><div>"<a href="http://$backend:6544/Dvr/GetRecorded?StartTime=${starttime}&ChanId=${chanid}">http://$backend:6544/Dvr/GetRecorded?StartTime=${starttime}&ChanId=${chanid}</a>";</div><div>logit("Recording info URL = $url");</div><div><br></div><div>my $header = HTTP::Request->new( GET => $url );</div><div>my $request = HTTP::Request->new( 'GET', $url, $header );</div><div>my $response = $agent->request($request);</div><div><br></div><div># create object</div><div>my $xml = new XML::Simple;</div><div><br></div><div>if ( $response->is_success ) {</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span># read XML file</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>my $data = $xml->XMLin( $response->content );</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>my $Title = $data->{Title};</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>logit("Title = $Title");</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>my $Series = sprintf "%02d", $data->{Season};</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>logit("Series = $Series");</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>my $Episode = sprintf "%02d", $data->{Episode};</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>logit("Episode = $Episode");</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>my $ext = $data->{FileName};</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>$ext =~ s{.*\.}{};</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>logit("Extension = $ext");</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>my $Path;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>my $FileName;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>my $Airdate = $data->{Airdate};</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>logit("Original Air Date = $Airdate");</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>my $MetaData;</div><div><br></div><div>#Do we have series data? Name it like: Show Name/Series 1/Show Name - s01e01.mpg</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if ( ( $Series + $Episode ) != 0 ) {</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>$Path = $destination . "/" . $Title . "/" . "Season " . $Series . "/";</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>$FileName = $Title . " - s" . $Series . "e" . $Episode . "." . $ext;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>$MetaData = $Title . " - s" . $Series . "e" . $Episode . ".xml";</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>else {</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">                </span>#If not? Name it like: Show Name/ShowName - YYYY-MM-DD.ext</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>$Path = $destination . "/" . $Title . "/";</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>$FileName = $Title . " - " . $Airdate . "." . $ext;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>$MetaData = $Title . " - " . $Airdate . ".xml";</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>logit("Path = $Path");</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>logit("Filename = $FileName");</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>logit("Meta Data Filename = $MetaData");</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>my $FullPath = $Path . $FileName;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>logit("Video file full path = $FullPath");</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span># print output</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if ( defined $test ) {</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>print "Information found\n";</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>print "\tShow Name:\t$Title\n";</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>print "\tSeries Number:\t$Series\n";</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>print "\tPath:\t\t$Path\n";</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>print "\tFilename:\t$FileName\n";</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>print "\tMetaData:\t$MetaData\n";</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>print "\tFullPath:\t$FullPath\n";</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>#Make sure the directory exits, if it doesn't, make it</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>system("mkdir -p \"$Path\"")</div><div><span class="Apple-tab-span" style="white-space:pre">        </span> unless -d $Path;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span> </div><div><span class="Apple-tab-span" style="white-space:pre">        </span>#Download the file</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>$url =</div><div>"<a href="http://$backend:6544/Content/GetRecording?ChanId=$chanid&StartTime=$starttime">http://$backend:6544/Content/GetRecording?ChanId=$chanid&StartTime=$starttime</a>";</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>logit("Download URL = $url");</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>`$wget -nv \"$url\" -O \"$FullPath\"`;</div><div><br></div><div>#Create a metadata file to track back to MythTV (put the basename column data in it)</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>$FullPath = $Path . $MetaData;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>logit("Metatdata file full path = $FullPath");</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>my $hashref = {</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>starttime => $starttime,</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>chanid => $chanid,</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>filename => $Path . $FileName,</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>path => $Path,</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>};</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>my $xml = XML::Simple::XMLout($hashref);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>open MYFILE, ">$FullPath" or die $!;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>print MYFILE $xml;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>close MYFILE;</div><div>}</div><div>else {</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>#Web services didn't return any data</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>die " Unable to contact backend at $url\n ";</div><div>}</div><div><br></div><div>#Functions</div><div><br></div><div>sub logit {</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>my $s = shift;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>my $logdir = "/tmp";</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>my (</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>$logsec, $logmin, $loghour, $logmday, $logmon,</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>$logyear, $logwday, $logyday, $logisdst</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>) = localtime(time);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>my $logtimestamp = sprintf(</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>"%4d-%02d-%02d %02d:%02d:%02d",</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>$logyear + 1900,</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>$logmon + 1,</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>$logmday, $loghour, $logmin, $logsec</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>$logmon++;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>my $logfile = "$logdir/ExportToPlex-$logmon-$logmday-logfile.log";</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>my $fh;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>open( $fh, '>>', "$logfile" ) or die "$logfile: $!";</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>print $fh "$logtimestamp $s\n";</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>close($fh);</div><div>}</div><div><br></div></div><br></body></html>