YouTube に再エンコードされない FLV ファイルを作るシェル・スクリプト (汎用)

2008-03-21 追記

  • LAME に渡す設定をプリセットにした。たしか LAME はこのへん賢いという話だったので。
  • アスペクト比の指定がある動画、あるいはアスペクト比を強制的に指定した場合に自動クロップを行う処理がおかしかったので修正した。

改良した

YouTube でも余命短い FLV だけど、ついでなんで "ニコニコ動画の FLV ファイルを音質劣化なしで YouTube 用 FLV ファイルに変換するシェル・スクリプト - だらりな。" のシェル・スクリプトを汎用化した。

  • 音声もエンコードできるようにして、ニコニコ動画の FLV ファイルなど、音声が MP3 の動画ファイル以外でも FLV に変換できるようにした。
  • FFmpeg でパッドのサイズも偶数じゃないといけないのに気づき、そうなるように修正した。
  • 画質が良くなる (らしい) エンコード・オプションを追加した (しかし、これのおかげでエンコード時間は激延び)。

マルチ・パス・エンコーディングするのは映像だけだから、音声のエンコードは最後のパスだけでいいんだけど、まあいいかなと思って毎回やってる。
ところで、うちの MEncoder (Debian 非公式パッケージ 1:1.0.rc2svn20071207-0.3) は AVI ファイルの音声をリサンプリングしようとすると (?)、"Blocktype == 0 and window-switching == 1 not allowed." とかいうエラーを何度も吐いたすえに "セグメンテーション違反です" といって落ちる感じ。FFmpeg だとだいじょうぶだけど。

エンコード

ちょっと AMV を試してみた。Tsukin "Bittersweet Desire"。"コゼットの肖像" 使いで、音楽は Vast の "Pretty When You Cry" って曲らしい。なにもこんな低ビットレート向きじゃない動画で試すことはないのだけど、好きなので……。
まず、このシェル・スクリプトを使ってエンコードしたもの。

作者 (編集者) 本人が YouTube おまかせエンコードで公開してるもの (しばらくすると H.264 + AAC になって、キレイになっちゃってるかもしれない)。

上の、このシェル・スクリプトを使ってエンコードしたほうは、ブロック・ノイズを抑えるために解像度を 160 x 120 にしてしまった。ほとんど音声のことしか考えずにエンコードしてるときは気にしなかったのだけど、映像を気にしてみると、ブロック・ノイズが出てるよりはぼやけてるほうがいいと思ったので。解像度を思いきって落としたおかげで、YouTube おまかせエンコードよりは見れるものになったと思う。
FPS も落とそうと思ったのだけど、映像と音声のシンクロに命かけてる AMV でそれをやると残念な結果になってしまったので、やめておいた。うまい方法もあるのかもしれないけど。
音声は 80 kbps。実はこのビットレートは厳しい。同じ "コゼットの肖像" 使いの SenshiMamoru "Darkglow" (曲は Mute Math の "Chaos") をエンコードしてみたら、80 kbps だとノイズが入ってしまった (2008-03-21 追記: 元動画ファイルの音声にノイズが入ってて、それが増幅されちゃうみたい)。他に、これも大好きな、"Animatrix" 使いの Ileia "Don't Break" (曲は Venus Hum の "Do You Want to Fight Me?") をエンコードしてみたときも、音がおかしくなった。
ついでにもうひとつ。エンコード条件は "Bittersweet Desire" と同じ。

余命短いシェル・スクリプト

#! /bin/sh
#
# anyvideo2youtube.sh
#
# Encode any video to youtube.flv.

MSG_PREFIX="[anyvideo2youtube] "

identify () {
	mplayer -vo null -ao null -frames 0 -identify "$1" 2> /dev/null | awk '/^=+$/ { exit; } /^ID_/ { print; }'
}

