3入力目をマスクにして、1入力目の映像と2入力目の映像をマスクに合わせて出力する。マスクをどの程度指定するかで1入力目と2入力目の割合を指定できる。アルファチャンネルを追加するalphamergeフィルタと負荷は変わらない。

別ファイルの情報から元映像を透過させる alphamerge

マスクの各チャンネル(YUVA、RGBAなど)の値から1、2入力に対応したチャンネルがブレンド、またはスルーされ、スルーされるときは1入力目がそのまま出力される。3入力目の各チャンネルのピクセル値が0ならば1入力目を、255(8bit)ならば2入力目が出力させる。既定値は1、2入力がブレンドされる。アルファチャンネルは0が完全透過になる。

マスクの指定には別ファイルを使う方法と、フィルタを当てて各チャンネルを調整する方法とがある。各チャンネルを調整にはlutフィルタが使いやすい。別ファイルを使う場合にはモノクロ映像を使うことでその部分にだけフィルタを当てるのが手軽になる。

Windows の ffmpeg で生放送する方法 : LUT(ルックアップテーブル)

基本コマンド

ffmpeg -i input1 -i input2 -i input3 -filter_complex maskedmerge=15 -c:a copy output

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

オプション

  • planes[int]
    フィルタを当てるチャンネル指定。フィルタが当たらなければ1入力のチャンネルが出力される
    詳しくはffmpeg について | チャンネルの順番と注意点を参照
    既定値:15(すべてのチャンネル)
    範囲:0 から 15 まで

コマンド例

以下は全て YUV 動画を元とし、効果がわかりやすいようにノイズフィルタをかけている。マスク部分のlutyuvフィルタのUVは、(0:0)にするとYに応じてUVにフィルタを当てる。(255:255)にすると UVは2入力だけ反映させる。

暗いところだけノイズ

輝度65以下にnoiseフィルタを当てる。
ffplay -i input -vf split=3[0v][1v][2v];[0v]noise=alls=100:allf=t+u[0v];[2v]lutyuv=y='255*gt(val,65)':u=255:v=255[2v];[0v][1v][2v]maskedmerge

明るいところだけノイズ

輝度160以上にnoiseフィルタを当てる。
ffplay -i input -vf split=3[0v][1v][2v];[0v]noise=alls=100:allf=t+u[0v];[2v]lutyuv=y='255*lt(val,160)':u=255:v=255[2v];[0v][1v][2v]maskedmerge

特定の区間だけ

輝度119以上137以下にnoiseフィルタを当てる。
ffplay -i input -vf split=3[0v][1v][2v];[0v]noise=alls=100:allf=t+u[0v];[2v]lutyuv=y='255*if(between(val\,119\,137)\,0\,1)':u=255:v=255[2v];[0v][1v][2v]maskedmerge

公式ドキュメント:FFmpeg Filters Documentation : lut, lutrgb, lutyuv

その他の方法

以下方法が手軽に低負荷で出来るようになったが、今回の方法でもチャンネルを指定することで2つのフィルタを使いわけることができる。

コメントを残す

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

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)