0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

FFmpegで複数の動画ファイルを結合する方法

Last updated at Posted at 2025-07-21

音声に写真をくっつけることができたので、今夜は、動画+動画をくっつけることに挑戦!

FFmpegで複数の動画ファイルを結合する方法

はじめに

動画編集において、複数の動画ファイルを1つに結合する作業は頻繁に発生します。今回は、FFmpegのconcatフィルターを使用して、効率的に動画ファイルを結合する方法を解説します。

前提知識

FFmpegとは
FFmpegは、動画・音声ファイルの変換、編集、ストリーミング配信などを行うことができるオープンソースのマルチメディアフレームワークです。コマンドライン上で動作し、様々な形式の動画・音声ファイルを扱えます。

concatフィルターとは
concatフィルターは、FFmpegが提供する複数のメディアファイルを連結(結合)するための機能です。『concat』は『concatenate』の略で、『連結する』という意味です。

実際の作業手順

  1. ファイルリストの作成
    まず、結合したい動画ファイルのリストを作成します。
echo "file '001.mp4'" > filelist.txt
echo "file '002.mp4'" >> filelist.txt

コマンドの解説

echo: 指定した文字列を出力するコマンドです

 > リダイレクト演算子。出力をファイルに書き込みます(上書き)
>> リダイレクト演算子。出力をファイルに追記します

filelist.txt: 結合対象のファイル一覧を記述するテキストファイルです

2. ファイルリストの確認

作成したファイルリストの内容を確認します。

cat filelist.txt

コマンドの解説

cat: ファイルの内容を表示するコマンドです(『concatenate』の略でもあります)

3. FFmpegによる動画結合

ffmpeg -f concat -safe 0 -i filelist.txt -c copy merged_output.mp4

オプションの詳細解説

-f concat: 入力フォーマットをconcatに指定します
-safe 0: ファイルパスの安全性チェックを無効化します(相対パスや特殊文字を含むファイル名でも処理可能)
-i filelist.txt: 入力ファイルとしてファイルリストを指定します
-c copy: エンコードを行わず、ストリームをそのままコピーします(高速処理が可能)
merged_output.mp4: 出力ファイル名です

この方法のメリット

  1. 高速処理
    -c copyオプションにより再エンコードを行わないため、処理時間が大幅に短縮されます。
  2. 品質劣化なし
    再エンコードを行わないため、動画の品質が劣化しません。
  3. 大量ファイルの処理
    ファイルリストを使用することで、多数の動画ファイルを一度に処理できます。

ファイル形式の統一
結合する動画ファイルは、同じコーデック、解像度、フレームレートである必要があります。異なる場合は再エンコードが必要となります。
ファイルパスの記述
ファイルリスト内では、ファイル名をシングルクォートで囲む必要があります。スペースや特殊文字を含むファイル名でも正しく処理されます。
応用例
より多くのファイルを処理する場合

応用例 より多くのファイルを処理する場合

# 複数ファイルを一度にリストに追加
for i in {001..010}; do
    echo "file '$i.mp4'" >> filelist.txt
done

異なる形式のファイルを結合する場合

# 再エンコードありの結合
ffmpeg -f concat -safe 0 -i filelist.txt -c:v libx264 -c:a aac merged_output.mp4

まとめ

FFmpegのconcatフィルターを使用することで、複数の動画ファイルを効率的に結合できます。特に-c copyオプションの使用により、高速かつ品質劣化のない処理が可能です。動画編集作業において、このテクニックは非常に有用です。



pk desktop %  cat filelist.txt

file '001.mp4'

file '002.mp4'

pk desktop % ffmpeg -f concat -safe 0 -i filelist.txt -c copy merged_output.mp4


ffmpeg version 7.1.1 Copyright (c) 2000-2025 the FFmpeg developers

  built with Apple clang version 17.0.0 (clang-1700.0.13.3)

  configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/7.1.1_3 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags='-Wl,-ld_classic' --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libaribb24 --enable-libbluray --enable-libdav1d --enable-libharfbuzz --enable-libjxl --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox --enable-audiotoolbox --enable-neon

  libavutil      59. 39.100 / 59. 39.100

  libavcodec     61. 19.101 / 61. 19.101

  libavformat    61.  7.100 / 61.  7.100

  libavdevice    61.  3.100 / 61.  3.100

  libavfilter    10.  4.100 / 10.  4.100

  libswscale      8.  3.100 /  8.  3.100

  libswresample   5.  3.100 /  5.  3.100

  libpostproc    58.  3.100 / 58.  3.100

[mov,mp4,m4a,3gp,3g2,mj2 @ 0x14c810760] Auto-inserting h264_mp4toannexb bitstream filter

Input #0, concat, from 'filelist.txt':

  Duration: N/A, start: 0.000000, bitrate: 5611 kb/s

  Stream #0:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 50 kb/s

      Metadata:

        creation_time   : 2025-07-21T14:13:40.000000Z

        vendor_id       : [0][0][0][0]

  Stream #0:1(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080, 5560 kb/s, 30 fps, 30 tbr, 3k tbn

      Metadata:

        creation_time   : 2025-07-21T14:13:42.000000Z

        vendor_id       : [0][0][0][0]

        encoder         : JVT/AVC Coding

Stream mapping:

  Stream #0:1 -> #0:0 (copy)

  Stream #0:0 -> #0:1 (copy)

Output #0, mp4, to 'merged_output.mp4':

  Metadata:

    encoder         : Lavf61.7.100

  Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080, q=2-31, 5560 kb/s, 30 fps, 30 tbr, 12k tbn

      Metadata:

        creation_time   : 2025-07-21T14:13:42.000000Z

        vendor_id       : [0][0][0][0]

        encoder         : JVT/AVC Coding

  Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 50 kb/s

      Metadata:

        creation_time   : 2025-07-21T14:13:40.000000Z

        vendor_id       : [0][0][0][0]

Press [q] to stop, [?] for help

[mov,mp4,m4a,3gp,3g2,mj2 @ 0x14c810750] Auto-inserting h264_mp4toannexb bitstream filter

[out#0/mp4 @ 0x14b72b210] video:80715KiB audio:909KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: 0.154392%

frame= 3531 fps=0.0 q=-1.0 Lsize=   81750KiB time=00:01:57.63 bitrate=5693.1kbits/s speed= 694x    

pk desktop %


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?