INPUT_FILE=`echo $1 | sed -e 's/"/\\"/g' -e 's/!/\\!/g'`
[ ! -r "${INPUT_FILE}" ] && { echo "${MSG_PREFIX}ERROR: Can't read \"${INPUT_FILE}\"." >&2; exit 1; }
echo "${MSG_PREFIX}INPUT_FILE: ${INPUT_FILE}"
identify "${INPUT_FILE}"

INPUT_AUDIO_FILE=`echo "${INPUT_FILE}" | sed "s/\w\+$/mp3/"`
if [ -r "${INPUT_AUDIO_FILE}" ]; then
	echo "${MSG_PREFIX}INPUT_AUDIO_FILE: ${INPUT_AUDIO_FILE}"
	identify "${INPUT_AUDIO_FILE}"
else
	INPUT_AUDIO_FILE="${INPUT_FILE}"
fi

OUTPUT_FILE=`basename "${INPUT_FILE}" | sed "s/\w\+$/forYouTube.flv/"`
#[ -f "${OUTPUT_FILE}" ] && {echo "${MSG_PREFIX}ERROR: \"${OUTPUT_FILE}\" already exists." >&2; exit 1; }

#CONF_FILE=${HOME}/.anyvideo2youtube.conf
CONF_FILE=${HOME}/bin/anyvideo2youtube.conf
[ ! -r ${CONF_FILE} ] && { echo "${MSG_PREFIX}ERROR: Can't read \"${CONF_FILE}\"." >&2; exit 1; }

source ${CONF_FILE}

[ ! ${ENCODER} -o ${ENCODER} != "FFMPEG" ] && ENCODER=MENCODER
echo "${MSG_PREFIX}ENCODER: ${ENCODER}"

[ ! ${TOTAL_BITRATE} ] && { echo "${MSG_PREFIX}ERROR: Please set TOTAL_BITRATE." >&2; exit 1; }
[ ! ${AUDIO_BITRATE} ] && { echo "${MSG_PREFIX}ERROR: Please set AUDIO_BITRATE." >&2; exit 1; }

#
# Probe
#

probe () {
	eval `mplayer -vo null -ao null -frames 0 -identify "$1" 2> /dev/null | awk '/^=+$/ { exit; } { print; }' | grep -e "$2"`
}

if [ ${AUDIO_BITRATE} = "COPY" ]; then
	probe "${INPUT_AUDIO_FILE}" "^ID_AUDIO"
	[ ${ID_AUDIO_FORMAT} != "85" ] && { echo "${MSG_PREFIX}Audio Stream is not MP3."; exit 1; }

	AUDIO_CODEC="copy"
	AUDIO_BITRATE=`echo ${ID_AUDIO_BITRATE} | awk '{ print $1 / 1000; }'`
else
	AUDIO_CODEC="re-encode"
fi

VIDEO_BITRATE=`echo ${TOTAL_BITRATE} ${AUDIO_BITRATE} | awk '{ print int( $1 - $2 ); }'`

echo "${MSG_PREFIX}AUDIO_BITRATE: ${AUDIO_BITRATE} (${AUDIO_CODEC}); VIDEO_BITRATE: ${VIDEO_BITRATE}"
[ ${VIDEO_BITRATE} -le 0  ] && { echo "${MSG_PREFIX}ERROR: TOTAL_BITRATE is too low." >&2; exit 1; }

probe "${INPUT_FILE}" "^ID_LENGTH"; INPUT_FILE_LENGTH=${ID_LENGTH}
probe "${INPUT_AUDIO_FILE}" "^ID_LENGTH"; INPUT_AUDIO_FILE_LENGTH=${ID_LENGTH}
PROBE_DELAY=`echo ${INPUT_AUDIO_FILE_LENGTH} ${INPUT_FILE_LENGTH} | awk '{ print $1 - $2; }'`

