Просмотр исходного кода

Allow runtime selection of encoder, with initial support for x264 and x265

Zachary Kotlarek 10 лет назад
Родитель
Сommit
8fea03b110
1 измененных файлов с 16 добавлено и 2 удалено
  1. 16 2
      encode.pl

+ 16 - 2
encode.pl

@@ -25,6 +25,11 @@ my $OUT_DIR           = undef();
 my $MIXDOWN_CODEC     = 'AAC';
 my $MIXDOWN_CHANNELS  = 2.0;
 my $AAC_ENCODER       = 'ffaac';
+my $VIDEO_ENCODER     = 'x265';
+my %ENCODER_OPTS      = (
+    'x264' => [ '--encopts',        'b-adapt=2:rc-lookahead=50' ],
+    'x265' => [ '--encoder-preset', 'slow' ],
+);
 
 # Applicaton configuration
 my $HD_WIDTH        = 1350;
@@ -37,8 +42,7 @@ my $HB_EXEC         = $ENV{'HOME'} . '/bin/video/HandBrakeCLI';
 my $DEBUG           = 0;
 
 # General parameters for HandBrake
-my @video_params =
-  ('--markers', '--optimize', '--detelecine', '--decomb', '--auto-anamorphic', '--encoder', 'x265', '--encoder-preset', 'slow');
+my @video_params = ('--markers', '--optimize', '--detelecine', '--decomb', '--auto-anamorphic');
 my @audio_params = ('--audio-copy-mask', 'dtshd,dts,ac3,aac', '--audio-fallback', 'ffac3');
 
 # Use CoreAudio where available
@@ -59,6 +63,7 @@ if ($ENV{'MOBILE'}) {
     $ENV{'WIDTH'}         = 1280;
     $ENV{'AUDIO_BITRATE'} = 128;
     $ENV{'STEREO_ONLY'}   = 1;
+    $ENV{'ENCODER'}       = 'x264';
 }
 
 # Allow overrides for audio languages
@@ -141,6 +146,15 @@ if ($ENV{'GREYSCALE'}) {
     push(@video_params, '--grayscale');
 }
 
+# Allow selection of video encoder
+if ($ENV{'ENCODER'}) {
+    if (!exists($ENCODER_OPTS{ $ENV{'ENCODER'} })) {
+        die($0 . ': Invalid ENCODER: ' . $ENV{'ENCODER'} . "\n");
+    }
+    $VIDEO_ENCODER = $ENV{'ENCODER'};
+}
+push(@video_params, '--encoder', $VIDEO_ENCODER, @{ $ENCODER_OPTS{$VIDEO_ENCODER} });
+
 # Additional arguments for HandBrake, to allow options not supported directly by this script
 # Split on spaces; if you need spaces you'll have to work out something else
 if ($ENV{'HANDBRAKE_ARGS'}) {