From 122f3c401f23f84799802c7b9667bda222646487 Mon Sep 17 00:00:00 2001 From: "B. Watson" Date: Wed, 8 Apr 2015 03:18:53 -0400 Subject: initial commit --- calc_bitrate.pl | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100755 calc_bitrate.pl (limited to 'calc_bitrate.pl') 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() { + 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() { + 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"; -- cgit v1.2.3