この記事でわかること
chromakeyフィルタでクロマキー合成を行うコマンド- キーカラー・類似度(
similarity)・ブレンド(blend)のチューニング - 背景動画や静止画との合成方法
colorkeyフィルタとの違い
動作確認: FFmpeg 8.1 / Windows — 本記事のコマンド 7 件を検証スクリプトで実行し、全て成功しました(2026-09-06) 対象 OS: Windows / macOS / Linux
クロマキー合成の仕組み
chromakey は映像の特定の色(通常は緑または青)を透明(アルファ)に変換するフィルタです。透明になった部分に別の背景映像を重ねることで合成映像を作成します。合成後に被写体と背景の色味を合わせたいときは、curves フィルタによるトーンカーブ色補正で馴染ませると自然に仕上がります。
基本コマンド
グリーンバックをキーイングしてアルファ付き映像を生成する
ffmpeg -i input.mp4 \
-vf "chromakey=0x00FF00:0.1:0.2" \
-c:v png output.mov
引数の順序は color:similarity:blend です。
0x00FF00— グリーンのキーカラー(HEX)0.1— 類似度(0〜1、大きいほど広い範囲をキーイング)0.2— ブレンド(0〜1、エッジを滑らかにする)
背景静止画と合成する
ffmpeg -i background.jpg -i input.mp4 \
-filter_complex "[1:v]chromakey=0x00FF00:0.1:0.2[fg]; [0:v][fg]overlay" \
output.mp4
[1:v]chromakey=...でフォアグラウンド映像をキーイング[0:v][fg]overlayで背景と合成
背景動画と合成する
ffmpeg -i background.mp4 -i greenscreen.mp4 \
-filter_complex "[1:v]chromakey=0x00FF00:0.15:0.1[fg]; [0:v][fg]overlay" \
output.mp4
パラメータ詳細
| パラメータ | 説明 | 推奨値 |
|---|---|---|
color |
キーカラー(色名またはHEX) | 0x00FF00 / green |
similarity |
キーカラーの類似度しきい値(0〜1) | 0.08〜0.2 |
blend |
エッジのブレンド量(0〜1) | 0.0〜0.3 |
similarity の目安
| 値 | 効果 |
|---|---|
0.01〜0.05 |
厳密(完全に緑の部分のみ除去) |
0.1〜0.2 |
標準(多少の色ムラに対応) |
0.3〜 |
広め(不均一な照明に対応、ただし被写体も除去される可能性) |
ブルーバック合成
ffmpeg -i background.jpg -i bluescreen.mp4 \
-filter_complex "[1:v]chromakey=0x0000FF:0.15:0.1[fg]; [0:v][fg]overlay" \
output.mp4
color を 0x0000FF(青)に変更するだけでブルーバックにも対応できます。背景側をやわらかく見せたいときは、合成前にboxblur フィルタでボックスブラーをかける処理を背景映像に挟むと被写体が引き立ちます。
任意の色をキーカラーにする
映像内の特定の色をキーにしたい場合、ffprobe などで RGB 値を確認してから指定します。
ffmpeg -i background.jpg -i custom_screen.mp4 \
-filter_complex "[1:v]chromakey=0x00B400:0.12:0.15[fg]; [0:v][fg]overlay" \
output.mp4
colorkey フィルタとの違い
chromakey と colorkey は似ていますが動作する色空間が異なります。
| フィルタ | 色空間 | 特徴 |
|---|---|---|
chromakey |
YCbCr(YUV) | 映像標準に適合、実写に適する |
colorkey |
RGB | シンプル、CGやアニメに適する |
実写映像のグリーンバック合成には chromakey(YUV)を使うことが推奨されます。
アルファチャンネルが必要なコンテナ
キーイングした映像をアルファ付きで保存する場合、対応したコーデック・コンテナを使います。
# ProRes 4444 (MOV) でアルファ付き保存
ffmpeg -i greenscreen.mp4 \
-vf "chromakey=0x00FF00:0.1:0.2" \
-c:v prores_ks -profile:v 4 output.mov
# WebM (VP9) でアルファ付き保存
ffmpeg -i greenscreen.mp4 \
-vf "chromakey=0x00FF00:0.1:0.2" \
-c:v libvpx-vp9 -auto-alt-ref 0 output.webm
注意点
chromakeyは libavfilter に含まれており、追加ライブラリは不要です。- 均一な照明で撮影されたグリーンバックほどキーイング品質が上がります。
similarityが大きすぎると被写体の緑色部分(服・目など)も除去されます。blendを大きくするとエッジが半透明になりますが、フリンジが残りやすくなります。
実測: 処理時間とサイズ
計測したのは次のコマンドです。
ffmpeg -i background.jpg -i greenscreen.mp4 -filter_complex "[1:v]chromakey=0x00FF00:0.12:0.08[fg];[0:v][fg]overlay" -c:v libx264 -crf 23 -preset medium -shortest output.mp4
| 項目 | 実測値 |
|---|---|
| 処理時間 | 35.7 秒(実時間の 3.36 倍速) |
| 出力サイズ | 10.72 MB |
計測環境: Intel Core i9-14900KF(32スレッド)、FFmpeg 8.1(gyan.dev)、1080p/30fps・2分の素材、2026-09-05、各コマンドは逐次実行。同じ計測の全データはデータセットで公開しています。
なぜこの数字になるのか
この記事は以前「処理時間は実時間の1.5〜3倍程度」と書いていました。実測はその逆で、2分の素材が 35.7 秒、実時間の 3.36 倍速で終わっています。旧記述は撤回します。
かかっている時間のほとんどはキーイングではなくエンコードです。chromakey も overlay もデコード済みのピクセルを触るフィルタなので、この処理では -c copy が原理的に使えず、全フレームをデコードして x264 で再エンコードする必要があります。同じ環境・同じ素材でフィルタを一切かけずに再エンコードだけした基準値が 27.97 秒。合成を足しても 35.7 秒ですから、chromakey + overlay が上乗せしているコストは小さい部類です。参考までに、同じ計測では boxblur が 59.37 秒、colorbalance + eq の色補正が 53.26 秒かかっています。
対して、再エンコードが要るか要らないかの差は桁違いです。同じ計測でストリームコピー系は、-map 0 -c copy が 0.41 秒、-movflags +faststart が 0.49 秒、映像 copy のまま音声だけフェードして 1.03 秒。合成が「重い」のはフィルタが凶悪だからではなく、再エンコード側に落ちる処理だからです。プレビュー用に短く切ってから試す価値があるのはこのためです。
出力の 10.72 MB は真似しないでください。計測に使ったグリーンバック素材は合成生成のフラットな映像で、ノイズも粒状感もなく、x264 にとっては極端に圧縮しやすいものです。この 10.72 MB は素材の性質を表しているだけで、chromakey の圧縮効果ではありません。実写のグリーンバックを撮って同じコマンドを通せば、出力はこれよりずっと大きくなります。サイズは素材の情報量でほぼ決まる、と考えてください。
関連フィルタ
よくある質問
chromakey, colorkey, lumakey の違いは?
chromakey は彩度(色相 + 彩度)でキー(グリーン / ブルーバック向き)。colorkey は RGB 距離でキー(シンプルだが粗い)。lumakey は輝度でキー(白背景に有用)。
色と類似度の選び方は?
まず 1 フレームのカラーピッカーで正確な緑を取得。similarity 0.10、blend 0.05 から始めて、エッジが消えるまで similarity を上げる。
人物の周りに緑のヘイロー(霞)が残る
グリーンバックの色が肌や髪に映り込んだ「スピル」。despill を後段に追加するか、chromakey の後に該当色相だけ彩度を下げてください。
影もキーアウトできる?
直接は無理。chromakey は輝度を無視するため。影もキーアウトしたければ、低い閾値の lumakey を併用してください。
既に圧縮された素材でも chromakey は効く?
効きますがアーティファクトが増えます。圧縮による彩度ダウンサンプリング(4:2:0)でエッジ細部が失われるため、similarity を広めに取ってヘイローは妥協してください。