ffmpegで動画を結合する(最新版concatの使い方)

2018年1月14日ffmpegconcat, ffmpeg, エンコード

ffmpegにはクセがあって、バージョンごとにコマンドが若干違ったりしている。その最たるものが動画を結合する際に使用する「concat」で、世の中に出回っているconcatの使用方法だとうまくいかないことが多い。
今回は、当方の環境で動作している「concat」の使い方を紹介したい。

当方環境のffmpegバージョン

ソースからビルドしているので非常に分かりづらいが、まあだいたい「最新版」と捉えていただいてたぶん結構です。

よくある「concat」の使い方

よく見かけるffmpegのconcatの使い方は、次のような形でファイルを”|”で区切って指定する方法である。

しかし、最近のffmpegではこの記法はサポートされなくなってしまった。
このことは、ffmpegの公式サイトでも記載されている。

最新版ffmpegのconcatの使い方

じゃあどうすればいいかと言うと、次のような手順になる。

  • 結合したいファイルの名称を適当なテキストファイルに羅列する
  • 当該のテキストファイルを -iでffmpegに読み込ませる

具体的な使い方

適当なファイルにファイルの名称を出力する

例えば、0.mp4、1.mp4、2.mp4を結合したい場合、次のようなテキストファイルを作成する。
なお、ファイルは絶対パスで指定することが望ましい(今回は、「/home/hoge」においてあることとする。

上記のファイルを、「concat.txt」などで保存しておく。

ffmpegで結合をする

一言で言ってしまうとこんな感じ。

-fオプションでconcatであることを明示したのち、-iオプションでテキストファイルの場所を指定する。
その後に指定しているものは、次のような意味を持っている(場合によっては必要ない)

  • -c:v copy :ビデオを元データからコピー
  • -c:a copy :オーディオを元データからコピー
  • -c:s copy :字幕データを元データからコピー
  • -map 0:v :ビデオファイルが複数存在する場合は全てのものを同梱する
  • -map 0:a :オーディオファイルが複数存在する場合は、全てのものを同梱する
  • -map 0:s? :字幕ファイルを検索し、存在する場合は全てのものを同梱する

これでうまいことconcatを行うことが出来る。