この記事でわかること
- フィルタグラフ(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 に統合してください。
関連記事
一次ソース: ffmpeg.org/ffmpeg-filters.html / trac.ffmpeg.org/wiki/FilteringGuide