同じ設定の動画を順番につなぐなら、FFmpegのconcat demuxerでリストを読み込み、-c copyで再エンコードせずに結合できます。まず入力のトラック構成と時間の単位を確認し、別名の出力でつなぎ目・末尾・音声を検査します。MP4やAVIという拡張子の一致だけでは判断できません。
再エンコードせずに結合する前の確認
| 確認する情報 | 判断 |
|---|---|
| 映像・音声などの数と順序 | 途中だけ音声がない/別トラックの構成なら、そのまま同じリストに混ぜない |
| コーデック・time_base | 公式の前提。time_baseは再生時刻を数える単位で、fpsと別 |
| 映像のサイズ・ピクセル形式・fps | 受け取る編集ソフト/プレーヤーでも扱える共通設定に揃える |
| 音声の形式・sample_rate・channels | 別設定の音声を混ぜず、必要なトラックを決める |
| 各入力の長さと完全性 | 入力が全部存在して末尾まで読めるか確認。記録された長さだけを信頼しない |
公式のconcat説明では、同じコーデック・タイムベース等のストリームが前提です。H.264/MP4はauto_convertでビットストリームを変換し、解像度が途中で変わるデータを扱う場合もあります。この機能はサイズを揃える処理ではなく、任意のサイズ変更をすべての再生先で扱える保証にもなりません。実用上は共通設定を先に確認します。
Windowsでffmpegを準備する
基本コマンド記事のインストール手順に沿って準備し、新しく開いた PowerShell で版を確認します。
ffmpeg -version
ffprobe -version手動で展開した場合は、既存のユーザー変数 Path を「編集」し、ffmpeg.exe のある bin フォルダーを項目として追加します。
既存の Path 全体を置き換えないでください。
Path を追加しない場合は、PowerShell の & と引用符を使って実行ファイルを指定できます。
& "C:\Program Files\ffmpeg\bin\ffmpeg.exe" -versionこのパスは例なので、実際に展開した場所に置き換えます。
入力の不足を結合前に見つける
Test-Path -LiteralPath "a.mp4" -PathType Leaf
Test-Path -LiteralPath "b.mp4" -PathType LeafTrueはファイルが存在する結果です。Falseならリストを書く前に場所・名前を直します。存在しても途中で壊れた入力や設定違いまでは判別できないため、次のffprobeと出力の確認も行います。
同じ設定の動画をリストで結合する
以下のコマンド例は、動画と出力先を置く作業フォルダーで PowerShell を開いて実行します。
元動画は別名で保管し、出力ファイル名が既存ファイルと重ならないようにしてください。
例は-nで既存出力への上書きを止めます。出力名が重なるときは、新しい別名で実行します。
ここでは、同じフォルダーにある a.mp4 と b.mp4 を順に結合します。
練習するなら、次の2本を生成できます(音声なし・2秒ずつ・640×360・30fps・H.264)。
ffmpeg -n -f lavfi -i "color=c=red:s=640x360:r=30:d=2" -c:v libx264 -pix_fmt yuv420p a.mp4
ffmpeg -n -f lavfi -i "color=c=blue:s=640x360:r=30:d=2" -c:v libx264 -pix_fmt yuv420p b.mp4テキストエディターで次の内容を list.txt として、動画と同じフォルダーにUTF-8・BOMなしで保存します。
ffconcat version 1.0
file 'a.mp4'
file 'b.mp4'先頭行には余計な空白を入れず、ファイル名は結合順に並べます。
ffmpeg -n -f concat -i list.txt -map 0:v:0 -map "0:a:0?" -c copy out.mp4この例は最初の映像と、存在する最初の音声を選びます。複数の音声・字幕を全部選ぶには-map 0などを検討しますが、出力コンテナへ入れられる形式か確認します。-c copyは選んだデータを再エンコードせず写す指定です。
旧例の -map 0:a は、音声のない動画ではエラーになるため、この例では使いません。
AVIも、同じストリーム構成で出力AVIが対応するコーデックなら、リストに a.avi・b.avi を指定し、出力を out.avi にできます。
拡張子が違うだけで互換性が保証されるわけではありません。
結合前後を確認する
ffprobe -v error -show_entries stream=codec_type,codec_name,width,height,pix_fmt,time_base,r_frame_rate,sample_rate,channels -of compact a.mp4
ffprobe -v error -show_entries stream=codec_type,codec_name,width,height,pix_fmt,time_base,r_frame_rate,sample_rate,channels -of compact b.mp4
ffprobe -v error -count_frames -show_entries stream=index,codec_type,nb_frames,nb_read_frames,duration:format=duration -of compact out.mp4各入力のトラック数・順序、コーデック、タイムベースを確認し、映像の解像度や音声のサンプルレートなどが異なる素材は先に揃えます。
この情報が一致していても、壊れた入力やコーデック固有の設定差までは検出できないので、結合後を再生して確認してください。
2026年10月2日、Windows 11・ffmpeg 9.0.2で上の練習用MP4を結合した結果、120コマ・4.000秒でした。
赤60コマ、青60コマが順に残り、デコードした全コマの内容が元の2本と一致しました。
音声なしのMPEG-4動画2本をAVIで結合した場合も、元の120コマが同じ順序で残ることを確認しました。
音声つきの同じ4秒動画2本では、240コマ・8.000秒の出力を確認しました。
元動画は変更されないので、不要な out.mp4 だけを削除すれば作業前に戻せます。
元入力の合計時間と出力の映像・音声それぞれの長さを比べ、各つなぎ目の前後と最後まで再生します。総時間だけ一致していても、途中の音声・映像の欠落まで否定できません。

