複数のmpeg動画の結合サーバ & UNIX, 徒然
複数(9~180)のmpeg1video + mp2の結合をすることがあるのだが、音ずれが発生するため、音声と映像に分けて結合したり試行錯誤していたのだが、現段階で最も簡単と思われる結合方法にたどり着いたのでメモ。
mpeg1なので、catで結合すればOKなハズだが、カクるため、細切れの状態で音声と映像をdemuxして結合。
結合された音声と映像をmultiplexして完成としていた。
…のだが、それでもカクったり音ずれが発生するのでもっと処理が早くかつクオリティの高い結合法を模索してみた。
(念のため、手動処理ならあまり苦労せずできると思う。あくまで自動処理でなおかつ早く…が目的。)
結論から言うとffmpegを使った。
(1年ぐらい前の試行錯誤からmplexやmencoderを使っていたが、結局ffmpegに戻った。)
まず、catで結合。
んで、ffmpegでストリームをきれいにする感じで再エンコード。
このとき、オプションに"-dts_delta_threshold"を付ける。
何をしているオプションなのかよく分からないのだが、timestampをどうにかするらしい。
これを付けないと、ファイルによってはtimestampがどうとかってエラーを大量に吐いて映像が欠ける(短くなる)。
ちなみに、このオプションを付けると出力ファイルの指定に"-o"が必要になる様子。
最終的に、
cat {結合したいファイル群} > {結合ファイル}
ffmpeg -i {結合ファイル} -y -b 1200k -s 640x480 -vcodec mpeg2video -ab 192k -acodec mp3 -nr 500 -dts_delta_threshold -o {出力ファイル}
って感じになる。
codecやらは目的に応じて自由に変えればよい。
-nrについては効果があるのか疑問だが、一応付けている。
(ビットレートが低いからかブロックノイズが気になるので…。かといってこれ以上ビットレートを上げたくない。)
なんだか、-mbd {0,1,2}でブロックノイズを減らせるらしい。
現在試験中。
