#!/bin/sh # # high bitrate -a224 -b6500 -q2 if it underruns # medium bitrate -a224 -b6000 -q3 if it underruns # low bitrate -a192 -b5500 -q4 if it underruns # very low bitrate -a96 -b5000 -q4 if it underruns # # quantizer values are essentially half that of mjpegtools # def_denoise=0 def_interlace=2 def_ratio=2 def_signal=1 def_tools=0 def_quality=2 def_sound=1 help(){ cat < Options: -d n denoise, n=0 none ... n=2 strong ($def_denoise) -i n n=0 prog, n=1 top, n=2 bot, n=3 deint ($def_interlace) -q n quality, n=1 highest ... n=4 lowest ($def_quality) -r n aspect ratio, n=1 4:3, n=2 16:9 ($def_ratio) n=3 pillarbox 4:3 in 16:9 aspect -s n audio, n=0 mp2enc, n=1 toolame ($def_sound) -t n video, n=0 mjpegtools, n=1 ffmpeg, ($def_tools) n=3 mencoder with lavc -v n norm, n=1 ntsc n=2 pal ($def_signal) -h Print this help message END exit 0 } denoise=$def_denoise interlace=$def_interlace ratio=$def_ratio signal=$def_signal tools=$def_tools quality=$def_quality sound=$def_sound while getopts d:i:q:r:s:t:v:h name "$@" do case $name in d) denoise=$OPTARG ;; i) interlace=$OPTARG ;; q) quality=$OPTARG ;; r) ratio=$OPTARG ;; s) sound=$OPTARG ;; t) tools=$OPTARG ;; v) signal=$OPTARG ;; *) help ;; esac done let shiftind=$OPTIND-1 shift $shiftind if test "$#" != "1" then help fi case $1 in *.ts) input="$1" base=`echo $input | sed "s/\.ts$//"` ;; *.qt) input="$1" base=`echo $input | sed "s/\.qt$//"` ;; *.mov) input="$1" base=`echo $input | sed "s/\.mov$//"` ;; *.avi) input="$1" base=`echo $input | sed "s/\.avi$//"` ;; *.mp4) input="$1" base=`echo $input | sed "s/\.mp4$//"` ;; *.dv) input="$1" base=`echo $input | sed "s/\.dv$//"` ;; *.mpg) input="$1" base=`echo $input | sed "s/\.mpg$//"`-dvd ;; *) help ;; esac case $quality in 1) abitrate=224 bitrate=7500 quant_m=8 quant_f=4 ;; 3) abitrate=192 bitrate=6500 quant_m=10 quant_f=6 ;; 4) abitrate=96 bitrate=5500 quant_m=12 quant_f=7 ;; *) abitrate=224 bitrate=7000 quant_m=9 quant_f=5 ;; esac case $signal in 2) nflag_f="-r pal" nflag_m="-np" ;; *) nflag_f="-r ntsc" nflag_m="-nn" ;; esac case $interlace in 0) iflag_e="" iflag_f="-interlace 0" iflag_m=NOT_INTERLACED ;; 1) iflag_e="" iflag_f="-interlace 1 -ildct -ilme -top 1" iflag_m=INTERLACED_TOP_FIRST ;; 3) iflag_e="kerndeint," iflag_f="-deinterlace" iflag_m=NOT_INTERLACED ;; *) iflag_e="" iflag_f="-interlace 1 -ildct -ilme -top 0" iflag_m=INTERLACED_BOTTOM_FIRST ;; esac case $ratio in 2) aflag_f="-aspect 16:9" aflag_e="16/9" aflag_m="-a3" ;; 3) aflag_f="-s 540x480 -padleft 90 -padright 90 -aspect 16:9" aflag_e="16/9" aflag_m="-a3" ;; *) aflag_f="-aspect 4:3" aflag_e="4/3" aflag_m="-a2" ;; esac case $denoise in 1) dnprog="yuvdenoise -g 0,0,0 -t 4,6,6 -M 0,0,0" ;; 2) dnprog="yuvdenoise -g 0,0,0 -t 8,12,12 -M 0,0,0" ;; *) dnprog="cat" ;; esac echo "Encoding $input to $base.mpg" echo " video bitrate $bitrate" echo " audio bitrate $abitrate" sleep 5 # To resize 16:9 NTSC to 4:3 PAL (missing aspect ratio?) # -s 800x480 -padtop 48 -padbottom 48 -cropright 40 -cropleft 40 \ # To resize 4:3 NTSC to 4:3 PAL (or 16:9 NTSC to 16:9 PAL) # -s 600x480 -padtop 48 -padbottom 48 -padleft 60 -padright 60 \ # To pillarbox 4:3 NTSC to 16:9 NTSC # -s 540x480 -padleft 90 -padright 90 \ case $tools in 3) echo mencoder $input -oac lavc -ovc lavc \ -lavcopts acodec=ac3:abitrate=$abitrate:vcodec=mpeg2video:vbitrate=$bitrate:vqmin=$quant_f:vrc_maxrate=7500:vrc_buf_size=1835:aspect=$aflag_e \ -vf harddup,${iflag_e}scale=720:480,dsize=$aflag_e \ -of mpeg -mpegopts format=dvd:tsaf:vaspect=$aflag_e \ -o $base.mpg mencoder $input -oac lavc -ovc lavc \ -lavcopts acodec=ac3:abitrate=$abitrate:vcodec=mpeg2video:vbitrate=$bitrate:vqmin=$quant_f:vrc_maxrate=7500:vrc_buf_size=1835:aspect=$aflag_e \ -vf harddup,${iflag_e}scale=720:480,dsize=$aflag_e \ -of mpeg -mpegopts format=dvd:tsaf:vaspect=$aflag_e \ -o $base.mpg ;; 1) echo ffmpeg -i $input $iflag_f $nflag_f -target dvd $aflag_f \ -qmin $quant_f -b ${bitrate}000 -ab ${abitrate}000 -y $base.mpg ffmpeg -i $input $iflag_f $nflag_f -target dvd $aflag_f \ -qmin $quant_f -b ${bitrate}000 -ab ${abitrate}000 -y $base.mpg ;; *) # ffmpeg -i $input -f wav -y $base.wav lav2wav $input > $base.wav case $sound in 1) echo sox -V $base.wav -r48000 $base-48.wav toolame -b$abitrate -s48 $base-48.wav $base.m2a sox -V $base.wav -r48000 $base-48.wav toolame -b$abitrate -s48 $base-48.wav $base.m2a ;; *) mp2enc < $base.wav -r48000 -b$abitrate -o $base.m2a ;; esac lav2yuv $input | yuvcorrect -T $iflag_m | yuvscaler $nflag_m -O DVD | $dnprog | mpeg2enc -M0 $nflag_m $aflag_m -f8 -G18 -b$bitrate \ -V230 -q$quant_m -o $base.m2v mplex -f8 $base.m2v $base.m2a -o $base.mpg ;; esac