Mercurial > mplayer.hg
view TOOLS/psnr-video.sh @ 23510:a6c619ee9d30
Teletext support for tv:// (v4l and v4l2 only)
modified patch from Otvos Attila oattila at chello dot hu
Module uses zvbi library for all low-level VBI operations (like I/O with vbi
device, converting vbi pages into usefull vbi_page stuctures, rendering them
into RGB32 images).
All teletext related stuff (except properties, slave commands and rendering
osd in text mode or RGB32 rendered teletext pages in spu mode) is implemented
in tvi_vbi.c
New properties:
teletext_page - switching between pages
teletext_mode - switch between on/off/opaque/transparent modes
teletext_format - (currently read-only) allows to get format info
(black/white,gray,text)
teletext_half_page - trivial zooming (displaying top/bottom half of teletext
page)
New slave commands:
teletext_add_dec - user interface for jumping to any page by editing page number
interactively
teletext_go_link - goes though links, specified on current page
author | voroshil |
---|---|
date | Sun, 10 Jun 2007 00:06:12 +0000 |
parents | f2e90fc97a39 |
children | abd0a4e9daa0 |
line wrap: on
line source
#!/bin/sh # 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