[ ${CUSTOM_DELAY} ] && AUTO_DELAY="CUSTOM"
[ ! ${AUTO_DELAY} -o ${ENCODER} = "FFMPEG" ] && AUTO_DELAY="NONE"
case "${AUTO_DELAY}" in
	CUSTOM)	DELAY=${CUSTOM_DELAY};;
	FULL)	DELAY=${PROBE_DELAY};;
	HALF)	DELAY=`echo ${PROBE_DELAY} | awk '{ print $1 / 2; }'`;;
	NONE|*)	DELAY=0; AUTO_DELAY="NONE";;
esac

echo "${MSG_PREFIX}PROBE_DELAY: ${PROBE_DELAY}; AUTO_DELAY: ${AUTO_DELAY}; DELAY: ${DELAY}"

probe "${INPUT_FILE}" "^ID_VIDEO"

[ ${FORCE_ASPECT} ] && { ID_VIDEO_ASPECT=${FORCE_ASPECT}; echo "${MSG_PREFIX}FORCE_ASPECT: ${FORCE_ASPECT}"; }

ORIGINAL_WIDTH=${ID_VIDEO_WIDTH}
ORIGINAL_HEIGHT=`echo ${ID_VIDEO_ASPECT} ${ID_VIDEO_HEIGHT} ${ID_VIDEO_WIDTH} | awk '{ print ( $1 == 0 ? $2 : $3 / $1 ); }'`

echo "${MSG_PREFIX}ORIGINAL_WIDTH: ${ORIGINAL_WIDTH}; ORIGINAL_HEIGHT: ${ORIGINAL_HEIGHT}"

[ ! ${AUTO_CROP} ] && AUTO_CROP="OFF"
if [ ${AUTO_CROP} = "ON" ]; then
	echo "${MSG_PREFIX}AUTO_CROP: ${AUTO_CROP}"
	#CROPDETECT_LIMIT=16
	CROPDETECT_LIMIT=24
	DETECTED_CROP=`mplayer -benchmark -vo null -nosound -vf cropdetect=${CROPDETECT_LIMIT} "${INPUT_FILE}" 2> /dev/null | \
		grep -e "-vf crop" | tail -n 1 | sed -e "s/.*(-vf\ crop=//" -e "s/)\..*//"`
	VF_CROP="crop=${DETECTED_CROP},"

	CROPPED_WIDTH=`echo ${DETECTED_CROP} | awk -F : '{ print $1; }'`
	CROPLEFT=`echo ${DETECTED_CROP} | awk -F : '{ print $3; }'`
	CROPRIGHT=`expr ${ORIGINAL_WIDTH} - ${CROPPED_WIDTH} - ${CROPLEFT}`

	CROPPED_HEIGHT=`echo ${DETECTED_CROP} | awk -F : '{ print $2; }'`
	CROPTOP=`echo ${DETECTED_CROP} | awk -F : '{ print $4; }'`
	CROPBOTTOM=`expr ${ID_VIDEO_HEIGHT} - ${CROPPED_HEIGHT} - ${CROPTOP}`
	CROPPED_HEIGHT=`echo ${ID_VIDEO_ASPECT} ${CROPPED_HEIGHT} ${ORIGINAL_HEIGHT} ${ID_VIDEO_HEIGHT} | \
		awk '{ print ( $1 == 0 ? $2 : $2 * $3 / $4 ); }'`

	echo "${MSG_PREFIX}CROPPED_WIDTH: ${CROPPED_WIDTH}; CROPPED_HEIGHT: ${CROPPED_HEIGHT}"
else
	CROPPED_WIDTH=${ORIGINAL_WIDTH}
	CROPPED_HEIGHT=${ORIGINAL_HEIGHT}
fi

