chromakey
フィルタは指定した色の部分が透過した YUVA で出力し透過した部分にオーバーレイして別の映像を映すのに使う。バージョンは3.0 以降から使える。
RGBA で処理するcolorkey
はこちら:ffmpeg でクロマキー合成
基本コマンド
colorkey
と基本的には同じ。
ffmpeg -i input1 -i input2 -filter_complex [1:v]chromakey=red:.03:.1[1v];[0:v][1v]overlay output
ffmpeg -i input1 -i input2 -filter_complex [1:v]chromakey=0xff0000:.03:.1[1v];[0:v][1v]overlay output
公式ドキュメント:FFmpeg Filters Documentation : chromakey
オプション内容
- color[color]
指定した色を透過させる。16進数形式か、色名を指定
既定値:”black” - similarity[float]
一致の範囲指定。0.01は完全一致、1は全画面。大きい値ほど透過範囲が広く濃くなる
既定値:0.01
範囲:0.01から1まで - blend[float]
似た色の透過の影響具合、0は指定した色だけで大きくするほど似た色も少しずつ透過する。つまり透過のグラデーションがきれいになる
既定値:0
範囲:0から1まで - yuv[boolean]
colorパラメーターを RGB の代わりに YUV を使う
既定値:0
範囲:0と1
透過具合を調べる
アルファチャンネルを調べるにはそのチャンネルの暗さ具合を調べることで透過具合を調べられる。アルファチャンネルだけを調べるには2つの方法があり、extractplanes=a
とalphaextract
がある。どちらもアルファチャンネルをグレースケールで出力する。このとき白(255.255.255)が透過しない部分になる。暗さを調べるには YUV の Y の最小値をsignalstats,metadata
で調べる。
ffmpeg -f lavfi -i smptebars=d=1 -vf chromakey=0x0000af:.01:.1,alphaextract,signalstats,metadata=print:key=lavfi.signalstats.YMIN -vframes 1 test.png
各映像チャンネルを分離する extractplanes
YUV のデータを数値で表示する signalstats
メタデータをコンソールに表示する metadata, ametadata
YUVA の動画で出力する
YUVA 対応のコーデックは多くないが ffv1 が対応している。ただし一般的に動画編集ツールで正しく読める保証はないので rgba に変換した方無難。この場合はcolorkey
フィルタで RGB 処理した方が透過設定がしやすいかも。
こちらが YUVA 出力
ffmpeg -i input1 -vf chromakey=red:.03:.1 -vcodec ffv1 output.mkv
こちらが RGBA 出力
ffmpeg -i input1 -vf colorkey=red:.03:.1 -vcodec utvideo output.mkv