<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 &lt;<a href="mailto:fbacher@brisbin.net">fbacher@brisbin.net</a>&gt; 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… &nbsp;I use this to export shows to Plex, should work just as well for XBMC. &nbsp;I use it as a user job, and only select it for the recordings that I want to export. &nbsp; 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&nbsp;</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&nbsp;</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># &nbsp; parameter or help option is passed</div><div>$GetOptResult = GetOptions(</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>'help|?' &nbsp; &nbsp; &nbsp; &nbsp;=&gt; \$help,</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>'starttime=s' &nbsp; =&gt; \$starttime, &nbsp; &nbsp; &nbsp;#Start time of recording</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>'chanid=s' &nbsp; &nbsp; &nbsp;=&gt; \$chanid, &nbsp; &nbsp; &nbsp; &nbsp; #chanid of recording</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>'backend=s' &nbsp; &nbsp; =&gt; \$backend, &nbsp; &nbsp; &nbsp; &nbsp;#Backend of the server</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>'destination=s' =&gt; \$destination, &nbsp; &nbsp;#Destination folder</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>'test' =&gt; \$test, &nbsp; &nbsp;#show what would be done, don't actually do it.</div><div>);</div><div><br></div><div>usage()</div><div>&nbsp; if ( ( $numArgs &lt; 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>&nbsp; LWP::UserAgent-&gt;new( env_proxy =&gt; 1, keep_alive =&gt; 1, timeout =&gt; 30 );</div><div>my $url =</div><div>"<a href="http://$backend:6544/Dvr/GetRecorded?StartTime=${starttime}&amp;ChanId=${chanid}">http://$backend:6544/Dvr/GetRecorded?StartTime=${starttime}&amp;ChanId=${chanid}</a>";</div><div>logit("Recording info URL = $url");</div><div><br></div><div>my $header = HTTP::Request-&gt;new( GET =&gt; $url );</div><div>my $request = HTTP::Request-&gt;new( 'GET', $url, $header );</div><div>my $response = $agent-&gt;request($request);</div><div><br></div><div># create object</div><div>my $xml = new XML::Simple;</div><div><br></div><div>if ( $response-&gt;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 &nbsp;= $xml-&gt;XMLin( $response-&gt;content );</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>my $Title = $data-&gt;{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-&gt;{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-&gt;{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-&gt;{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-&gt;{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 &nbsp; &nbsp; = $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> &nbsp;unless -d $Path;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span> &nbsp;</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&amp;StartTime=$starttime">http://$backend:6544/Content/GetRecording?ChanId=$chanid&amp;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 =&gt; $starttime,</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>chanid &nbsp; &nbsp;=&gt; $chanid,</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>filename &nbsp;=&gt; $Path . $FileName,</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>path &nbsp; &nbsp; &nbsp;=&gt; $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, "&gt;$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 &nbsp; &nbsp; &nbsp;= 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, &nbsp;$logmin, &nbsp;$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, '&gt;&gt;', "$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>