if [ `echo ${CROPPED_WIDTH} ${CROPPED_HEIGHT} | awk '{ print ( ( $1 / $2 ) >= ( 4 / 3 ) ); }'` -eq 1 ]; then
	[ ! ${WIDTH} ] && WIDTH=${CROPPED_WIDTH}
	SCALE_WIDTH=${WIDTH}

	HEIGHT=`echo ${WIDTH} | awk '{ print int( $1 * 3 / 4 + 0.5 ); }'`
	SCALE_HEIGHT=`echo ${CROPPED_HEIGHT} ${WIDTH} ${CROPPED_WIDTH} | awk '{ print int( $1 * $2 / $3 + 0.5 ); }'`
else
	if [ ! ${WIDTH} ]; then
		HEIGHT=`echo ${CROPPED_HEIGHT} | awk '{ print int( $1 + 0.5 ); }'`
		WIDTH=`echo ${HEIGHT} | awk '{ print int( $1 * 4 / 3 + 0.5 ); }'`
	else
		HEIGHT=`echo ${WIDTH} | awk '{ print int( $1 * 3 / 4 + 0.5 ); }'`
	fi
	SCALE_HEIGHT=${HEIGHT}

	SCALE_WIDTH=`echo ${CROPPED_WIDTH} ${HEIGHT} ${CROPPED_HEIGHT} | awk '{ print int( $1 * $2 / $3 + 0.5 ); }'`
fi

WIDTH=`expr ${WIDTH} + ${WIDTH} % 2`
HEIGHT=`expr ${HEIGHT} + ${HEIGHT} % 2`
SCALE_WIDTH=`expr ${SCALE_WIDTH} + ${SCALE_WIDTH} % 2`
SCALE_HEIGHT=`expr ${SCALE_HEIGHT} + ${SCALE_HEIGHT} % 2`

PADTOP=`expr \( ${HEIGHT} - ${SCALE_HEIGHT} \) / 2`; PADTOP=`expr ${PADTOP} - ${PADTOP} % 2`
PADBOTTOM=`expr ${HEIGHT} - ${SCALE_HEIGHT} - ${PADTOP}`
PADLEFT=`expr \( ${WIDTH} - ${SCALE_WIDTH} \) / 2`; PADLEFT=`expr ${PADLEFT} - ${PADLEFT} % 2`
PADRIGHT=`expr ${WIDTH} - ${SCALE_WIDTH} - ${PADLEFT}`

echo "${MSG_PREFIX}SCALE_WIDTH: ${SCALE_WIDTH}; SCALE_HEIGHT: ${SCALE_HEIGHT}"
echo "${MSG_PREFIX}WIDTH: ${WIDTH}; HEIGHT: ${HEIGHT}"

[ ! ${FPS} ] && FPS=${ID_VIDEO_FPS}
FPS=`echo ${FPS} ${ID_VIDEO_FPS} | awk '{ print ( $1 == 0 ? $2 : $1 ); }'`
FPS=`echo ${FPS} ${ID_VIDEO_FPS} | awk '{ print ( $1 < 0 ? $2 / $1 * -1 : $1 ); }'`
FPS=`echo ${FPS} ${ID_VIDEO_FPS} | awk '{ print ( $1 > $2 ? $2 : $1 ); }'`

echo "${MSG_PREFIX}FPS: ${FPS}"

#
# Encode
#

