さて、そのドライブレコーダーはファイル循環式で、最長15分経つと、ファイルが切れて次のファイルに行くようになっている。つまり、まず PICT001.AVI が録画され、15分後に PICT002.AVI に移る、という具合で、1時間走れば4本、2時間走れば8本の動画ファイルができあがる。そこで、このファイルを1つに繋げたいところであるが、動画編集をするソフトを使えばすぐだが、ソフトを買ってまでするほどのことでもないし、編集ソフトでやるのはいちいち操作が必要で面倒。できればコマンドラインでやってしまいたい。
そこで、フリーのFFmpegを使って、複数の動画ファイルを1つにコンカチする手順。いろいろと試行錯誤の末、次のような手順に落ち着いた。
1. まず、単純結合可能なmpgコンテナに、データを変換する
例: PICT001.AVI, PICT002.AVI, PICT003.AVI があるとして、
ffmpeg -y -i PICT001.AVI -sameq PICT001.mpg
ffmpeg -y -i PICT002.AVI -sameq PICT002.mpg
ffmpeg -y -i PICT003.AVI -sameq PICT003.mpg
2. mpg に変換したファイルをつなげる
Linuxの人は cat でどうぞ。
copy /b PICT*.mpg temp.mpg
3. このままだとタイムスタンプがおかしいらしいので、修正する
この状態だと、ファイルの再生時間長などが正しく表示されない(VideoLANなどで見てみると分かる)。次のオプションでもう一度変換すると、正しくなるようである。
ffmpeg -y -i temp.mpg -same_quant -dts_delta_threshold 1 PICTALL.mpg
4. 結合した修正済みデータを、希望のエンコーダーで変換する
そのまま使うなら別にこのままでもよいが、映像:Xvid 1200k 15fps、音声:mp3 64kbps の例。
ffmpeg -y -i PICTALL.mpg -vcodec libxvid -b:v 1200k -r 15 \
-acodec libmp3lame -ab 64 -ar 44100 \
PICTXVID.avi
あとは、PHP For Windowsあたりを使ってスクリプトを書けば、D&Dで結合+再変換まで自動で処理できるようになる。
[追記]
最近のffmpegのビルドでは、-sameq/-same_quant オプションが削除されているようである。
このときは、-qscale 0 を代わりに指定してやるとよいようだ。
▼レンタルサーバー・VPS比較表を見る▼