فهرست منبع

Some codecs have stupid channel notations

Zachary Kotlarek 14 سال پیش
والد
کامیت
9e9a58fa6b
1فایلهای تغییر یافته به همراه13 افزوده شده و 5 حذف شده
  1. 13 5
      encode.pl

+ 13 - 5
encode.pl

@@ -232,14 +232,22 @@ sub audioOptions($) {
 	my @ac3      = ();
 	my @dts      = ();
 	foreach my $track (@{ $scan->{'audio'} }) {
-		my ($language, $codec, $chans, $iso) = $track->{'description'} =~ /^([^\(]+)\s+\(([^\)]+)\)\s+\((\d+\.\d+)\s+ch\)(?:\s+\(([^\)]+)\))?/;
-		if ($DEBUG) {
-			print STDERR 'Found audio track: codec => ' . $codec . ', channels => ' . $chans . ', language => ' . $language . ', ISO => ' . $iso . "\n";
-		}
-		if (!defined($chans) || $chans < 1) {
+		my ($language, $codec, $chans, $iso) = $track->{'description'} =~ /^([^\(]+)\s+\(([^\)]+)\)\s+\((\d+\.\d+\s+ch|Dolby\s+Surround)\)(?:\s+\(([^\)]+)\))?/;
+		if (!defined($chans)) {
 			print STDERR 'Could not parse audio description: ' . $track->{'description'} . "\n";
+
+			# Temporarily exit on parsing errors -- at least until we're sure about this new parser
+			exit(1);
 			next;
 		}
+		if ($chans =~ /(\d+\.\d+)\s+ch/i) {
+			$chans = $1;
+		} elsif ($chans =~ /Dolby\s+Surround/i) {
+			$chans = 3.1;
+		}
+		if ($DEBUG) {
+			print STDERR 'Found audio track: codec => ' . $codec . ', channels => ' . $chans . ', language => ' . $language . ', ISO => ' . $iso . "\n";
+		}
 
 		# Record the number of channels in each track
 		$channels[ $track->{'index'} ] = $chans;