Mercurial > mplayer.hg
annotate TOOLS/plotpsnr.pl @ 37158:08bbd1e9036d
vd_ffmpeg: Rewrite ticket reference in comment
Omit the issue tracking software's name. Despite the migration from
Bugzilla to Trac we were able to keep the ticket numbers.
| author | al |
|---|---|
| date | Fri, 15 Aug 2014 22:27:52 +0000 |
| parents | 0f1b5b68af32 |
| children |
| rev | line source |
|---|---|
| 9366 | 1 #!/usr/bin/perl |
| 2 # | |
| 3 # Licence: GPL | |
| 4 # | |
| 5 # 2003/02/09 Jonas Jermann <jjermann@gmx.net> | |
| 6 # | |
| 7 # Script: Draw PSNR log graphs using gnuplot | |
| 8 # | |
| 9 # requires: gnuplot | |
| 10 | |
| 11 use Getopt::Long; | |
| 12 | |
| 13 # MAIN | |
| 14 my %options; | |
| 15 my $dem_file="psnr.dem"; | |
| 16 | |
| 17 commandline(); | |
| 18 demo_file(); | |
| 19 | |
| 20 system ("gnuplot $dem_file"); | |
| 9367 | 21 system("rm $dem_file $options{file}.[IPB] $options{file}.diff* 2>/dev/null"); |
| 9366 | 22 exit 0; |
| 23 | |
| 24 | |
| 25 # DEMO FILE | |
| 26 sub demo_file { | |
| 27 | |
| 28 if ($options{file2}) { | |
| 29 my @file1_cont = (); | |
| 30 my @file2_cont = (); | |
| 31 my $NewRow,$i,$j; | |
| 32 | |
| 33 open(LIST_IN, "$options{file}"); while( <LIST_IN> ) { | |
| 34 $NewRow=[]; | |
| 35 @$NewRow = split(/[ ,]+/, $_); | |
| 36 push( @file1_cont, $NewRow ); | |
| 37 } | |
| 38 close(LIST_IN); | |
| 39 | |
| 40 open(LIST_IN2, "$options{file2}"); while( <LIST_IN2> ) { | |
| 41 $NewRow=[]; | |
| 42 @$NewRow = split(/[ ,]+/, $_); | |
| 43 push( @file2_cont, $NewRow ); | |
| 44 } | |
| 45 close(LIST_IN2); | |
| 46 | |
| 47 open(LIST_OUT, ">$options{file}.diff"); | |
| 48 for($i=0; $i<=$#file2_cont; $i++) { | |
| 49 print LIST_OUT " $file2_cont[$i]->[1],\ "; | |
| 50 for($j=2; $j<=7; $j++) { | |
| 51 $file2_cont[$i]->[$j] -= $file1_cont[$i]->[$j]; | |
| 52 print LIST_OUT " $file2_cont[$i]->[$j],\ "; | |
| 53 } | |
| 54 print LIST_OUT " $file2_cont[$i]->[8]\n"; | |
| 55 } | |
| 56 close(LIST_OUT); | |
| 57 $options{file}="$options{file}.diff"; | |
| 58 } | |
| 59 | |
| 60 if ($options{iframes}) { system("cat $options{file} | grep I > $options{file}.I"); } | |
| 61 if ($options{pframes}) { system("cat $options{file} | grep P > $options{file}.P"); } | |
| 62 if ($options{bframes}) { system("cat $options{file} | grep B > $options{file}.B"); } | |
| 63 | |
| 64 open(DEM_FILE,">$dem_file"); | |
| 65 | |
| 66 print DEM_FILE "#PSNR Statistics | |
| 67 #--------------- | |
| 68 | |
| 69 set title \"PSNR Statistics\" | |
| 70 set data style fsteps | |
| 71 set xlabel \"Frames\" | |
| 72 set grid | |
| 73 | |
| 74 | |
| 75 "; | |
| 76 | |
| 77 if ($options{quant}) { | |
| 78 print DEM_FILE "# Quantizers | |
| 79 plot [] [0:] \\"; | |
| 80 if ($options{pframes}) { | |
| 81 print DEM_FILE " | |
| 82 \"$options{file}.P\" using 1:2 t \"Quantizer: P frames\" w $options{qs}"; | |
| 83 if ($options{bframes} || $options{iframes}) { print DEM_FILE ",\\"; } | |
| 84 } | |
| 85 if ($options{bframes}) { | |
| 86 print DEM_FILE " | |
| 87 \"$options{file}.B\" using 1:2 t \"Quantizer: B frames\" w $options{qs}"; | |
| 88 if ($options{iframes}) { print DEM_FILE ",\\"; } | |
| 89 } | |
| 90 if ($options{iframes}) { | |
| 91 print DEM_FILE " | |
| 92 \"$options{file}.I\" using 1:2 t \"Quantizer: I frames\" w $options{qs}"; | |
| 93 } | |
| 94 if (!($options{pframes} || $options{bframes} || $options{iframes})) { | |
| 95 print DEM_FILE " | |
| 96 \"$options{file}\" using 1:2 t \"Quantizer\" w $options{qs}"; | |
| 97 } | |
| 98 | |
| 99 print DEM_FILE " | |
| 100 pause -1 | |
| 101 | |
| 102 "; | |
| 103 } | |
| 104 | |
| 105 | |
| 106 if ($options{size}) { | |
| 107 print DEM_FILE "# Frame size | |
| 108 plot \\"; | |
| 109 if ($options{pframes}) { | |
| 110 print DEM_FILE " | |
| 111 \"$options{file}.P\" using 1:3 t \"Size: P frames\" w $options{ss}"; | |
| 112 if ($options{bframes}||$options{iframes}) { print DEM_FILE ",\\"; } | |
| 113 } | |
| 114 if ($options{bframes}) { | |
| 115 print DEM_FILE " | |
| 116 \"$options{file}.B\" using 1:3 t \"Size: B frames\" w $options{ss}"; | |
| 117 if ($options{iframes}) { print DEM_FILE ",\\"; } | |
| 118 } | |
| 119 if ($options{iframes}) { | |
| 120 print DEM_FILE " | |
| 121 \"$options{file}.I\" using 1:3 t \"Size: I frames\" w $options{ss}"; | |
| 122 } | |
| 123 if (!($options{pframes}||$options{bframes}||$options{iframes})) { | |
| 124 print DEM_FILE " | |
| 125 \"$options{file}\" using 1:3 t \"Size\" w $options{ss}"; | |
| 126 } | |
| 127 | |
| 128 print DEM_FILE " | |
| 129 pause -1 | |
| 130 | |
| 131 "; | |
| 132 } | |
| 133 | |
| 134 if ($options{psnr}) { | |
| 135 print DEM_FILE "# PSNR | |
| 136 plot \\"; | |
| 137 if ($options{pframes}) { | |
| 138 print DEM_FILE " | |
| 139 \"$options{file}.P\" using (\$1):(\$7) t \"PSNR (All): P frames\" w $options{ps}"; | |
| 140 if ($options{bframes}||$options{iframes}) { print DEM_FILE ",\\"; } | |
| 141 } | |
| 142 if ($options{bframes}) { | |
| 143 print DEM_FILE " | |
| 144 \"$options{file}.B\" using (\$1):(\$7) t \"PSNR (All): B frames\" w $options{ps}"; | |
| 145 if ($options{iframes}) { print DEM_FILE ",\\"; } | |
| 146 } | |
| 147 if ($options{iframes}) { | |
| 148 print DEM_FILE " | |
| 149 \"$options{file}.I\" using (\$1):(\$7) t \"PSNR (All): I frames\" w $options{ps}"; | |
| 150 } | |
| 151 if (!($options{pframes}||$options{bframes}||$options{iframes})) { | |
| 152 print DEM_FILE " | |
| 153 \"$options{file}\" using (\$1):(\$7) t \"PSNR (All)\" w $options{ps}"; | |
| 154 } | |
| 155 | |
| 156 print DEM_FILE " | |
| 157 #\"$options{file}\" using (\$1):(\$4) t \"PSNR (Y)\" w $options{ps} \\ | |
| 158 #\"$options{file}\" using (\$1):(\$5) t \"PSNR (Cb)\" w $options{ps} \\ | |
| 159 #\"$options{file}\" using (\$1):(\$6) t \"PSNR (Cr)\" w $options{ps} | |
| 160 pause -1 | |
| 161 | |
| 162 "; | |
| 163 } | |
| 164 | |
| 165 print DEM_FILE " | |
| 166 reset"; | |
| 167 | |
| 168 close (DEM_FILE); | |
| 169 } | |
| 170 | |
| 171 | |
| 172 | |
| 173 # USAGE | |
| 174 sub usage { | |
| 175 print STDERR <<EOF; | |
| 176 | |
| 177 Usage: plotpsnr.pl [options] 'file' | |
| 178 | |
| 179 Options: | |
| 180 -h, --help Display this help message | |
| 181 -quant Display quantizers | |
| 182 -size Display size | |
| 183 -psnr Display PSNR | |
| 184 -iframes Display I frames | |
| 185 -pframes Display P frames | |
| 186 -bframes Display B frames | |
| 187 -aframes Display all frames in different colors | |
| 188 -cmp <file2> Compare two files | |
| 189 -qs <style> Quantizer style | |
| 190 -ss <style> Size style | |
| 191 -ps <style> PSNR style | |
| 192 | |
| 193 Default: -quant -size -psnr -qs "p" -ss "i" -ps "p" | |
| 194 | |
| 195 Notes: | |
| 196 Comparison is based on file2. | |
| 197 Comparison assumes that the frame numbers of both files fit. | |
| 198 | |
| 199 EOF | |
| 200 exit 1; | |
| 201 } | |
| 202 | |
| 203 | |
| 204 # COMMAND LINE | |
| 205 sub commandline { | |
| 206 $options{qs}="p"; | |
| 207 $options{ss}="i"; | |
| 208 $options{ps}="p"; | |
| 209 | |
| 210 GetOptions( | |
| 211 "help|h" => \&usage, | |
| 212 "quant" => \$options{quant}, | |
| 213 "size" => \$options{size}, | |
| 214 "psnr" => \$options{psnr}, | |
| 215 "cmp=s" => \$options{file2}, | |
| 216 "iframes" => \$options{iframes}, | |
| 217 "pframes" => \$options{pframes}, | |
| 218 "bframes" => \$options{bframes}, | |
|
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
9367
diff
changeset
|
219 "aframes" => sub { $options{iframes} = 1; |
| 9366 | 220 $options{pframes} = 1; |
| 221 $options{bframes} = 1; }, | |
| 222 "qs=s" => \$options{qs}, | |
| 223 "ss=s" => \$options{ss}, | |
| 224 "ps=s" => \$options{ps}, | |
| 225 ) || usage(); | |
| 226 | |
| 227 if (!($options{quant}||$options{size}||$options{psnr})) { | |
| 228 $options{quant}=1; | |
| 229 $options{size}=1; | |
| 230 $options{psnr}=1; | |
| 231 } | |
| 232 | |
| 233 $options{file}="@ARGV"; | |
| 234 } |
