Quantcast
Channel: FFmpeg | ニコラボ
Viewing all articles
Browse latest Browse all 310

マスクして2入力を合わせる maskedmerge

$
0
0

使うにはまだリリースされていない 2.8.2(予定)か、最新git から使える。

3入力目をマスクにして、1入力目の映像と、2入力目の映像をマスクに合わせて出力する。マスクをどの程度指定するかで1入力目と2入力目の割合を指定できる。マスクの割合は各コンポーネント(YUVA, RGBA)の平均から1,2入力をどの程度合わせるかで指定する。0 ならば1入力目を、255(8bit)ならば2入力目を反映させる

マスクの指定には別ファイルを使う方法と、フィルタを当てて各コンポーネントを調整する方法とがある。各コンポーネントを調整には lut が使いやすい。

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

別ファイルを使う場合にはモノクロ映像を使うことでその部分にだけフィルタを当てるのが手軽になる。

以下方法が手軽に低負荷で出来るようになったが、今回の方法は完全に2つのフィルタを使い分けるわけではない。
ニコ生で高画質配信する複合フィルタの例

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

関連記事
YUV、彩度、色相 を見える化する signalstats

オプションにはマスクに使うコンポーネントを指定できるが、1 から f までどれを使っているのかよくわからない。規定値は 0xf で全てのコンポーネントを対象とする。

続きを読む

コマンド例

以下は全て YUV 動画を元とし、効果がわかりやすいようにノイズフィルタをかけている。

暗いところだけノイズ

輝度60以下にノイズ、60より大きいのを255にしてマスクしている
ffplay -i input -vf split=3[0][1][2];[0]noise=alls=100:allf=t+u[0a];[2]lutyuv=y="if(val\, if(gt(val\,60)\,255\)\,0)":u=255:v=255[2a];[0a][1][2a]maskedmerge

明るいところだけノイズ

輝度180以上にノイズ、180より小さいのを255にしてマスクしている
ffplay -i input -vf split=3[0][1][2];[0]noise=alls=100:allf=t+u[0a];[2]lutyuv=y="if(val\, if(lt(val\,180)\,255\)\,0)":u=255:v=255[2a];[0a][1][2a]maskedmerge

全体にノイズをかけて、暗いところだけぼかす

上2つのフィルタの応用
ffplay -i input -vf split=3[0][1][2];[0]smartblur[0a];[1]noise=alls=100:allf=t+u[1a];[2]lutyuv=y="if(val\, if(gt(val\,60)\,255\)\,0)":u=255:v=255[2a];[0a][1a][2a]maskedmerge

全体をくっきりさせて、暗いところだけぼかす

配信向きのフィルタ
ffplay -i input -vf split=3[0][1][2];[0]smartblur[0a];[1]unsharp[1a];[2]lutyuv=y="if(val\, if(gt(val\,60)\,255\)\,0)":u=255:v=255[2a];[0a][1a][2a]maskedmerge


Viewing all articles
Browse latest Browse all 310

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>