YUVの映像の輝度だけでなく、彩度も見てグレースケールに変換する。ピクセルフォーマットはYUV形式のままなので、signalstats
フィルタのHSと併用することで色相と彩度と明るさそれぞれを1つのチャンネルで調べることができる。
基本コマンド
彩度のUVが同じ値のときの色は変わらない。
ffmpeg -i input -vf monochrome -c:a copy output
ffplay -i input -vf monochrome=cb=0:cr=0:size=1:high=0
彩度を考慮した輝度の値をログで出力する。
ffmpeg -i input -vf monochrome,signalstats,metadata=mode=print:key=lavfi.signalstats.YAVG:file=YAVG.txt -f null -
ffprobe -v error -f lavfi -i movie=input,monochrome,signalstats -select_streams v:0 -show_entries packet=pts_time -show_entries packet_tags=lavfi.signalstats.YAVG -of csv > YAVG.csv
ffprobe の使い方
YUV のデータを数値で表示する signalstats
ffprobeで別の映像に同じフィルタを当てると後のほうのフィルタ結果を参照するので、このときはffmpegでログを出力する。
ffmpeg -i input -vf split[1v],monochrome,signalstats,metadata=mode=print:key=lavfi.signalstats.YAVG:file=YAVG.txt,nullsink;[1v]signalstats,metadata=mode=print:key=lavfi.signalstats.HUEAVG:file=HUEAVG.txt,metadata=mode=print:key=lavfi.signalstats.SATAVG:file=SATAVG.txt -f null -
フィルタの効果を調べる例。上から順に下に並べる。
ffplay -f lavfi -i smptehdbars=s=1920x360[0v];smptehdbars=s=1920x360,monochrome[1v];smptehdbars=s=1920x360,monochrome=0:0.5[2v];[0v][1v][2v]vstack=3
手元の映像を4つ並べるとサイズが大きくなるので最近傍補間で1/2にする。左上から順に右上、左下、右下に並べる。
ffplay -i input -vf "split=4[0v][1v][2v][3v];[1v]monochrome[1v];[2v]monochrome=0.5[2v];[3v]monochrome=0:0.5[3v];[0v][1v][2v][3v]xstack=inputs=4:layout=0_0|w0_0|0_h0|w0_h0,scale=iw/2:-2:flags=neighbor"
それぞれの輝度の値を左上に表示する。
ffplay -i input -vf "split=4[0v][1v][2v][3v];[0v]signalstats,drawtext=x=w/32:y=h/32:fontfile=C\\://WINDOWS/Fonts/arial.ttf:fontsize=36:fontcolor=white:box=1:boxcolor=black@0.4:text='%{metadata\:lavfi.signalstats.YAVG}'[0v];[1v]monochrome,signalstats,drawtext=x=w/32:y=h/32:fontfile=C\\://WINDOWS/Fonts/arial.ttf:fontsize=36:fontcolor=white:box=1:boxcolor=black@0.4:text='%{metadata\:lavfi.signalstats.YAVG}'[1v];[2v]monochrome=0.5,signalstats,drawtext=x=w/32:y=h/32:fontfile=C\\://WINDOWS/Fonts/arial.ttf:fontsize=36:fontcolor=white:box=1:boxcolor=black@0.4:text='%{metadata\:lavfi.signalstats.YAVG}'[2v];[3v]monochrome=0:0.5,signalstats,drawtext=x=w/32:y=h/32:fontfile=C\\://WINDOWS/Fonts/arial.ttf:fontsize=36:fontcolor=white:box=1:boxcolor=black@0.4:text='%{metadata\:lavfi.signalstats.YAVG}'[3v];[0v][1v][2v][3v]xstack=inputs=4:layout=0_0|w0_0|0_h0|w0_h0,scale=iw/2:-2:flags=neighbor"
オプション
- cb[float]
青の色差成分をより強く反映する。負数も正数も絶対値が同じなら同じ結果になる
既定値:0
範囲:-1から1まで - cr[float]
赤の色差成分をより強く反映する。負数も正数も絶対値が同じなら同じ結果になる
既定値:0
範囲:-1から1まで - size[float]
大きな値は小さな変化を大きく差をつけようとする。逆に小さな値は小さな変化になるので、グラデーションがきれいになる
既定値:1
範囲:0.1から10まで - high[float]
明るい部分をより明るくする
既定値:0
範囲:0から1まで