絶対パス・空白を含むファイル名
英数字・ピリオド・アンダースコア・ハイフンだけの相対パスは、既定の安全判定で使用できます。
フォルダーを含む相対パスでも、各要素がその文字に収まり先頭がピリオドでなければ-safe 0は不要です。リスト内の相対パスはPowerShellの現在地ではなく、リストファイルの場所を基準に解決されます。
絶対パス、空白、日本語などを使う場合は、自分で作ったリストに限って -safe 0 を付け、入力と出力のパスを引用符で囲みます。
ffmpeg -n -f concat -safe 0 -i "C:/demo/video files/list.txt" -map 0:v:0 -map "0:a:0?" -c copy "C:/demo/video files/out.mp4"リスト内も file ‘C:/demo/video files/a.mp4’ のように、パスを単一引用符で囲みます。
つなぎ目・音声・途中切れの原因を調べる
| 症状 | 確認する順番 |
|---|---|
| Impossible to open/途中で終了 | リスト中の全入力とパス。出力が一部だけ残っていないか |
| unknown keyword | fileや先頭行の書式、BOMなし、通常の半角引用符 |
| Unsafe file name | 絶対パス・空白等の有無。自作リストだけに-safe 0を指定 |
| 2本目から時刻がずれる | トラック構成、time_base、入力の表示時間と記録時間 |
| つなぎ目に無音・空白 | 最初の映像/音声の長さが揃っているか。総時間だけで正常としない |
| Non-monotonic DTSなど | 時刻の逆行と入力設定の違い。-fflags +genptsを万能な修正として足さない |
次の入力の開始時刻は前のファイルの記録上の長さを基に調整されます。ビットレートから推定した長さや途中で切れたファイルでは誤差が出るため、実際の長さを確認できる場合はリストのdurationで補正できます。これはfpsや壊れた映像を修復する指定ではありません。
ffconcat version 1.0
file a.mp4
duration 20.0
file b.mp4duration 20.0は旧例の20秒という指定です。上の2秒の練習入力に貼り付ける値ではありません。使用する入力の実際の長さを確認して置き換えます。音声と映像で長さが異なる場合は、全トラックの時刻調整により隙間ができることがあります。
異なる設定の素材をつなぐ場合
スマートフォンとカメラなど、サイズ・コーデック・音声構成が異なる素材では、先に共通設定のコピーを作るか、編集ソフトで読み込んで一本へ書き出します。FFmpegのconcatフィルターを使う場合も、各区間の開始時刻を0へ揃え、解像度などを明示して揃える必要があります。音声のある区間とない区間を混ぜる場合は、必要な無音やトラック数を先に決めます。concatフィルターの公式条件。
再エンコードしたコピーは原本と区別して保管します。FFmpegでの変換は基本コマンド、画面から圧縮する場合はHandBrakeを参照してください。fpsを変えると動き方が変わるため、素材に合わせた共通設定を選びます。
既存の筆者の使用記録
前から試してみたかったコマンドで映像編集できるffmpegを使って動画を結合してみました。
結論からいうと便利ですが、カットの切れ目がわかりやすいところできったほうが良さそうです。
つながりが微妙にスムーズに行かない可能性があります。
上の感想は既存本文に残っていた筆者の使用記録です。今回の生成素材のCLI試験によって、新しい実撮影素材での使い心地を測定したものではありません。10月2日のMP4/AVI・音声付きの測定記録は前の確認節に保持しています。
2026年10月3日の自作素材での確認
Windows 11 Pro build26200、Ryzen 5 7530U・RAM約16GB、FFmpeg9.0.2 gyan.dev full buildで、上の赤・青の2秒640×360・30fps・音声なしのH.264と、そこから作ったMPEG-4/AVIを使用しました。
| 試した内容 | 結果 |
|---|---|
| 赤→青のMP4をコピー結合 | 120コマ・4.000秒。赤60→青60のデコードSHA-256が元と一致 |
| MPEG-4/AVIをコピー結合 | 元2本の120コマが同じ順序・内容で残る |
| 空白を含むフォルダーのリスト/ASCII絶対パス | 相対ファイル指定と-safe 0を用いる絶対パスの両方で120コマ。任意の特殊文字を試した結果ではない |
| BOMありリスト | 先頭のキーワードを読めず停止。BOMなしの同じリストは成功 |
| 赤→存在しないファイル→青 | 終了コード0でもImpossible to openのログと、赤だけの60コマ・2.000秒の出力が残った |
この試験で元と一致したのは音声なしの映像です。実撮影素材の音声同期やPremiereへの読み込み、任意プレーヤーの再生を実証した結果ではありません。出力ができたことや終了コード0だけでは、リストを最後まで処理できたと判断しません。入力数・出力時間・各境界と末尾を確認します。
字幕はSRTの焼き込みと埋め込み、編集手順は動画編集の一覧へ進んでください。公式資料確認:2026年10月3日。根拠となる条件と今回の記録を区別し、2019年からの旧URLを維持しています。
