2012/06/12

続ffmpegでどうにかする

前回記事で、ffmpegでどうのこうのと書いたけど、プリセット'fast'だと遅すぎて実用的じゃなかった。
fastなのに遅すぎるって、このプリセット書いた人ってのはどんなマシンスペックを標準と考えてるんだろ?まあ、細かいことは置いといて、実用的な処理時間でそこそこの品質をターゲットにしてみるかと。

計測

Wavecast標準フローとどっちが効率的かな?というのも気になったので、計測してみた。
30分番組をそれぞれのパターンで計測した。計測は'time'コマンドを使用した。
沢山サンプリングした平均ということじゃないんで、今回の結果ではということで。
プリセット以外のエンコード条件、その他は前記事どおり。

 elapsed
Wavecast標準フロー(vpre ibento7)
tssplit 0:01:15
demux 0:02:30
ffmpeg 0:19:59(video)
ffmpeg 0:04:35(audio)
mp4box 0:00:21
合計 0:28:40
fast
ffmpeg 1:38:58
mp4box 0:00:34
合計 1:39:32
veryfast
ffmpeg 0:50:32
mp4box 0:00:37
合計 0:51:09
superfast
ffmpeg 0:22:57
mp4box 0:00:34
合計 0:23:32
superfast + yadif
ffmpeg 0:53:07
mp4box 0:00:30
合計 0:53:37

結果
Wavecastフローはドキュメント通り録画時間と同じくらいの時間であった。
fastだと3倍以上!、veryfastでも倍近い時間がかかった。superfastでやっと現実的な処理時間だ。やっぱりそのくらいのハードスペックってことか。
そうそう、最近気づいたんだけど、標準フローで使われているibento7プリセットって、superfastと内容が同じだ。

yadif
最後の'superfast + yadif'のyadifは、Deinterlaceフィルタのこと。ffmpegのドキュメントを読むと-deinterlaceではなく、yadifフィルタを使いなさいということだ。指定するときは、'-vf yadif'ってやる。
結果はご覧のとおり倍近い時間がかかった。

なんでdeinterlaceしたかというと、映画やアニメはもともとプログレッシブだから大丈夫だけどニュースとかスポーツとかだと60fps録画ナマだったりするんでインターレースが気になる。やはり映像ソースやどう残したいかに合わせて使い分けかな。

結論
'superfast'でいいか。若干スピードについていけてない感があるんでスポーツ番組には不向きだけど、観れないってほどじゃない。ということで、標準フローより若干処理時間を短縮できたということかな。
逆に言えば、標準フローは思ったより非効率じゃないってことだね。ただ音ズレがね。

0 件のコメント:

コメントを投稿