Explorar o código

Fix language exclusion code. Provide an easier-to-modify language exclusion regex

Zachary Kotlarek %!s(int64=14) %!d(string=hai) anos
pai
achega
3e6bfec36c
Modificáronse 1 ficheiros con 35 adicións e 21 borrados
  1. 35 21
      encode.pl

+ 35 - 21
encode.pl

@@ -7,17 +7,18 @@ use IPC::Open3;
 use File::Basename;
 
 # Parameters
-my @video_params    = ('--markers', '--large-file', '--optimize', '--encoder', 'x264', '--detelecine', '--decomb', '--loose-anamorphic', '--modulus', '16', '--encopts', 'b-adapt=2:rc-lookahead=50', '--audio-copy-mask', 'dtshd,dts,ac3,aac', '--audio-fallback', 'ca_aac', '--mixdown', 'dpl2', '--ab', '192');
-my $FORMAT          = 'mp4';
-my $QUALITY         = 20;
-my $HD_QUALITY      = 20;
-my $HD_WIDTH        = 1350;
-my $MIN_VIDEO_WIDTH = 100;
-my $MAX_CROP_DIFF   = .1;
-my $MAX_DURA_DIFF   = 5;
-my @CODEC_ORDER     = ('DTS-HD', 'DTS', 'PCM', 'AC3', 'AAC', 'OTHER');
-my $HB_EXEC         = $ENV{'HOME'} . '/bin/video/HandBrakeCLI';
-my $DEBUG           = 0;
+my @video_params       = ('--markers', '--large-file', '--optimize', '--encoder', 'x264', '--detelecine', '--decomb', '--loose-anamorphic', '--modulus', '16', '--encopts', 'b-adapt=2:rc-lookahead=50', '--audio-copy-mask', 'dtshd,dts,ac3,aac', '--audio-fallback', 'ca_aac', '--mixdown', 'dpl2', '--ab', '192');
+my $FORMAT             = 'mp4';
+my $QUALITY            = 20;
+my $HD_QUALITY         = 20;
+my $HD_WIDTH           = 1350;
+my $MIN_VIDEO_WIDTH    = 100;
+my $MAX_CROP_DIFF      = .1;
+my $MAX_DURA_DIFF      = 5;
+my @CODEC_ORDER        = ('DTS-HD', 'DTS', 'PCM', 'AC3', 'AAC', 'OTHER');
+my $EXCLUDE_LANG_REGEX = '\b(?:Chinese|Espanol|Francais|Japanese|Korean|Portugues|Thai)\b';
+my $HB_EXEC            = $ENV{'HOME'} . '/bin/video/HandBrakeCLI';
+my $DEBUG              = 0;
 
 # Runtime debug mode
 if (defined($ENV{'DEBUG'}) && $ENV{'DEBUG'}) {
@@ -320,6 +321,11 @@ sub audioOptions($) {
 				print STDERR 'Skipping recode of track ' . $index . ' since it is already used as the default track and contains only ' . $tracks{$index}->{'channels'} . " channels\n";
 			}
 			next;
+		} elsif (!validLanguage($tracks{$index}->{'language'})) {
+			if ($DEBUG) {
+				print STDERR 'Skipping track ' . $index . ' due to language: ' . $tracks{$index}->{'language'} . "\n";
+			}
+			next;
 		} else {
 			my %track = ('index' => $index, 'encoder' => 'copy');
 			push(@audio_tracks, \%track);
@@ -466,8 +472,8 @@ sub scan($) {
 
 sub findBestAudioTrack($$) {
 	my ($tracks, $codec) = @_;
-	my $best         = undef();
-	my $bestChannels = 0;
+	my $best     = undef();
+	my $channels = 0;
 
 	for my $index (keys(%{$tracks})) {
 		my $track = $tracks->{$index};
@@ -477,19 +483,27 @@ sub findBestAudioTrack($$) {
 			next;
 		}
 
-		# Skip foreign langugae tracks
-		if ($track->{'language'} =~ /\b(Chinese|Espanol|Francais|Japanese|Korean|Portugues|Thai)\b/i) {
-			if ($DEBUG) {
-				print STDERR 'Skipping audio track ' . $index . ' due to language: ' . $track->{'language'} . "\n";
-			}
+		# Skip foreign language tracks
+		if (!validLanguage($track->{'language'})) {
 			next;
 		}
 
-		if (!defined($best) || $track->{'channels'} > $bestChannels) {
-			$best         = $index;
-			$bestChannels = $track->{'channels'};
+		# Find the track with the most channels (Ófirst wins)
+		if (!defined($best) || $track->{'channels'} > $channels) {
+			$best     = $index;
+			$channels = $track->{'channels'};
 		}
 	}
 
 	return $best;
 }
+
+sub validLanguage($) {
+	my ($lang) = @_;
+
+	if ($EXCLUDE_LANG_REGEX && $lang =~ /${EXCLUDE_LANG_REGEX}/i) {
+		return 0;
+	}
+
+	return 1;
+}