iPod touch用のビデオエンコード

せっかく液晶がでかいのでビデオでも入れてみた。
液晶の解像度はハーフVGAなのだけど、再生可能な動画QVGAVGAのMPEG4に限られる。QVGAでも再生時にスケーリングされるので視聴には問題ないのだけど、せっかくだからVGAサイズで。
素材はアナログ放送適当に録画してあるので、そこから再エンコードmencoderだとMPEG-4のコンテナ形式への出力が上手く動かなかったためffmpegで。素材が良くないため画質はなんとも言えないが、これぐらいの大きさの液晶なら動画みるにも十分な感じ。
以下、無駄に長いエンコードスクリプト

#!/bin/bash

export LANG=C

while getopts b OPT
do
    case $OPT in
	"b" ) background="TRUE" ;;
    esac
done

if [ "$background" = "TRUE" ];then
    if tty --silent ; then 
	nohup $0 $* >/dev/null 2>&1 &
	exit
    fi
fi

shift $(($OPTIND - 1))

FFMPEG="/usr/bin/ffmpeg"
maxbr=1500k
fps="30000/1001"
TMP=/var/tmp
audio_br="96k"

size="640x480"
aspect="4:3"
br="1024k"
max_br="1500k"

bufsize=256kb
log=enc_`date +%Y%m%d%H%M%S`.log
sws=lanczos

video_param="-sws_flags $sws -bitexact  -fixaspect  -vcodec libx264  -level 30 -croptop $croptop -cropbottom $cropbottom  -flags loop -trellis 2 -partitions parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -bufsize $bufsize -g 250  -qmin 18 -qmax 51 -s $size -aspect $aspect -r $fps -b $br -maxrate $max_br"

audio_param="-acodec libfaac -ac 2 -ar 44100  -ab $audio_br"

while [ "$1" != "" ]
do
    src=$1
    BASENAME=`basename $src |sed -e 's/\..\{3,4\}$//' `
    passfile=pass_$$
    
    if [ ! -r "$src" ] ; then
	echo "could not read source file : $src"
	shift
	continue
    fi

    echo "transcoding : $src" >>$log
    date >>$log
    echo "start 1st pass" >>$log
    
    nice -n 15 $FFMPEG -y -i $src  -pass 1  $video_param -an  -f mp4   /dev/null >>$log  2>&1
    if [ $? != "0" ] ; then
	exit 1
    fi
    echo "finished 1st pass" >>$log
    echo "start 2nd pass"  >>$log
    date >>$log
    nice $FFMPEG -y -i $src -pass 2  $video_param $audio_param -f mp4  $BASENAME.mp4 >>$log 2>&1
    if [ $? != "0" ] ; then
	exit 1	
    fi
    echo "finished 2nd pass" >>$log
    date >>$log
    rm -f x264_2pass.log
    rm -f ffmpeg2pass-0.log	
    shift
done

rm -f $log

exit