本日はFFMPEGを使って複数の動画を時間方向に連結してみたいと思います。複数本の動画を用意し、指定した順番で各動画が流れるように1本の動画に連結します。
動画編集ソフト等を使えば簡単にできることではありますが、有償のソフトを用いる場合にはコストが掛かります。また、動画編集ソフトは動作が重いことが多く、スペックの高いPCでないと動かしづらい場合もあります。
そこで、今回はFFMPEGを使って、簡単に複数の動画を結合してみたいと思います。
今回の環境
・Windows 10 Pro 64bit
・FFMPEGの実行環境構築済
FFMPEGの実行バイナリファイルの入手方法については以下の記事をご覧ください。
複数の動画を連結するFFMPEGのコマンド
今回は3本の動画を連結して1本の動画を作ってみたいと思います。
動画の名前は「input1.mp4」「input2.mp4」「input3.mp4」としました。
使用するコマンドは以下の「exec.bat」の通りですが、exec.batを実行する前に「movielists.txt」というテキストファイルを用意する必要があります。「movielists.txt」に、連結する入力動画の名前を、連結したい順番に記述する必要があります。
ffmpeg -safe 0 -f concat -i movielists.txt -c copy output.mp4 |
file input1.mp4 | |
file input2.mp4 | |
file input3.mp4 |
今回はinput1.mp4、input2.mp4、input3.mp4の3つの動画を、この順番で連結します。
「movielists.txt」の中では、これらのファイル名の頭に’file’をつけ、連結したい入力動画ファイルの名前を連結したい順番に記述します。
この「movielists.txt」を用意してから、コマンドを実行することで動画が結合されます。

今回input1.mp4(3秒)、input2.mp4(2秒)、input3.mp4(4秒)という3つの動画を結合して、正常にoutput.mp4が9秒の長さで出力されていることがわかります。
注意点:解像度の異なる動画を連結する場合
本コマンドで解像度の異なる動画を連結する場合、どうなるでしょうか。例えばinput1.mp4が1920×1080の解像度なのに対して、input2.mp4は960×540だとします。
結論から言うと、最初の動画(input1.mp4)に対して、異なる解像度の動画(input2.mp4)が入力されたとき、エラーが出て連結が失敗します。
そのため、本コマンドで動画を連結する場合には、事前に動画の解像度を揃えておく必要があります。
動画の解像度の変更は以下のコマンドで実現することができます。「-s」の後に、得たい解像度を入力してください。「横(幅)×縦(高さ)」の順番です。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ffmpeg -i input.mp4 -s 1920x1080 output1.mp4
ただし、このやり方では入力動画の縦横比は保持されないので、指定サイズが不適切だと縦や横に引き伸ばされた動画が出力されてしまうので注意してください。
より詳しい動画の解像度を変更する方法につきましては、以下の記事にまとめておりますので、参考にしてみてください。
まとめ
FFMPEGを使うことで、簡単に動画を結合することが確認できました。