To get nuvexport working with MythTV User Jobs as a transcoder, I needed to further modify my nuvexport patch to handle the fact that there is no controlling terminal for user jobs. Here is the new patch:
Index: export/ffmpeg.pm =================================================================== --- export/ffmpeg.pm (revision 242) +++ export/ffmpeg.pm (working copy) @@ -70,11 +70,11 @@ # Audio only? $self->{'audioonly'} = $audioonly; # Gather the supported codecs - my $data = `$ffmpeg -formats 2>/dev/null`; + my $data = `$ffmpeg -formats 2>&1`; my ($formats) = $data =~ /(?:^|\n\s*)File\sformats:\s*\n(.+?\n)\s*\n/s; my ($codecs) = $data =~ /(?:^|\n\s*)Codecs:\s*\n(.+?\n)\s*\n/s; if ($formats) { - while ($formats =~ /^\s(..)\s(\S+)\s*$/mg) { + while ($formats =~ /^\s(.{2})\s(\S+).*$/mg) { $self->formats'}{$2} = $1; } } @@ -286,7 +286,7 @@ push @tmpfiles, "/tmp/fifodir_$$", "/tmp/fifodir_$$/audout", "/tmp/fifodir_$$/vidout"; # Execute ffmpeg - print "Starting ffmpeg.\n" unless ($DEBUG); + print "Starting ffmpeg: $ffmpeg\n" unless ($DEBUG); ($ffmpeg_pid, $ffmpeg_h) = fork_command("$ffmpeg 2>&1"); $children{$ffmpeg_pid} = 'ffmpeg' if ($ffmpeg_pid); Index: export/ffmpeg/PSP.pm =================================================================== --- export/ffmpeg/PSP.pm (revision 242) +++ export/ffmpeg/PSP.pm (working copy) @@ -170,7 +170,8 @@ $self->{'ffmpeg_xtra'} = ' -b ' . $self->{'v_bitrate'} .' -bufsize 65535' .' -ab 32 -acodec aac' - ." -f psp -title $safe_title"; + ." -f psp -title $safe_title" + .' -ar 24000'; # Execute the parent method $self->SUPER::export($episode, '.MP4'); Index: nuv_export/shared_utils.pm =================================================================== --- nuv_export/shared_utils.pm (revision 242) +++ nuv_export/shared_utils.pm (working copy) @@ -66,7 +66,11 @@ $termios->getattr; $OSPEED = $termios->getospeed; }; - our $terminal = Term::Cap->Tgetent({OSPEED=>OSPEED}); + + my $terminal = Null; # This is the controlling terminal + eval { + $terminal = Term::Cap->Tgetent({OSPEED=>$OSPEED}); + }; # Gather info about how many cpu's this machine has if (-e '/proc/cpuinfo') { @@ -85,7 +89,16 @@ # Clear the screen sub clear { - print $DEBUG ? "\n" : $terminal->Tputs('cl'); + print $terminal; + if ($DEBUG) { + print "\n"; + } + elsif ($terminal ne Null ) { + $terminal->Tputs('cl'); + } + else { + print "\n"; + } } # Byte swap a 32-bit number from little-endian to big-endian Index: nuv_export/ui.pm =================================================================== --- nuv_export/ui.pm (revision 242) +++ nuv_export/ui.pm (working copy) @@ -380,6 +380,7 @@ $count++; $query .= (' ' x (3 - length($count)))."$count. ".$exporter->{'name'}; $query .= ' (disabled)' unless ($exporter->{'enabled'}); + $query .= "\n\t\tErrors: @{$exporter->{'errors'}}\n" unless ($exporter->{'enabled'}); $query .= "\n"; } $query .= "\n q. Quit\n\nChoose a function: ";
You can download the patch from here.
Update: Isn’t it always the way? Once I had the patch posted I bothered to get a new SVN version, and noticed that some of my patches had been included there. Here’s a new version of the nuvexport patch which will cleanly apply:
Index: export/ffmpeg.pm =================================================================== --- export/ffmpeg.pm (revision 271) +++ export/ffmpeg.pm (working copy) @@ -300,7 +300,7 @@ $children{$cat_pid} = 'audio dump' if ($cat_pid); } # Execute ffmpeg - print "Starting ffmpeg.\n" unless ($DEBUG); + print "Starting ffmpeg: $ffmpeg\n" unless ($DEBUG); ($ffmpeg_pid, $ffmpeg_h) = fork_command("$ffmpeg 2>&1"); $children{$ffmpeg_pid} = 'ffmpeg' if ($ffmpeg_pid); Index: export/ffmpeg/PSP.pm =================================================================== --- export/ffmpeg/PSP.pm (revision 271) +++ export/ffmpeg/PSP.pm (working copy) @@ -170,7 +170,8 @@ $self->ffmpeg_xtra'} = ' -b ' . $self->{'v_bitrate'} .' -bufsize 65535' .' -ab 32 -acodec aac' - ." -f psp -title $safe_title"; + ." -f psp -title $safe_title" + .' -ar 24000'; # Execute the parent method $self->SUPER::export($episode, '.MP4'); Index: nuv_export/shared_utils.pm =================================================================== --- nuv_export/shared_utils.pm (revision 271) +++ nuv_export/shared_utils.pm (working copy) @@ -66,7 +66,11 @@ $termios->getattr; $OSPEED = $termios->getospeed; }; - our $terminal = Term::Cap->Tgetent({OSPEED=li>$OSPEED}); + + my $terminal = Null; # This is the controlling terminal + eval { + $terminal = Term::Cap->Tgetent({OSPEED=>$OSPEED}); + }; # Gather info about how many cpu's this machine has if (-e '/proc/cpuinfo') { @@ -85,7 +89,15 @@ # Clear the screen sub clear { - print $DEBUG ? "\n" : $terminal->Tputs('cl'); + if ($DEBUG) { + print "\n"; + } + elsif ($terminal ne Null ) { + $terminal->Tputs('cl'); + } + else { + print "\n"; + } } # Byte swap a 32-bit number from little-endian to big-endian Index: nuv_export/ui.pm =================================================================== --- nuv_export/ui.pm (revision 271) +++ nuv_export/ui.pm (working copy) @@ -380,6 +380,7 @@ $count++; $query .= (' ' x (3 - length($count)))."$count. ".$exporter->{'name'}; $query .= ' (disabled)' unless ($exporter->{'enabled'}); + $query .= "\n\t\tErrors: @{$exporter->{'errors'}}\n" unless ($exporter->{'enabled'}); $query .= "\n"; } $query .= "\n q. Quit\n\nChoose a function: ";