クリックPAPAのPC備忘録

hiroyukip.exblog.jp

動画ファイルの結合

c0050265_233132.png

かつて2つの動画ファイルを1つに結合(join)しようとしたときに作成したメモやらバッチファイルやらが出てきたので、投稿。
Windows環境であれば、通常はUniteMovieあたりで結合するんだろうけど、FFmpegで見る限り同条件でエンコードしたであろう2つのファイル(FLVコンテナ)でありながら、UniteMovieで結合できなかったので、いろいろ苦労した。まず、コマンドプロンプトから次のとおり2つのファイルをそれぞれ映像部分(FLV1 / Sorenson H.263コーデック)と音声部分(無圧縮PCM)に分離(demux)。





echo 動画「けしからん1.flv」を映像部分(temp1.mov)と音声部分(temp1.wav)に分離
ffmpeg -i "けしからん1.flv" -vcodec copy -an temp1.mov
ffmpeg -i "けしからん1.flv" -vn temp1.wav
echo 動画「けしからん2.flv」を映像部分(temp2.mov)と音声部分(temp2.wav)に分離
ffmpeg -i "けしからん2.flv" -vcodec copy -an temp2.mov
ffmpeg -i "けしからん2.flv" -vn temp2.wav

映像部分をMOVコンテナ(QuickTime File Format)に分離したのは、AVI又はMPEGコンテナに分離した場合、この後のUniteMovieでの結合作業(AVI形式のバックエンドは別途用意したVirtualDubMod、MPEG形式は同梱されていたmpgtxmpegUtil及びbbMPEG)で躓いたから。音声部分も本当はMP3形式のままにしたかったんだけど、こちらもこの後のSoXでの結合作業(バックエンドは別途用意したlibmad-0.dll及びlibmp3lame-0.dll)で躓いたから。でもSoXのほうは、試しに別のMP3ファイルを結合したら成功したので、SoX又はそのバックエンドの問題ではなく、このMP3ファイル固有の問題だろう。おそらく、最初にUniteMovieで単純に結合できなかったのも、その辺りにありそう。
次に、UniteMovieでtemp1.movとtemp2.movを結合し、temp3.movを作成(バックエンドは別途用意したQT Lite)。これもコマンドプロンプトから作業したいCLI派又はUniteMovieが使えないLinuxユーザーには、MPlayerに同梱されているmencoderで以下のとおり結合する手もあるが、作成されるtemp3.movは実際はAVIコンテナだったりする。

mencoder temp1.mov temp2.mov -ovc copy -nosound temp3.mov

併せて、コマンドプロンプトから次のとおりSoxで音声部分を結合し、最後に、映像部分にDivX3.11コーデック(FourCCの詐称で実はMicrosoft MPEG-4 v3)、音声部分にMP3コーデックでエンコードし、DivX Media Format(これも詐称で実はAVIコンテナ)へ結合(mux)。

echo temp1.wavとtemp2.wavを結合し、temp3.wavを作成
sox temp1.wav temp2.wav temp3.wav
echo 映像部分(temp3.mov)と音声部分(temp3.wav)をエンコードしつつ、「けしからん.divx」へ結合
ffmpeg -i temp3.mov -i temp3.wav -f avi -vcodec msmpeg4 -vtag DIV3 -coder ac -mbd 1 -me_method epzs -trellis 1 -subq 5 -cmp chroma -flags loop -q:v 2 -qmin 1 -qmax 51 -qsquish 1 -b:v 500k -maxrate 2000k -bufsize 100000k -acodec mp3 -b:a 32k "けしからん.divx"

-b:vは映像のビットレートのコマンドラインオプションで、Androidのスマートフォンの容量がカツカツなマイクロSDカードにコピーするため500kとケチったけど、本当なら最低600kはないとブロックノイズ等酷いのでドーンと盛っちゃっても良いかも知れない。なお、DivXコーデック及びコンテナを選択したのは、PS3 Media Serverと親和性が高いから。だってPCの能力的にトランスコード再生なんてやってられないんだもの。だから-vcodec mpeg4 -vtag DX50でも可。


[PR]

by hiroyuki_papa | 2014-10-12 17:15 | コンピュータ

<< PS3 Media Serve... | ホーム | Linuxのスクリーンショット >>