53 lines
1.3 KiB
Perl
Executable File
53 lines
1.3 KiB
Perl
Executable File
#!/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";
|