if [ ${ENCODER} = "MENCODER" ]; then
	MSGLEVEL="all=1"
	[ ${AUDIO_CODEC} = "re-encode" ] && AUDIO_CODEC="mp3lame -lameopts preset=${AUDIO_BITRATE}"
	VF="${VF_CROP}${ADDITIONAL_VF}scale=${SCALE_WIDTH}:${SCALE_HEIGHT},expand=${WIDTH}:${HEIGHT}"
	#VF="${VF_CROP}${ADDITIONAL_VF}scale=${SCALE_WIDTH}:${SCALE_HEIGHT}"
	KEYINT=":keyint=`echo ${FPS} | awk '{ print int( $1 * 10 ); }'`"
	LAVCOPTS="vcodec=flv:vbitrate=${VIDEO_BITRATE}:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:predia=4:dia=4:preme=2${KEYINT}"
	PASSLOGFILE="anyvideo2youtube-mencoder-`date +%Y%m%d%H%M%S`.log"

	encode () {
		mencoder -msglevel ${MSGLEVEL} -of lavf\
			-delay ${DELAY} -mc 0 -af resample=44100:0:2 -srate 44100 -oac ${AUDIO_CODEC}\
			-vf ${VF} -ofps ${FPS} -ovc lavc -lavcopts ${LAVCOPTS}:vpass=$1 -passlogfile ${PASSLOGFILE}\
			-o "${OUTPUT_FILE}" -audiofile "${INPUT_AUDIO_FILE}" "${INPUT_FILE}" ||\
			{ echo "${MSG_PREFIX}ERROR: MEncoder error occured." >&2; exit 1; }
	}

	[ ! ${PASS} -o ${PASS} -lt 2 ] && PASS=2
	i=1
	while [ ${i} -le ${PASS} ]
	do
		echo "${MSG_PREFIX}Encoding \"${INPUT_FILE}\" (pass ${i}/${PASS})."
		encode `echo ${i} | awk '{ print ( $1 == 1 ? 1 : 3 ); }'`
		i=`expr ${i} + 1`
	done

	rm ${PASSLOGFILE}
else
	[ ${AUDIO_CODEC} = "re-encode" ] && AUDIO_CODEC="libmp3lame -ab `expr ${AUDIO_BITRATE} \* 1000` -ar 44100"
	CROP="-croptop ${CROPTOP} -cropbottom ${CROPBOTTOM} -cropleft ${CROPLEFT} -cropright ${CROPRIGHT}"
	PAD="-padtop ${PADTOP} -padbottom ${PADBOTTOM} -padleft ${PADLEFT} -padright ${PADRIGHT}"
	VIDEO_BITRATE=`expr ${VIDEO_BITRATE} \* 1000`
	VIDEO_OPTIONS="-mbd 2 -mv0 -trell -last_pred 3 -pre_dia_size 4 -dia_size 4 -preme 2"
	PASSLOGFILE="anyvideo2youtube-ffmpeg-`date +%Y%m%d%H%M%S`"

	encode () {
		ffmpeg -y -i "${INPUT_AUDIO_FILE}" -i "${INPUT_FILE}"\
			-acodec ${AUDIO_CODEC} -pass $1 -passlogfile ${PASSLOGFILE}\
			${CROP} -s ${SCALE_WIDTH}x${SCALE_HEIGHT} ${PAD} -r ${FPS} -vcodec flv -b ${VIDEO_BITRATE} ${VIDEO_OPTIONS}\
			"${OUTPUT_FILE}" || { echo "${MSG_PREFIX}ERROR: FFmpeg error occured." >&2; exit 1; }
	}

	echo "${MSG_PREFIX}Encoding \"${INPUT_FILE}\" (pass 1/2)"
	encode 1
	echo "${MSG_PREFIX}Encoding \"${INPUT_FILE}\" (pass 2/2)"
	encode 2

	rm ${PASSLOGFILE}*.log
fi

echo "OUTPUT_FILE: ${OUTPUT_FILE}"
identify "${OUTPUT_FILE}"

OUTPUT_FILE_SIZE=`ls -l "${OUTPUT_FILE}" | awk '{ print $5; }'`
probe "${OUTPUT_FILE}" "^ID_LENGTH"
echo "${MSG_PREFIX}TOTAL_BITRATE: `echo ${OUTPUT_FILE_SIZE} ${ID_LENGTH} | awk '{ print ( $1 * 8 / $2 / 1000 ); }'` kbps"

exit 0

設定ファイル

# anyvideo2youtube.conf
#
# anyvideo2youtube.sh の設定ファイル

####### BASIC OPTIONS #######

