ffmpeg 3.2 でリリース予定のビデオフィルタ。映像を3入力し、1入力を基本の映像として、1入力と比較して2入力は差分の値がプラスのときに、1入力と比較して3入力は差分の値がマイナスのときに、その差分だけ1入力と入れ換える maskedclamp フィルタの使い方。同じようなことが blend フィルタでもできるが、こちらは3入力できるところが特徴である。

基本コマンド

同じ映像を3入力しても出力映像は変わらない
ffmpeg -i input -vf split=3[0][1][2];[0][1][2]maskedclamp=undershoot=0:overshoot=0:planes=15 output
ffmpeg -i input -vf split=3[0][1][2];[0][1][2]maskedclamp=0:0:15 output
ffplay -i input -vf split=3[0][1][2];[0][1][2]maskedclamp=0:0:15

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

オプション

  • undershoot[int16]
    2入力のプラスされた差分を指定した値だけマイナスにする。マイナスにしても1入力の値は超えない
    既定値:0
  • overshoot[int16]
    3入力のマイナスされた差分を指定した値だけプラスにする。プラスにしても1入力の値は超えない
    既定値:0
  • planes[int]
    フィルタを当てるチャンネル指定
    詳しくは ffmpeg について | チャンネルの順番と注意点 を参照
    既定値:15(すべて)

挙動を調べる

color ソースはリミテッドレンジの YUV(16:128:128)なので効果がわかりやすいように format=yuvj420p でフルレンジ(0:128:128)に変換している。lutyuv の最初の引数が Y になるので(100:128:128)に識別子 1 は変換され maskedclamp の2入力になる。すると1入力と2入力を比較して Y が +100 なので出力は(100:128:128)になるが、maskedclamp の最初の引数が 5 なので -5 して(95:128:128)になる。
ffplay -f lavfi color -vf format=yuvj420p,split=3[0][1][2];[1]lutyuv=100[1a];[0][1a][2]maskedclamp=5:0:1,signalstats,drawtext=fontfile='C\://WINDOWS/Fonts/arial.ttf':textfile=signalstat_drawtext.txt:fontsize=20:borderw=1:bordercolor=white

今度は maskedclamp の3引数 planes=0 にしてどのチャンネルも影響を受けないようにすると出力結果は元のフルレンジ(0:128:128)のままである。
ffplay -f lavfi color -vf format=yuvj420p,split=3[0][1][2];[1]lutyuv=100[1a];[0][1a][2]maskedclamp=5:0:0,signalstats,drawtext=fontfile='C\://WINDOWS/Fonts/arial.ttf':textfile=signalstat_drawtext.txt:fontsize=20:borderw=1:bordercolor=white

コメントを残す

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

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