plotpsnr.pl

来自「君正早期ucos系统(只有早期的才不没有打包成库),MPLAYER,文件系统,图」· PL 代码 · 共 235 行

PL
235
字号
#!/usr/bin/perl## Licence:          GPL## 2003/02/09        Jonas Jermann <jjermann@gmx.net>## Script:           Draw PSNR log graphs using gnuplot## requires:         gnuplotuse Getopt::Long;# MAINmy %options;my $dem_file="psnr.dem";commandline();demo_file();system ("gnuplot $dem_file");system("rm $dem_file $options{file}.[IPB] $options{file}.diff* 2>/dev/null");exit 0;# DEMO FILEsub demo_file {if ($options{file2}) {    my @file1_cont = ();    my @file2_cont = ();    my $NewRow,$i,$j;    open(LIST_IN, "$options{file}"); while( <LIST_IN> ) {       $NewRow=[];       @$NewRow = split(/[ ,]+/, $_);       push( @file1_cont, $NewRow );    }    close(LIST_IN);    open(LIST_IN2, "$options{file2}"); while( <LIST_IN2> ) {       $NewRow=[];       @$NewRow = split(/[ ,]+/, $_);       push( @file2_cont, $NewRow );    }    close(LIST_IN2);    open(LIST_OUT, ">$options{file}.diff");    for($i=0; $i<=$#file2_cont; $i++) {        print LIST_OUT " $file2_cont[$i]->[1],\ ";        for($j=2; $j<=7; $j++) {            $file2_cont[$i]->[$j] -= $file1_cont[$i]->[$j];            print LIST_OUT " $file2_cont[$i]->[$j],\ ";        }        print LIST_OUT " $file2_cont[$i]->[8]\n";    }    close(LIST_OUT);    $options{file}="$options{file}.diff";}if ($options{iframes}) { system("cat $options{file} | grep I > $options{file}.I"); }if ($options{pframes}) { system("cat $options{file} | grep P > $options{file}.P"); }if ($options{bframes}) { system("cat $options{file} | grep B > $options{file}.B"); }open(DEM_FILE,">$dem_file");print DEM_FILE "#PSNR Statistics#---------------set title \"PSNR Statistics\"set data style fstepsset xlabel \"Frames\"set grid";if ($options{quant}) {print DEM_FILE "# Quantizersplot [] [0:] \\";if ($options{pframes}) {    print DEM_FILE "    \"$options{file}.P\" using 1:2 t \"Quantizer: P frames\" w $options{qs}";    if ($options{bframes} || $options{iframes}) { print DEM_FILE ",\\"; }}if ($options{bframes}) {    print DEM_FILE "    \"$options{file}.B\" using 1:2 t \"Quantizer: B frames\" w $options{qs}";    if ($options{iframes}) { print DEM_FILE ",\\"; }}if ($options{iframes}) {    print DEM_FILE "    \"$options{file}.I\" using 1:2 t \"Quantizer: I frames\" w $options{qs}";}if (!($options{pframes} || $options{bframes} || $options{iframes})) {    print DEM_FILE "    \"$options{file}\" using 1:2 t \"Quantizer\" w $options{qs}";}print DEM_FILE "pause -1";}if ($options{size}) {print DEM_FILE "# Frame sizeplot \\";if ($options{pframes}) {    print DEM_FILE "    \"$options{file}.P\" using 1:3 t \"Size: P frames\" w $options{ss}";    if ($options{bframes}||$options{iframes}) { print DEM_FILE ",\\"; }}if ($options{bframes}) {    print DEM_FILE "    \"$options{file}.B\" using 1:3 t \"Size: B frames\" w $options{ss}";    if ($options{iframes}) { print DEM_FILE ",\\"; }}if ($options{iframes}) {    print DEM_FILE "    \"$options{file}.I\" using 1:3 t \"Size: I frames\" w $options{ss}";}if (!($options{pframes}||$options{bframes}||$options{iframes})) {    print DEM_FILE "    \"$options{file}\" using 1:3 t \"Size\" w $options{ss}";}print DEM_FILE "pause -1";}if ($options{psnr}) {print DEM_FILE "# PSNRplot \\";if ($options{pframes}) {    print DEM_FILE "    \"$options{file}.P\" using (\$1):(\$7) t \"PSNR (All): P frames\" w $options{ps}";    if ($options{bframes}||$options{iframes}) { print DEM_FILE ",\\"; }}if ($options{bframes}) {    print DEM_FILE "    \"$options{file}.B\" using (\$1):(\$7) t \"PSNR (All): B frames\" w $options{ps}";    if ($options{iframes}) { print DEM_FILE ",\\"; }}if ($options{iframes}) {    print DEM_FILE "    \"$options{file}.I\" using (\$1):(\$7) t \"PSNR (All): I frames\" w $options{ps}";}if (!($options{pframes}||$options{bframes}||$options{iframes})) {    print DEM_FILE "    \"$options{file}\" using (\$1):(\$7) t \"PSNR (All)\" w $options{ps}";}print DEM_FILE "#\"$options{file}\" using (\$1):(\$4) t \"PSNR (Y)\" w $options{ps} \\#\"$options{file}\" using (\$1):(\$5) t \"PSNR (Cb)\" w $options{ps} \\#\"$options{file}\" using (\$1):(\$6) t \"PSNR (Cr)\" w $options{ps}pause -1";}print DEM_FILE "reset";close (DEM_FILE);}# USAGEsub usage {print STDERR <<EOF;Usage: plotpsnr.pl [options] 'file'Options:  -h, --help	Display this help message  -quant	Display quantizers  -size		Display size  -psnr		Display PSNR  -iframes	Display I frames  -pframes	Display P frames  -bframes	Display B frames  -aframes	Display all frames in different colors  -cmp <file2>	Compare two files  -qs <style>   Quantizer style  -ss <style>   Size style  -ps <style>   PSNR styleDefault: -quant -size -psnr -qs "p" -ss "i" -ps "p"Notes:  Comparison is based on file2.  Comparison assumes that the frame numbers of both files fit.EOF    exit 1;}# COMMAND LINEsub commandline {    $options{qs}="p";    $options{ss}="i";    $options{ps}="p";    GetOptions(        "help|h"	=> \&usage,        "quant"		=> \$options{quant},        "size"  	=> \$options{size},        "psnr"		=> \$options{psnr},	"cmp=s"		=> \$options{file2},	"iframes"	=> \$options{iframes},	"pframes"	=> \$options{pframes},	"bframes"	=> \$options{bframes},	"aframes"	=> sub { $options{iframes} = 1; 				 $options{pframes}  = 1;				 $options{bframes}  = 1; },        "qs=s"     	=> \$options{qs},        "ss=s"     	=> \$options{ss},        "ps=s"     	=> \$options{ps},    ) || usage();if (!($options{quant}||$options{size}||$options{psnr})) {    $options{quant}=1;    $options{size}=1;    $options{psnr}=1;}$options{file}="@ARGV";}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?