blob: e08f2efc8ee8b0e639bf928f3bf20dc8dfafff16 [file] [log] [blame]
#!/bin/env perl
# countquant_x264.pl: displays statistics from x264 multipass logfiles
# by Loren Merritt, 2005-4-5
@size{I,P,B} =
@n{I,P,B} = (0)x3;
sub proc_file {
my $fh = shift;
while(<$fh>) {
/type:(.) q:(\d+\.\d+) tex:(\d+) mv:(\d+) misc:(\d+)/ or next;
$type = uc $1;
$n{$type} ++;
$q[int($2+.5)] ++;
$avgq += $2;
$avgq{$type} += $2;
my $bytes = ($3+$4+$5)/8;
$size{$type} += $bytes;
}
$size = $size{I} + $size{P} + $size{B};
$n = $n{I} + $n{P} + $n{B};
$n or die "unrecognized input\n";
}
if(@ARGV) {
foreach(@ARGV) {
open $fh, "<", $_ or die "can't open '$_': $!";
proc_file($fh);
}
} else {
proc_file(STDIN);
}
for(0..51) {
$q[$_] or next;
printf "q%2d: %6d %4.1f%%\n", $_, $q[$_], 100*$q[$_]/$n;
}
print "\n";
$digits = int(log($n+1)/log(10))+2;
printf "All: %${digits}d %s avgQP:%5.2f avgBytes:%5d\n",
$n, $n==$n{I}?" ":"", $avgq/$n, $size/$n;
foreach(qw(I P B S)) {
$n{$_} or next;
printf "%s: %${digits}d (%4.1f%%) avgQP:%5.2f avgBytes:%5d\n",
$_, $n{$_}, 100*$n{$_}/$n, $avgq{$_}/$n{$_}, $size{$_}/$n{$_};
}
print "\n";
printf "total size: $size B = %.2f KiB = %.2f MiB\n",
$size/2**10, $size/2**20;
print "bitrate: ", join("\n = ",
map sprintf("%.2f kbps @ %s fps", $_*$size*8/1000/$n, $_),
23.976, 25, 29.97), "\n";