| #!/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"; |