#!/usr/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() { /type:(.) q:(\d+\.\d+) itex:(\d+) ptex:(\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+$6)/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, " 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";