Blame view

3rdparty/ffmpeg-4.4.4/x264/tools/countquant_x264.pl 1.33 KB
f244cbd5   Hu Chunming   ffmpeg支持h264编码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
  #!/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";