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

ffmpeg で使える映像のテストソース

手元の映像を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"

解像度が一致しなくても映像を並べられる xstack

それぞれの輝度の値を左上に表示する。
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"

文字を描写する drawtext

オプション

  • cb[float]
    青の色差成分をより強く反映する。負数も正数も絶対値が同じなら同じ結果になる
    既定値:0
    範囲:-1から1まで
  • cr[float]
    赤の色差成分をより強く反映する。負数も正数も絶対値が同じなら同じ結果になる
    既定値:0
    範囲:-1から1まで
  • size[float]
    大きな値は小さな変化を大きく差をつけようとする。逆に小さな値は小さな変化になるので、グラデーションがきれいになる
    既定値:1
    範囲:0.1から10まで
  • high[float]
    明るい部分をより明るくする
    既定値:0
    範囲:0から1まで

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

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