#
# TOTAL_BITRATE
#
# 音声と映像をあわせての目標ビットレートを、単位 kbps で指定 (必須)。
# YouTube での再エンコードを回避するためには、350 kbps 未満である必要がある模様 (2008 年 3 月現在)。
# 340 にしておくと 350 kbps をちょっと下回るぐらいになることが多い。
# 微調整して 350 kbps 未満になるようにしたりする。
# MEncoder が必要なしと判断した場合は、指定を下回るビットレートになる (不必要に大きなファイルにはならない)。

#TOTAL_BITRATE=468	# 音声が 192 kbps なのに 320 kbps だとか自己申請する動画で音声をコピーするとき
#TOTAL_BITRATE=436	# 音声が 128 kbps なのに 224 kbps だとか、160 kbps なのに 256 kbps だとか自己申請する動画で音声をコピーするとき
#TOTAL_BITRATE=420	# 音声が 112 kbps なのに 192 kbps だとか自己申請する動画で音声をコピーするとき
TOTAL_BITRATE=340
#TOTAL_BITRATE=308	# 音声が 160 kbps なのに 128 kbps だとか、192 kbps なのに 160 kbps だとか自己申請する動画で音声をコピーするとき
#TOTAL_BITRATE=276	# 音声が  96 kbps なのに  32 kbps だとか、192 kbps なのに 128 kbps だとか自己申請する動画で音声をコピーするとき
#TOTAL_BITRATE=260	# 音声が 112 kbps なのに  32 kbps だとか、192 kbps なのに 112 kbps だとか自己申請する動画で音声をコピーするとき
#TOTAL_BITRATE=244	# 音声が 128 kbps なのに  32 kbps だとか、320 kbps なのに 224 kbps だとか自己申請する動画で音声をコピーするとき
#TOTAL_BITRATE=212	# 音声が 160 kbps なのに  32 kbps だとか自己申請する動画で音声をコピーするとき
#TOTAL_BITRATE=180	# 音声が 192 kbps なのに  32 kbps だとか自己申請する動画で音声をコピーするとき
#TOTAL_BITRATE=148	# 音声が 224 kbps なのに  32 kbps だとか、320 kbps なのに 128 kbps だとか自己申請する動画で音声をコピーするとき
#TOTAL_BITRATE=116	# 音声が 256 kbps なのに  32 kbps だとか自己申請する動画で音声をコピーするとき
#TOTAL_BITRATE=52	# 音声が 320 kbps なのに  32 kbps だとか自己申請する動画で音声をコピーするとき

#
# AUDIO_BITRATE
#
# 音声のビットレートを、単位 kbps で指定 (必須)。
# 元動画ファイルの音声をコピーする (エンコードしない) 場合は、"COPY" を指定する。

#AUDIO_BITRATE="COPY"
#AUDIO_BITRATE=128
#AUDIO_BITRATE=112
#AUDIO_BITRATE=96
AUDIO_BITRATE=80
#AUDIO_BITRATE=64

#
# WIDTH
#
# 出力する映像の横幅をピクセル数で指定。
# 指定しなかった場合 (すべてコメント・アウトした場合) は、元動画ファイルと同じになる。

#WIDTH=640
#WIDTH=480
#WIDTH=440
#WIDTH=400
#WIDTH=360
#WIDTH=320
#WIDTH=280
#WIDTH=240
#WIDTH=200
WIDTH=160
#WIDTH=120
#WIDTH=80

#
# FPS = Frames Per Second
#
# 1 秒あたり何フレームの映像にするかを指定。
# 指定しなかった場合 (すべてコメント・アウトした場合) や、
# 指定より元動画のほうが FPS が低かった場合は、元動画ファイルと同じになる。
# また、負の値の場合は、元動画ファイルの FPS をその絶対値で割った数値になる。
# たとえば、FPS が 24 である元動画ファイルに対して -2 を指定した場合、12 になる。

