ffmpegとHandbrakeのdeinterlaceを比較する
と,いうことで,これまた出張から帰った後,ivisで撮影したMTSファイルをLinuxBoxにコピーし,サイズを小さくしたMP4形式のファイルへトランスコードするというルーチンワークを行いました.トランスコードはffmpegを使用して行ったわけですが,出力結果がどうもおかしい.
いや,前々から気にはなっていたのだけど,今回は動きが激しい対象を撮影したため,それが顕著に現れている.サンプルを挙げると,以下のような感じ.
そうです.インターレース解除のオプションを付けるのを忘れていました….
そんなわけで,下記のようなスクリプトに書き換えて,もう一度バッチで実行.
#!/bin/sh
for fname in "$@"
do
echo "Start:" $fname -- `date`
/usr/local/bin/ffmpeg -y -i $fname -r 30000/1001\
-threads 2 -vcodec libx264 -b 4000k -nr 50 -deinterlace\
-s 960x540 -acodec libfaac -ac 2 -ar 48000 -ab 192k\
-vpre libx264-hq -crf 22 `dirname $fname`/`basename $fname ".MTS"`.mp4
echo `date`
done
結果は次のような感じ.
うむ.きちんと処理されてますな.
HandBrakeでも試してみましょう.使用したスクリプトは次のような感じ.
#!/bin/sh
for fname in "$@"
do
echo "Start:" $fname -- `date`
nohup /usr/local/bin/HandBrakeCLI -i $fname\
-o `dirname $fname`/`basename $fname ".MTS"`.mp4\
-e x264 -b 4000 -a 1 -E faac -B 192 -R Auto -6 dpl2\
-f mp4 -P --crop 0:0:0:0 -m -2 -X 960 --deinterlace\
-T -x ref=2:bframes=2:me=umh > /dev/null
echo `date`
done
そして出力結果は以下の通り.
上記の例では,どちらも同じような感じに見えるけど,別のシーンを見てみると,かなり結果に差が出ています.
ffmpegの出力 |
|
HandBrakeの出力 |
※トリミングのせいで,画像サイズが一致していないのはご愛嬌 :-)
拡大してみると分かりますが,HandBrakeの方がシャープに見えます.
巷では,ffmpegのインターレース解除は『まぁあまり期待せんとき』という扱いのようです.私もMTSの変換に関しては,今後は前述のHandBrakeを使用したスクリプトを利用しようかなぁと考えています.
参考までに,HandBrakeを使用して変換した動画のサンプル(mp4形式)を2つ程貼っておきます.視聴されたい方は,以下の画像をクリックしてみてください.
音がかなりデカイので,再生時は気を付けてくださいまし.Have Fun!
動画1.約 12MB |
![]() |
動画2. 約 27MB |
![]() |
| 固定リンク
コメント