前フレームのY差分をマスクしてフィルタを当てなくするモーションマスクの使い方。使うフィルタはtblendフィルタで前後フレームを1入力で取り込み、maskedmergeフィルタで1、2入力の割合を決めている。

連続フレームの差分をブレンドする tblend
マスクして2入力を合わせる maskedmerge

Y チャンネルをマスクする

前フレームと一定のY差分がある場所にYは[0v]のフィルタが当たり、なければ[1v]のフィルタが当たる。UVは[1v]のフィルタが当たる。[1v]は元映像を入力しているので適宜フィルタチェーンを変更する。
ffplay -i input -vf split=3[0v][1v][2v];[2v]tblend=c0_mode=grainextract,lutyuv='255*between(val\,119\,137)':255:255[2v];[0v]lutyuv=235:128:128[0v];[0v][1v][2v]maskedmerge=7

前フレームと一定のY差分がある場所以外にYは[0v]のフィルタが当たり、なければ[1v]のフィルタが当たる。UVは[1v]のフィルタが当たる。[1v]は元映像を入力しているので適宜フィルタチェーンを変更する。
ffplay -i input -vf split=3[0v][1v][2v];[2v]tblend=c0_mode=grainextract,lutyuv='255*if(between(val\,119\,137)\,0\,1)':255:255[2v];[0v]lutyuv=235:128:128[0v];[0v][1v][2v]maskedmerge=7

tblend フィルタの解説

前フレームと差が無ければ128を返し、プラスに差があれば128からプラスに、マイナスに差があれば128からマイナスを加算する。YUVのUVが 128 のときにYの値のグレースケールになり、今回マスクの値で 1,2入力の割合を決めるmaskedmergeフィルタを使って使い分けている。

Yチャンネルは119から137までを255でマスクし、UVチャンネルは 124 から132までを255でマスクしている。
ffplay -i input -vf tblend=all_mode=grainextract,lutyuv='255*between(val\,119\,137):255*between(val\,124\,132):255*between(val\,124\,123)'

betweenclipの使い方。
ffmpeg で使える評価式

コメントを残す

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

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