タイトル長いけど、そのままです。
環境はUbuntu12.04
ffmpegは動画の連結オプションがややこしい上にcropと併用すると上手く動かなかったりつまづく所が多かったので。
まずffmpeg をソースからインストールする
apt-get からでもインストールできるけどライセンスの問題で色々と重要な機能が使えないのでちゃんと使うなら必ずソースからインストールしたほうが良し。
バイナリでインストールしたのが古いと -filter_complex オプションが使えなくて
ffmpeg: unrecognized option '-filter_complex'
などが出たりする。
インストール方法はここにあるとおりにすればOK。
http://ffmpeg.org/trac/ffmpeg/wiki/UbuntuCompilationGuide
動画の連結
ハマったのが -filter_complex オプションを使って動画の連結をすると -vf オプションでのcropが無効化されてしまう点。
あと何故か concat=n=2:v=1:a=1 と音声をオンにして -filter_complex の crop を使おうとすると
Too many inputs specified for the "crop" filter.
のエラーが出てエンコードできない。
何で映像部分のcropオプションが音声があると使えないのかは不明。
ちなみに a=0
でも1つ目の動画の音声は残るので初めの方の音声だけ聞いて確認してると2つ目の動画の音声が無くて悲しい事態になる。
というわけで映像と音声を別々に連結して、最後に映像と音声を合成するしかなさそう。めんどくさい。
まず音声をwavで結合して抽出。
ffmpeg -i input1.avi -i input2.avi -filter_complex "concat=n=2:v=0:a=1" audio.wav
neroAacEncを使ってaacに変換
neroAacEnc -if "audio.wav" -of "audio.aac" -2pass -br 96000
次に動画を連結しつつ2passでエンコード。
ffmpeg -i input1.avi -i input2.avi -filter_complex "concat=n=2:v=1:a=0, crop=704:420:8:0" -s 640x360 -pass 1 -vb 900k -an video.mp4
これで720x420の元動画の左右を8pxずつcropしてから640x360にサイズ変更して、音声なしで出力の1pass目ができるので
ffmpeg -i input1.avi -i input2.avi -filter_complex "concat=n=2:v=1:a=0, crop=704:420:8:0" -s 640x360 -pass 2 -vb 900k -an video.mp4
で2pass目を行う。1pass目でできたvideo.mp4を上書きするか聞いてくるのでOKで。
ちゃんと1パス目でクロッピングやサイズ変更、それに連結ができてるかを確認しておかないと2パス目の後に気づいた時に時間の無駄を嘆くことになる。
音声と映像が無事連結されてたら、それらを結合
ffmpeg -i video.mp4 -i audio.aac -c copy output.mp4
以上で終了!やっと終わった―!
参考