aboutsummaryrefslogtreecommitdiff
path: root/calc_bitrate.pl
diff options
context:
space:
mode:
authorB. Watson <yalhcru@gmail.com>2015-04-08 03:18:53 -0400
committerB. Watson <yalhcru@gmail.com>2015-04-08 03:18:53 -0400
commit122f3c401f23f84799802c7b9667bda222646487 (patch)
treebc77cc44c516eac71b2d6490574fd32a5b5efd65 /calc_bitrate.pl
downloadmisc-scripts-122f3c401f23f84799802c7b9667bda222646487.tar.gz
initial commit
Diffstat (limited to 'calc_bitrate.pl')
-rwxr-xr-xcalc_bitrate.pl84
1 files changed, 84 insertions, 0 deletions
diff --git a/calc_bitrate.pl b/calc_bitrate.pl
new file mode 100755
index 0000000..1acc829
--- /dev/null
+++ b/calc_bitrate.pl
@@ -0,0 +1,84 @@
+#!/usr/bin/perl -w
+
+$|++;
+
+$def{tracklen} = 0;
+$def{filesize} = 700;
+$def{audiorate} = 192;
+
+open(D, "<$ENV{HOME}/.calc_bitrate") && do {
+ while(<D>) {
+ chomp;
+ s/#.*//;
+ my ($k, $v) = split;
+ $v ||= "";
+ $def{$k} = $v if $k;
+ }
+ close D;
+};
+
+print "Length of input (seconds or hh:mm:ss, \"d\" to scan DVD) [$def{tracklen}]: ";
+chomp ($length = <>);
+
+$length = $def{tracklen} if $length eq "";
+
+if($length =~ /^[\d:]+$/) {
+ if($length =~ /(?:(\d?\d):)?(\d\d):(\d\d)/) {
+ my $newlength = $3 + 60 * $2 + 3600 * $1;
+ print "$length == $newlength seconds\n";
+ $length = $newlength;
+ }
+} elsif($length =~ /^d/i) {
+ open L, "lsdvd|" or die "Can't find lsdvd in PATH\n";
+ while(<L>) {
+ chomp;
+ next unless $_;
+ print $_, "\n";
+#Title: 01, Length: 02:56:48.066 Chapters: 19, Cells: 20, Audio streams: 01, Subpictures: 03
+ if(/^Title:\s*(\d+),\s*Length:\s*(\d?\d):(\d\d):(\d\d)(?:\.\d+)?\s*Chapters:\s*(\d+)/)
+ {
+ my $track = $1;
+ my $len = $4 + 60 * $3 + 3600 * $2;
+ my $chaps = $5;
+ $tracklens{$track+0} = $len;
+# $trackchaps{$track+0} = $chaps;
+ }
+ $dtrack = $1 if /^Longest track: (\d+)/;
+ }
+
+ print "Select track [$dtrack]: ";
+ chomp ($track = <>);
+ $track = $dtrack unless $track;
+ $track += 0;
+ $length = $tracklens{$track};
+} else {
+ die "Invalid length\n";
+}
+
+print "Desired AVI size in megabytes [$def{filesize}]: ";
+chomp ($s = <>);
+$size = $s ? $s : $def{filesize};
+
+print "Audio bitrate [$def{audiorate}]: ";
+chomp ($b = <>);
+$abit = $b ? $b : $def{audiorate};
+
+open(D, ">$ENV{HOME}/.calc_bitrate") && do {
+ print D "audiorate $abit\n" if $abit;
+ print D "tracklen $length\n" if $length;
+ print D "filesize $size\n" if $size;
+};
+
+close D;
+
+# calculate total bitrate:
+$totalbits = $size * 1024 * 1024 * 8;
+$bits_sec = $totalbits / $length;
+$kbits_sec = $bits_sec / 1000;
+$vbit = $kbits_sec - $abit;
+
+# fudge factor:
+#$vbit *= 0.985;
+$vbit *= 0.992;
+
+print "Video bitrate for $length seconds \@ $size MB: $vbit\n";