この記事でわかること
- フィルタグラフ(filtergraph)の概念
- シンプルフィルタ(
-vf)と複合フィルタ(-filter_complex)の使い分け - フィルタチェーンの書き方(
,と;の違い) - ラベル(
[label])の使い方 - 複数入力・複数出力フィルタの実用例
テスト済みバージョン: FFmpeg 6.1
対象 OS: Windows / macOS / Linux
フィルタグラフとは
FFmpegのフィルタグラフは、フィルターノードを接続した有向グラフです。映像・音声フレームがノード間を流れ、各ノードで変換処理が行われます。
入力 → [scale] → [overlay] → 出力
↑
[logo入力]
シンプルな1入力1出力のフィルタは -vf(映像)または -af(音声)で指定します。複数入力・複数出力や並列チェーンが必要な場合は -filter_complex を使います。
シンプルフィルタ:-vf と -af
映像フィルタ(-vf)
ffmpeg -i input.mp4 -vf "scale=1280:720" output.mp4
ffmpeg -i input.mp4 -vf "scale=1280:720,fps=30" output.mp4
複数のフィルタを , でつなぐとフィルタチェーンになります。
音声フィルタ(-af)
ffmpeg -i input.mp4 -af "volume=2.0" output.mp4
フィルタチェーンの区切り文字
| 記号 | 意味 |
|---|---|
, | 同一チェーン内で次のフィルタへ(前フィルタの出力が次の入力) |
; | 別のフィルタチェーンを開始(並列チェーン) |
-filter_complex の基本
-filter_complex では ラベル([name])を使ってストリームを識別します。
スケールして特定の出力ラベルにバインド
ffmpeg -i input.mp4 -filter_complex "[0:v]scale=640:360[v]" -map "[v]" -map 0:a output.mp4
[0:v]:入力0の映像ストリームscale=640:360:フィルター[v]:出力ラベル(任意の名前)-map "[v]":ラベル付き出力を出力ファイルにマッピング
複数フィルタのチェーン
ffmpeg -i input.mp4 -filter_complex "[0:v]scale=1280:720,fps=30[v]" -map "[v]" -map 0:a -c:a copy output.mp4
ウォーターマーク(画像オーバーレイ)
2つの入力を使う overlay フィルタの例:
ffmpeg -i input.mp4 -i logo.png \
-filter_complex "[0:v][1:v]overlay=10:10[v]" \
-map "[v]" -map 0:a -c:a copy output.mp4
[0:v]:背景映像[1:v]:ロゴ画像overlay=10:10:左上から (10,10) の位置に重ねる
複数出力の作成(サムネイルと本編を同時生成)
ffmpeg -i input.mp4 \
-filter_complex "[0:v]scale=1280:720[main];[0:v]scale=320:180[thumb]" \
-map "[main]" -c:v libx264 -crf 23 main.mp4 \
-map "[thumb]" -c:v libx264 -crf 28 thumb.mp4
1つの入力から2つの出力ファイルを同時に生成します。
音声と映像を同時に処理する
映像をスケール+音声ボリューム調整を同時に行う例:
ffmpeg -i input.mp4 \
-filter_complex "[0:v]scale=1280:720[v];[0:a]volume=1.5[a]" \
-map "[v]" -map "[a]" -c:v libx264 -crf 23 output.mp4
amix で複数音声を合成する
BGM音声と主音声をミックスする:
ffmpeg -i main.mp4 -i bgm.mp3 \
-filter_complex "[0:a][1:a]amix=inputs=2:duration=first:dropout_transition=2[a]" \
-map 0:v -map "[a]" -c:v copy output.mp4
split でストリームを分岐させる
1つの映像ストリームを2つに分岐して別々に処理:
ffmpeg -i input.mp4 \
-filter_complex "[0:v]split[v1][v2];[v1]scale=1280:720[main];[v2]scale=320:180[preview]" \
-map "[main]" -c:v libx264 -crf 23 main.mp4 \
-map "[preview]" -c:v libx264 -crf 30 preview.mp4
よくあるエラーと対処法
Filtergraph 'xxx' was defined for video output stream 0:0 but additional output stream xxx of same type was not specified
-filter_complex を使う場合は必ず -map "[label]" で出力ラベルを指定してください。-vf と -filter_complex を混在させると競合します。
Invalid option -vf when using filter_complex
-filter_complex を使う場合は -vf と -af は使えません。すべてのフィルタ処理を -filter_complex に統合してください。
実測例
1080p/30fps、2分の動画から本編用720pとプレビュー用360pを同時生成する場合、split を使うと入力デコードを1回で済ませられます。
ffmpeg -i input.mp4 \
-filter_complex "[0:v]split=2[v1][v2];[v1]scale=1280:720[main];[v2]scale=640:360[preview]" \
-map "[main]" -c:v libx264 -crf 23 main.mp4 \
-map "[preview]" -c:v libx264 -crf 28 preview.mp4
同じ処理を2回のFFmpegコマンドに分けるより、ディスク読み込みとデコードの重複が減ります。ただし出力エンコードは2本分必要なので、処理時間が半分になるわけではありません。8コア程度のデスクトップ環境では、1本だけの720p出力より1.3〜1.8倍程度長くなることがあります。環境により変動します。
つまずきやすいポイント
-
症状:
,と;を取り違えてフィルタが繋がらない。 原因:,は同一チェーン内の直列接続、;は別チェーンの区切り。対処: 1本のストリームを順に処理するなら,、ラベルで分岐・合流させるなら;を使います。例:scale=...,fps=...は直列、[0:v]...[v];[0:a]...[a]は並列です。 -
症状:
Output with label 'x' does not existというエラー。 原因:-filter_complexで付けた出力ラベルを-mapし忘れている、または名前が一致していない。対処: グラフ末尾のラベル(例[v])を必ず-map "[v]"で参照します。ラベル名は大文字小文字も含め完全一致させます。 -
症状: 同じ入力ラベルを2回使うとエラーになる。 原因: 各ラベルは一度しか消費できない。対処: 同じストリームを複数回使うときは
split(映像)やasplit(音声)で複製してから別ラベルに分けます。本記事のsplitの例を参照してください。 -
症状:
-filter_complexと-vfを併用してエラー。 原因: 両者は排他で、混在できない。対処: すべてのフィルタ処理を-filter_complex側に統合します。
よくある質問
Q. -vf と -filter_complex はいつ使い分けますか。
A. 1入力1出力の単純な処理は -vf(または音声は -af)で十分です。複数入力(オーバーレイ、ミックス)、複数出力、分岐・合流が必要なら -filter_complex を使います。
Q. ラベル名に決まりはありますか。
A. [v]・[main] など任意の英数字名を付けられます。読みやすさのために役割が分かる名前([thumb] など)を推奨します。入力は [0:v]・[1:a] のように「入力番号:種別」で参照します。
Q. 1回のデコードで複数出力を作れますか。
A. はい。split でストリームを複製し、それぞれを別の -map で別ファイルに出力します。入力デコードは1回で済み、重複読み込みを避けられます。
Q. 音声と映像を同時に処理できますか。
A. できます。[0:v]...[v];[0:a]...[a] のように別チェーンで処理し、-map "[v]" -map "[a]" で両方を出力にマップします。
Q. フィルタの順序は結果に影響しますか。
A. します。例えば scale の前後で crop を入れるかで結果が変わります。直列チェーンは左から順に適用されるため、意図した順序で並べてください。
関連リソース
よく使うオプション・フィルタ・コーデック設定をまとめた PDF チートシートです。手元に置いておくと調べる時間を短縮できます。
関連記事
一次ソース: ffmpeg.org/ffmpeg-filters.html / trac.ffmpeg.org/wiki/FilteringGuide