#!/bin/bash #--- Functions --------------------------------------------------------------- SetEncodeParam() { # This sets the global variables used to configure the # RunEncode function. COMMAND="mencoder" SOURCE="-dvd-device . dvd://1 -chapter 2 -frames 1500" GENERAL="-ffourcc DIVX -mc 0 -noskip -skiplimit 0 -quiet" SUBTARGET0="" SUBTARGET1="" SUBTARGET2="" SUBTARGET3="" SOUND0="" SOUND1="-nosound" SOUND2="-nosound" SOUND3="-nosound" if [ -n "${1}" ]; then BITRATE=${1} TARGETSUF="-${1}" else BITRATE=800 TARGETSUF="-800" fi VIDEOOPT="vmax_b_frames=1:mbd=2:v4mv:trell:precmp=2:cmp=2:subcmp=2:dia=-1:predia=1:last_pred=4:preme=2:cbp:mv0:vqmax=12" if [ "${BITRATE}" == "800" ]; then VIDEOOPT="$VIDEOOPT:vqcomp=0.6"; fi TARGET="a$2$3$4${TARGETSUF}.avi" FILTER0="" FILTER1="-vf crop=688:560:18:8,scale=624:480,hqdn3d=$2:$3:$4" FILTER2=$FILTER1 FILTER3=$FILTER1 VIDEO0="" VIDEO1="-ovc lavc -lavcopts $VIDEOOPT:vpass=1:vbitrate=$BITRATE -o /dev/null" VIDEO2="-ovc lavc -lavcopts $VIDEOOPT:vpass=2:vbitrate=$BITRATE:autoaspect:psnr -o $TARGET" VIDEO3="" } RunEncode() { # This function encode a movie in 4 pass according to # presets variables. The first pass is used to encode # sound and the subsequent 3 pass are used to encode # video. All 4 pass can be used to extract subtitles. # A given pass or extraction is only run if it has a # configured preset variable. if [ -n "$SOUND0" ]; then [ -f frameno.avi ] && rm frameno.avi if [ -n "$SUBTARGET0" ]; then SUBTTL0="-slang $SUBTARGET0 -vobsubout $SUBTARGET0 -vobsuboutid $SUBTARGET0 -vobsuboutindex 0"; [ -f $SUBTARGET0.idx ] && rm $SUBTARGET0.idx [ -f $SUBTARGET0.sub ] && rm $SUBTARGET0.sub else SUBTTL0=""; fi $COMMAND $SOURCE $GENERAL $SOUND0 $FILTER0 $VIDEO0 $SUBTTL0; fi if [ -n "$VIDEO1" ]; then [ -f divx2pass.log ] && rm divx2pass.log [ -f xvid-twopass.stats ] && rm xvid-twopass.stats [ -f old$TARGET ] && rm old$TARGET [ -f $TARGET ] && mv $TARGET old$TARGET [ -f $TARGET ] && rm $TARGET rm psnr_*.log 2> /dev/null if [ -n "$SUBTARGET1" ]; then SUBTTL1="-slang $SUBTARGET1 -vobsubout $SUBTARGET1 -vobsuboutid $SUBTARGET1 -vobsuboutindex 0"; [ -f $SUBTARGET1.idx ] && rm $SUBTARGET1.idx [ -f $SUBTARGET1.sub ] && rm $SUBTARGET1.sub else SUBTTL1=""; fi $COMMAND $SOURCE $GENERAL $SOUND1 $FILTER1 $VIDEO1 $SUBTTL1; fi if [ -n "$VIDEO2" ]; then [ -f old$TARGET ] && rm old$TARGET [ -f $TARGET ] && mv $TARGET old$TARGET [ -f $TARGET ] && rm $TARGET rm psnr_*.log 2> /dev/null if [ -n "$SUBTARGET2" ]; then SUBTTL2="-slang $SUBTARGET2 -vobsubout $SUBTARGET2 -vobsuboutid $SUBTARGET2 -vobsuboutindex 0"; [ -f $SUBTARGET2.idx ] && rm $SUBTARGET2.idx [ -f $SUBTARGET2.sub ] && rm $SUBTARGET2.sub else SUBTTL2=""; fi $COMMAND $SOURCE $GENERAL $SOUND2 $FILTER2 $VIDEO2 $SUBTTL2; fi if [ -n "$VIDEO3" ]; then [ -f old$TARGET ] && rm old$TARGET [ -f $TARGET ] && mv $TARGET old$TARGET [ -f $TARGET ] && rm $TARGET rm psnr_*.log 2> /dev/null if [ -n "$SUBTARGET3" ]; then SUBTTL3="-slang $SUBTARGET3 -vobsubout $SUBTARGET3 -vobsuboutid $SUBTARGET3 -vobsuboutindex 0"; [ -f $SUBTARGET3.idx ] && rm $SUBTARGET3.idx [ -f $SUBTARGET3.sub ] && rm $SUBTARGET3.sub else SUBTTL3=""; fi $COMMAND $SOURCE $GENERAL $SOUND3 $FILTER3 $VIDEO3 $SUBTTL3; fi } #--- Main code --------------------------------------------------------------- if [ "${1}" == "all" ] || [ "${1}" == "ALL" ]; then #[ -f results${2}.txt ] && rm results${2}.txt for (( i=0; i<7; i=$i+1 )); do for (( j=0; j<7; j=$j+1 )); do for (( k=0; k<10; k=$k+1 )); do echo "running encode $i $j $k" ${0} $i $j $k ${2} >> results${2}.txt done done done [ -f tmpstats.txt ] && rm tmpstats.txt [ -f tmperrors.txt ] && rm tmperrors.txt [ -f tmptime.txt ] && rm tmptime.txt [ -f divx2pass.log ] && rm divx2pass.log [ -f xvid-twopass.stats ] && rm xvid-twopass.stats rm psnr_*.log 2> /dev/null else [ -f tmpstats.txt ] && rm tmpstats.txt [ -f tmperrors.txt ] && rm tmperrors.txt [ -f tmptime.txt ] && rm tmptime.txt rm psnr_*.log 2> /dev/null SetEncodeParam ${4} ${1} ${2} ${3} if [ -f $TARGET ]; then echo "skip ${1} ${2} ${3}" else ( time RunEncode > tmpstats.txt 2> tmperrors.txt ) 2> tmptime.txt cat psnr_*.log > psnr-${TARGET%%.*}.log echo "### ${1} ${2} ${3} @ ${4} kbit/s ####################################" grep "kbit" tmpstats.txt grep "PSNR" tmpstats.txt grep "user" tmptime.txt fi fi