明るいところ、暗いところにフィルタを当てる


明暗の度合いでもマスクできるのでこれを応用して一つの映像に複数のフィルタを使い分ける方法。特定色なら colorkey フィルタを使ってマスクすることもできる。一般的には映像をシャープにするほど容量は大きく、ぼかすほど容量は小さくなるので、シャープとぼかしを使い分けて高画質配信を目指す。

colorkey の使い方:ffmpeg でクロマキー合成

なぜぼかしも併用するかと言えばビットレートの節約になるのも正しいが、ニコ生のようなビットレート制限が厳しいところでは、低解像度で暗くて見えにくい部分にビットレートをたくさん割り当てる必要はないからである。

明るい部分にフィルタを当てる

輝度160 以上にフィルタを当てる。効果がわかりやすいように lutyuv フィルタで白くしている。原理は 160 から 255 までを 1 にするが、if で 0, 1 を反転して *255 している。結果として 160 から 255 までは 0、159 以下は 255 になり [1] のフィルタが当たらない。暗い部分にフィルタを当てる場合は [0] の最後に追加する。
ffplay -i input -vf split[0][1];[0]format=yuva420p,shuffleplanes=0:1:2:0,lutyuv=val:val:val:if(between(val\,160\,255)\,0\,1)*255[0a];[1]lutyuv=255:128:128[1a];[1a][0a]overlay

暗い部分にフィルタを当てる

輝度65 以下にフィルタを当てる。効果がわかりやすいように lutyuv フィルタで白くしている。原理は 66 から 255 までマスクして [1] のフィルタが当たらない。明るい部分にフィルタを当てる場合は [0] の最後に追加する。
ffplay -i input -vf split[0][1];[0]format=yuva420p,shuffleplanes=0:1:2:0,lutyuv=val:val:val:between(val\,66\,255)*255[0a];[1]lutyuv=255:128:128[1a];[1a][0a]overlay

フィルタの聞き具合を調べるグレースケール画像サンプル


「grayscale」で画像検索すればたくさん画像が見つかる。

条件に使える書式:ffmpeg で使える計算書式
公式ドキュメント:FFmpeg Utilities Documentation :: Expression Evaluation

関連フィルタ

追記
わかりやすいように書き直した。2016年10月9日
shuffleplanes を使う方法に書き換えた。2016年10月15日

コメントを残す

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