ffmpeg でクロマキー合成 その2


chromakey は出力フォーマットが YUVA になるので動画にクロマキー処理をした動画をオーバーレイするのに使う。バージョンは3.0 以降から使える。

RGBA で処理する colorkey はこちら:ffmpeg でクロマキー合成

基本コマンド

colorkey と基本的には同じ。
ffmpeg -i input1 -i input2 -filter_complex [1:0]chromakey=red:.03:.1[1a];[0:0][a1]overlay output
ffmpeg -i input1 -i input2 -filter_complex [1:0]chromakey=0xff0000:.03:.1[1a];[0:0][a1]overlay output

公式ドキュメント:FFmpeg Filters Documentation : chromakey

オプション内容

  • color[color]
    指定した色を透過させる。16進数形式か、色名を指定
    既定値:black
  • similarity[float]
    一致の範囲指定。0.01 は完全一致、1は全画面。大きい値ほど透過範囲が広く濃くなる。
    範囲:0.01 から 1 まで
    既定値:0.01
  • blend[float]
    似た色の透過の影響具合、0 は指定した色だけで大きくするほど似た色も少しずつ透過する。つまり透過のグラデーションがきれいになる
    範囲:0 から 1 まで
    既定値:0
  • yuv[boolean]
    color パラメーターを RGB の代わりに YUV を使う
    範囲:0 と1
    既定値:0

透過具合を調べる

アルファチャンネルを調べるにはそのチャンネルの暗さ具合を調べることで透過具合を調べられる。アルファチャンネルだけを調べるには2つの方法があり、extractplanes=aalphaextract がある。どちらもアルファチャンネルをグレースケールで出力する。このとき白(0.0.0)が透過しない部分になる。暗さを調べるには 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

更新履歴

YUVA の動画で出力するの項目を追加した。(2016年7月7日)

コメントを残す

メールアドレスが公開されることはありません。