#! /bin/sh if [ -z "$1" ]; then echo "Usage: [vcodec=s] [vbitrate=n] [vscale=s] [aid=n] [acodec=s] [abitrate=n] [ascale=s] [pass=n] $0 [-mencoder_options] input.avi..." exit 1 fi if [ -z "$vcodec" ]; then vcodec=lavc else vcodec="$vcodec" fi if [ -z "$vbitrate" ]; then vbitrate=1600 else vbitrate="$vbitrate" fi if [ -n "$vscale" ]; then vscale="-vf scale=$vscale" fi if [ -z "$acodec" ]; then acodec=mp3lame else acodec="$acodec" fi if [ -z "$abitrate" ]; then abitrate=256 else abitrate="$abitrate" fi if [ -n "$ascale" ]; then ascale="-af volume=$ascale" fi if [ "$vcodec" = lavc ]; then vopts="-lavcopts vcodec=mpeg4:vbitrate=$vbitrate:autoaspect" elif [ "$vcodec" = lavc-hq ]; then vcodec=lavc vopts="-lavcopts vcodec=mpeg4:vbitrate=$vbitrate:autoaspect:mbd=2:trell:v4mv:last_pred=2:dia=-1:vmax_b_frames=2:vb_strategy=1:cmp=3:subcmp=3:precmp=0:vqcomp=0.6:turbo" elif [ "$vcodec" = lavc-vhq ]; then vcodec=lavc vopts="-lavcopts vcodec=mpeg4:vbitrate=$vbitrate:autoaspect:mbd=2:trell:v4mv:last_pred=3:dia=2:vmax_b_frames=2:vb_strategy=1:cmp=2:subcmp=2:precmp=2:mv0:cbp:predia=2:preme=2:qns=2" elif [ "$vcodec" = x264 ]; then vopts="-x264encopts bitrate=$vbitrate" elif [ "$vcodec" = x264-hq ]; then vcodec=x264 vopts="-x264encopts bitrate=$vbitrate:subq=5:8x8dct:frameref=2:bframes=3:b_pyramid:weight_b" elif [ "$vcodec" = x264-vhq ]; then vcodec=x264 vopts="-x264encopts bitrate=$vbitrate:subq=6:8x8dct:frameref=5:bframes=3:b_pyramid:weight_b:partitions=all:me=umh" elif [ "$vcodec" = xvid ]; then vopts="-xvidencopts bitrate=$vbitrate" elif [ "$vcodec" = xvid-hq ]; then vcodec=xvid vopts="-xvidencopts bitrate=$vbitrate:chroma_opt:vhq=2:bvhq=1:quant_type=mpeg" elif [ "$vcodec" = xvid-vhq ]; then vcodec=xvid vopts="-xvidencopts bitrate=$vbitrate:chroma_opt:vhq=4:bvhq=1:quant_type=mpeg" elif [ "$vcodec" = copy ]; then vopts="" else echo "Unknown video codec $vcodec; known codecs are {lavc,x264,xvid}[-[v]hq], copy" >&2 exit 1 fi if [ "$acodec" = mp3lame ]; then aopts="-lameopts cbr:br=$abitrate:q=0" elif [ "$acodec" = copy ]; then aopts="" else echo "Unknown audio codec $acodec; known codecs are mp3lame and copy" >&2 exit 1 fi if [ "$aid" ]; then aopts="$aopts -aid $aid" fi if [ -z "$pass" ]; then pass=1 else pass="$pass" fi if [ "$vcodec" = lavc ]; then vpass=vpass elif [ "$vcodec" = x264 ]; then vpass=pass elif [ "$vcodec" = xvid ]; then vpass=pass fi if [ "$pass" -eq 1 ]; then exec mencoder -ovc "$vcodec" $vopts $vscale -oac "$acodec" $aopts $ascale -o output.avi "$@" elif [ "$pass" -eq 2 ]; then mencoder -ovc "$vcodec" $vopts:$vpass=1 $vscale -nosound -o /dev/null "$@" && exec mencoder -ovc "$vcodec" $vopts:$vpass=2 $vscale -oac "$acodec" $aopts $ascale -o output.avi "$@" elif [ "$pass" -eq 3 ]; then mencoder -ovc "$vcodec" $vopts:$vpass=1 $vscale -nosound -o /dev/null "$@" && mencoder -ovc "$vcodec" $vopts:$vpass=3 $vscale -nosound -o /dev/null "$@" && exec mencoder -ovc "$vcodec" $vopts:$vpass=3 $vscale -oac "$acodec" $aopts $ascale -o output.avi "$@" # pass=3 is not a typo! else echo "Can only do 1, 2 or 3 passes." >&2 exit 1 fi