Mercurial > mplayer.hg
view TOOLS/psnr-video.sh @ 33263:5f527a9a9521
Add an exit function.
This function will allow performing clean-up operations.
(MPlayer calls guiDone() before exiting, but only if the GUI has been
initialized, i.e. if guiInit() has been called successfully. Any
exit_player()/exit_player_with_rc() after GUI's cfg_read() until
guiInit(), or any exit_player() during guiInit() itself will end the GUI
without calling guiDone(). This exit function will at least handle
abortions during guiInit() itself. It will be called twice in case of an
guiExit() after GUI initialization - first directly, next by guiDone()
via MPlayer's exit_player_with_rc().)
author | ib |
---|---|
date | Tue, 03 May 2011 12:19:22 +0000 |
parents | 32725ca88fed |
children |
line wrap: on
line source
#!/bin/bash # Helper script to ease comparing the PSNR between two video files # Copyleft 2005 by Matthias Wieser # Copyleft 2005 by Ivo # This file comes under GPL, see http://www.gnu.org/copyleft/gpl.html for more # information on its licensing. warning_frame_number () { echo "Files have differing numbers of frames!" echo "$FILE1 has `ls -1 ${TEMPDIR}/FILE1/*ppm | wc -l` frames," echo "$FILE2 has `ls -1 ${TEMPDIR}/FILE2/*ppm | wc -l` frames." echo "Processing the first `ls -1 ${TEMPDIR}/FILE2/*ppm | wc -l` frames." } TEMPDIR="/tmp/psnr_video" WORKDIR=`pwd` OUTFILE=psnr.dat ERRFILE=errorsum.del exit=0 if [[ `which pnmpsnr 2> /dev/null` = "" ]] then echo echo "To use this script you have to install the program \"pnmpsnr\" which is" echo " included in the netpbm package." echo exit=1 fi if [[ `which bc 2> /dev/null` = "" ]] then echo echo "To use this script you have to install the GNU command line calculator \"bc\"." echo exit=1 fi if [ $# -le 1 ]; then echo echo "Usage: `basename $0` <file1> <file2> [<frames>] [<options1>] [<options2>]" echo echo " <file1> and <file2> are the files for which the PSNR should be calculated." echo " [<frames>] is the number of frames to process, starting from frame 1." echo " [<options1>] are additional MPlayer options for <file1>." echo " [<options2>] are additional MPlayer options for <file2>." echo echo " Be aware that `basename $0` needs a lot of temporary space inside /tmp/." echo echo "Example:" echo " ./`basename $0` ./orig.avi ./test.avi 250 \"\" \"-vf pp=ac\"" echo exit=1 fi if [ "$exit" -eq 1 ]; then exit 1 fi FILE1=$1 FILE2=$2 LastFrame=-1 if [ $# -ge 3 ]; then LastFrame=$3 echo echo "Will process $LastFrame frames." fi if [ $# -ge 4 ]; then FILE1_Options=$4 echo "MPlayer options for ${FILE1}: $FILE1_Options" fi if [ $# -ge 5 ]; then FILE2_Options=$5 echo "MPlayer options for ${FILE2}: $FILE2_Options" fi mkdir -p ${TEMPDIR}/FILE1 mkdir -p ${TEMPDIR}/FILE2 ### File 1 echo echo "############## $FILE1 #################" cd ${TEMPDIR}/FILE1 rm -f *ppm rm -f *del if [ $LastFrame -ge 0 ]; then mplayer $FILE1_Options -frames $LastFrame -nosound -vo pnm ${WORKDIR}/$FILE1 > /dev/null else mplayer $FILE1_Options -nosound -vo pnm ${WORKDIR}/$FILE1 > /dev/null fi ### File 2 echo echo "############## $FILE2 #################" cd ${TEMPDIR}/FILE2 rm -f *ppm if [ $LastFrame -ge 0 ]; then mplayer $FILE2_Options -frames $LastFrame -nosound -vo pnm ${WORKDIR}/$FILE2 > /dev/null else mplayer $FILE2_Options -nosound -vo pnm ${WORKDIR}/$FILE2 > /dev/null fi ### PSNR echo echo "############## PSNR Calculation #################" if [[ `ls -1 ${TEMPDIR}/FILE1/*ppm | wc -l` = `ls -1 ${TEMPDIR}/FILE2/*ppm | wc -l` ]] then echo else warning_frame_number echo fi cd ${TEMPDIR}/FILE2 #rm ../$OUTFILE echo "File;Y;Cb;Cr" > ../$OUTFILE echo "0" > $ERRFILE i=0 for FILE in `ls -1 *.ppm` do echo $FILE echo -n "$FILE" >> ../$OUTFILE echo -n ";" >> ../$OUTFILE YCBCR=`pnmpsnr ../FILE1/$FILE $FILE 2>&1 | tail -n 3 | cut -f 3 -d ':' | \ ( read Y X; read CB X; read CR X; echo "$Y;$CB;$CR;")` Y=`echo $YCBCR | cut -f 1 -d ';'` CB=`echo $YCBCR | cut -f 2 -d ';'` CR=`echo $YCBCR | cut -f 3 -d ';'` echo $YCBCR >> ../$OUTFILE ALL=`echo "(-10)*l((e(-$Y/10*l(10))+e(-$CB/10*l(10))/4+e(-$CR/10*l(10))/4)/1.5)/l(10)" | bc -l` echo "$ALL" >> ../$OUTFILE ERROR=`echo "scale=30; (e(-1*$Y/10*l(10))+e(-1*$CB/10*l(10))/4+e(-1*$CR/10*l(10))/4)/1.5" | bc -l` ERRORSUM=`cat $ERRFILE` echo `echo "scale=30; $ERROR + $ERRORSUM" | bc -l` > $ERRFILE i=$(($i+1)) if [[ $i = $LastFrame ]] then break fi done ERRORSUM=`cat $ERRFILE` PSNR=`echo "-10*l($ERRORSUM/$i)/l(10)" | bc -l` echo "PSNR:;$PSNR" >> ../$OUTFILE cd .. mv $OUTFILE ${WORKDIR}/ if [[ `ls -1 ${TEMPDIR}/FILE1/*ppm | wc -l` = `ls -1 ${TEMPDIR}/FILE2/*ppm | wc -l` ]] then echo else warning_frame_number echo fi cd .. rm -r ${TEMPDIR} echo "Created ${WORKDIR}/$OUTFILE" echo