#FPS=-5
#FPS=-4
#FPS=-3
#FPS=-2
#FPS=`echo 3 2 | awk '{ print $1 / $2 * -1; }'`	# 2/3 にしたいとき用
#FPS=`echo 4 3 | awk '{ print $1 / $2 * -1; }'`	# 3/4 にしたいとき用
#FPS=15
#FPS=12
#FPS=10
#FPS=8
#FPS=6
#FPS=5
#FPS=4
#FPS=3
#FPS=2
#FPS=1

#
# PASS (ENCODER="MENCODER" の場合のみ有効)
#
# エンコードのパス数を指定する。
# 指定しなかった場合 (すべてコメント・アウトした場合) は 2 になる。
# ENCODER="FFMPEG" の場合は、強制的に 2 になる。

PASS=3

####### ADVANCED OPTIONS #######

#
# ENCODER
#
# エンコーダを指定する。
# 指定しなかった場合 (すべてコメント・アウトした場合) や、
# "FFMPEG" 以外の文字列だった場合は "MENCODER" になる。

ENCODER="MENCODER"
#ENCODER="FFMPEG"

#
# AUTO_DELAY (ENCODER="MENCODER" の場合のみ有効)
#
# 元動画ファイルと、外部の音声ファイルで長さが異なる場合、映像ストリームと音声ストリームを──
# はじめで合わせたければ "NONE" を指定。
# 真ん中で合わせたければ "HALF" を指定。
# 終わりで合わせたければ "FULL" を指定。
# ただし、自己申請に頼っているため、あまり信用できないので注意。
# 別の文字列を指定した場合や、指定しなかった場合 (コメント・アウトした場合) は "NONE" になる。
# ENCODER="FFMPEG" の場合は、強制的に "NONE" になる。

AUTO_DELAY="NONE"
#AUTO_DELAY="HALF"
#AUTO_DELAY="FULL"

#
# CUSTOM_DELAY (ENCODER="MENCODER" の場合のみ有効)
#
# DELAY の値を自分で指定する。
# 映像を遅らせたい場合は正の値を指定。
# 音声を遅らせたい場合は負の値を指定。
# これを指定すると AUTO_DELAY の指定は無視される。不要な場合はコメント・アウト。
# ENCODER="FFMPEG" の場合は、強制的に指定なしになる。

#CUSTOM_DELAY=-3.38	# "サイハテ" で使用した値
#CUSTOM_DELAY=-11.80	# "電空少女" で使用した値

#
# AUTO_CROP
#
# 映像周囲の黒枠を自動検出し、消去するかどうかを指定。
# 指定しなかった場合 (コメント・アウトした場合) や、
# "ON" 以外の文字列だった場合は "OFF" になる。

AUTO_CROP="OFF"
#AUTO_CROP="ON"

#
# FORCE_ASPECT
#
# 元動画のアスペクト比を数値や計算式で強制指定。
# アスペクト比の狂った映像を修正するために使う。
# 不要な場合はコメント・アウト。

#FORCE_ASPECT=`echo  4 3 | awk '{ print ( $1 / $2 ); }'`	# 元動画のアスペクト比が、本来 4:3 であるとき用
#FORCE_ASPECT=`echo 16 9 | awk '{ print ( $1 / $2 ); }'`	# 元動画のアスペクト比が、本来 16:9 であるとき用

#
# ADDITIONAL_VF (ENCODER="MENCODER" の場合のみ有効)
#
# エンコード時、動画に適用するフィルタを指定。
# 基本的にいじる必要なし。
# ENCODER="FFMPEG" の場合は、この指定の意味はない。

ADDITIONAL_VF="pp=ac,"
#ADDITIONAL_VF="flip,pp=ac,"	# 元動画ファイルを MPlayer で再生したとき、映像が上下逆になる場合
#ADDITIONAL_VF="pp=md/ac,"	# インターレース解除されてない場合