ffmpeg 4.3 から使える予定のフィルタ。3つの映像から1入力目と比較し絶対値の大きい、小さいほうのピクセル値を返すmaskedmax、maskedmin
フィルタの使い方。
基本コマンド
効果がわかりやすいようにlutyuv
フィルタでピクセル値を変更している。以下の例でオリジナルのYUVのピクセル値が+5、+10、-10になる。プラスとマイナスで同じ絶対値になったときはピクセル値の大きい方を返す。便宜上入力ファイル名を変えているが同じファイルとする。
ffmpeg -i input1 -i input2 -i input3 -filter_complex [1:v]lutyuv=val+5:val+10:val-5[1v];[2:v]lutyuv=val-5:val+5:val-10[2v];[0:v][1v][2v]maskedmax -c:a copy output
一度しかファイルを入力しないのなら。
ffmpeg -i input -filter_complex split=3[1][2][3];[1]lutyuv=val+5:val+10:val-5[1v];[2]lutyuv=val-5:val+5:val-10[2v];[3][1v][2v]maskedmax -c:a copy output
以下の例でオリジナルのYUVのピクセル値が+5、+5、-5になる。
ffmpeg -i input1 -i input2 -i input3 -filter_complex [1:v]lutyuv=val+5:val+10:val-5[1v];[2:v]lutyuv=val-5:val+5:val-10[2v];[0:v][1v][2v]maskedmin -c:a copy output
コンソール上でピクセル値を調べる例。ピクセルフォーマットはGBRPなので、順番にGreen、Blue、Redの順番になる。mean:[110 110 90]と表示され、RGBでは(90:110:110)になる。
ffmpeg -f lavfi -i color=s=4x4:d=1,lutrgb=100:100:100 -f lavfi -i color=s=4x4:d=1,lutrgb=90:95:110 -f lavfi -i color=s=4x4:d=1,lutrgb=105:110:90 -filter_complex maskedmax,showinfo -vframes 1 -f null -
フレーム、サンプル単位で情報を得るshowinfo、ashowinfo
公式ドキュメント:
FFmpeg Filters Documentation : maskedmax
FFmpeg Filters Documentation : maskedmin
オプション
planes
フィルタを当てるチャンネル指定。フィルタが当たらなければ1入力目がそのまま出力される。詳しくは ffmpeg について | チャンネルの順番と注意点を参照。
既定値:15(すべてのチャンネル)