← ブログ

FFmpegで動画を結合・連結する方法(2026年ガイド)

FFmpegを使って複数の動画ファイルを結合・連結するための完全ガイド。concatデマクサー、フィルター、プロトコルの各方式と、無料のワンクリック代替ツールを解説します。

3 min read

複数の動画クリップを1つのファイルに結合したいですか?FFmpegには動画を連結する方法がいくつかありますが、適切な方法はクリップが同じフォーマット、コーデック、解像度を共有しているかどうかによって異なります。

このガイドでは、正確なコマンドと合わせて3つのアプローチをすべて説明します。ターミナルでコーデックの不一致をデバッグしたくない方のために、最後に無料のドラッグ&ドロップの代替手段も紹介します。


前提条件:FFmpegのインストール

FFmpeg

macOS:

brew install ffmpeg

Ubuntu/Debian:

sudo apt update && sudo apt install ffmpeg

Windows: ffmpeg.orgからダウンロードし、解凍してbinをPATHに追加してください。


方法1:Concatデマクサー(同じフォーマット — 最速)

これは最速かつ最もシンプルな方法です。すべての動画が同じコーデック、解像度、フレームレートを持っている場合に機能します。

ステップ1:ファイルリストを作成する

files.txtというテキストファイルを作成します:

file 'clip1.mp4'
file 'clip2.mp4'
file 'clip3.mp4'

ステップ2:concatコマンドを実行する

ffmpeg -f concat -safe 0 -i files.txt -c copy output.mp4
  • -f concat — concatデマクサーを使用
  • -safe 0 — 絶対パス/相対パスを許可
  • -c copy — 再エンコードなし(即時)

ファイルリストを自動生成する

Linux/macOS:

for f in *.mp4; do echo "file '$f'" >> files.txt; done
ffmpeg -f concat -safe 0 -i files.txt -c copy output.mp4

Windows (PowerShell):

Get-ChildItem *.mp4 | ForEach-Object { "file '$($_.Name)'" } | Out-File -Encoding ascii files.txt
ffmpeg -f concat -safe 0 -i files.txt -c copy output.mp4

方法2:Concatフィルター(異なるフォーマット — 最も柔軟)

クリップのコーデック、解像度、フレームレートが異なる場合は、concatフィルターが必要です。これはすべてを一致するように再エンコードします。

動画2本の場合:

ffmpeg -i clip1.mp4 -i clip2.mov \
  -filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[outv][outa]" \
  -map "[outv]" -map "[outa]" output.mp4

動画3本の場合:

ffmpeg -i clip1.mp4 -i clip2.mov -i clip3.avi \
  -filter_complex "[0:v][0:a][1:v][1:a][2:v][2:a]concat=n=3:v=1:a=1[outv][outa]" \
  -map "[outv]" -map "[outa]" output.mp4
  • n=3 — 入力セグメントの数
  • v=1 — 動画ストリームの出力数
  • a=1 — 音声ストリームの出力数

連結前に解像度を正規化する

クリップの解像度が異なる場合は、先にスケールを合わせます:

ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex \
    "[0:v]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2[v0]; \
     [1:v]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2[v1]; \
     [v0][0:a][v1][1:a]concat=n=2:v=1:a=1[outv][outa]" \
  -map "[outv]" -map "[outa]" output.mp4

方法3:Concatプロトコル(MPEG-TSのみ)

MPEGトランスポートストリームの場合、concatプロトコルを直接使用できます:

# まずMPEG-TSに変換
ffmpeg -i clip1.mp4 -c copy -bsf:v h264_mp4toannexb clip1.ts
ffmpeg -i clip2.mp4 -c copy -bsf:v h264_mp4toannexb clip2.ts

# 次に連結
ffmpeg -i "concat:clip1.ts|clip2.ts" -c copy -bsf:a aac_adtstoasc output.mp4

この方法は一般的にもはや推奨されていません。concatデマクサー(方法1)の方がシンプルで信頼性が高いです。


特殊なシナリオ

映像トラックと音声トラックを結合する

動画ファイルと別の音声ファイルを組み合わせる:

ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -shortest output.mp4
  • -shortest — 短い方のストリームが終了したら停止

動画の音声を置き換える

ffmpeg -i video.mp4 -i new_audio.mp3 -c:v copy -c:a aac -map 0:v -map 1:a output.mp4

フレームレートが異なる動画を連結する

連結前にすべての入力を30fpsに強制する:

ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex \
    "[0:v]fps=30[v0];[1:v]fps=30[v1]; \
     [v0][0:a][v1][1:a]concat=n=2:v=1:a=1[outv][outa]" \
  -map "[outv]" -map "[outa]" output.mp4

音声のない動画

一部のクリップに音声トラックがない場合は、無音の音声を追加します:

ffmpeg -i clip_no_audio.mp4 -f lavfi -i anullsrc=r=44100:cl=stereo \
  -c:v copy -c:a aac -shortest clip_with_silence.mp4

その後、通常通り連結します。


よくあるエラーと対処法

“Discarding non-monotonous DTS”

クリップ間でタイムスタンプがずれています。再エンコードしてください:

ffmpeg -f concat -safe 0 -i files.txt -c:v libx264 -c:a aac output.mp4

“Stream 0 codec does not match”

クリップのコーデックが異なります。concatデマクサーの代わりにconcatフィルター(方法2)を使用してください。

“Discarding 1 additional packets” / 同期の問題

-fflags +genptsを追加してタイムスタンプを再生成してください:

ffmpeg -fflags +genpts -f concat -safe 0 -i files.txt -c copy output.mp4

出力のクリップ間に黒いフレームが入る

クリップのピクセルフォーマットが異なる場合に発生します。共通のフォーマットを強制してください:

ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex "[0:v]format=yuv420p[v0];[1:v]format=yuv420p[v1];[v0][0:a][v1][1:a]concat=n=2:v=1:a=1[outv][outa]" \
  -map "[outv]" -map "[outa]" output.mp4

ターミナル不要:WaveSpeed Desktopを使う

FFmpegで動画を結合するには、3つの異なる方法から選択し、ファイルリストを作成し、コーデックの不一致を処理し、タイムスタンプの問題をデバッグし、正規表現の悪夢のようなfilter_complex文字列を書く必要があります。

WaveSpeed Desktopには、すべてをシンプルにする組み込みのメディアマージャーが含まれています:

  • 動画クリップをドラッグ&ドロップ
  • 必要に応じて順序を変更
  • マージをクリック — 1ファイルで完了

フォーマットが異なる?解像度が違う?アプリが自動的に処理します。

WaveSpeed Desktop Media Merger

WaveSpeed Desktopを無料でダウンロード: https://github.com/WaveSpeedAI/wavespeed-desktop/releases


よくある質問

どのconcat方法を使えばいいですか? すべてのクリップが同じコーデックと解像度を持っている場合は、**方法1(デマクサー)**を使用してください — 即時に処理されます。クリップが何らかの点で異なる場合は、**方法2(フィルター)**を使用してください。

クリップ間にトランジションを追加できますか? FFmpegはxfadeフィルターで基本的なクロスフェードトランジションをサポートしていますが、複雑です。トランジションには、ビジュアルエディターの方が通常は簡単です。

動画を結合すると品質が下がりますか? -c copy(方法1)では下がりません。concatフィルター(方法2)では再エンコードが発生し、わずかな品質低下が起こる可能性があります。低いCRF値(18〜20)を使用して最小限に抑えてください。

結合できる動画の数に制限はありますか? FFmpegには明確な制限はありません。実際には、メモリと処理時間は入力数に比例してスケールします。