フィルタでグレースケールを扱うには大まかに YUV の Y(輝度) を取り出す方法(フォーマットは YUV)と、グレーにフォーマット変換(フォーマットは GRAY)する方法の2通りがある。一般的に前者はリミテッドレンジになるので 16 から 235 の範囲に収まるが処理速度は速い。フルレンジの Y を取り出すにはformat=yuvj420pでフォーマット変換を行う。一方の後者はフォーマット変換を挟むので処理は遅いが 0 から 255 までのフルレンジを扱える。

extractplanesYUV の Y を取り出す(format=yuv)。
-vf extractplanes=y

hue(format=yuv) で彩度を 0 にする方法。
-vf hue=s=0

YUV の Y だけそのままに UV を 128 に変換するlutyuv(format=yuv)。
-vf lutyuv=val:128:128

グレーにフォーマット変換する。
-vf format=gray

グレースケール(format=gray)値を確認する。
-vf datascope

グレースケール(format=gray)で動画出力するにはエンコーダにffv1を使う。
ffmpeg -i input -vf format=gray -vcodec ffv1 output.mkv

RGB からグレースケールに変換する(BT.601)。
-vf colorchannelmixer=.299:.587:.114:0:.299:.587:.114:0:.299:.587:.114:0

RGB からグレースケールに変換する(BT.709)。
-vf colorchannelmixer=.2126:.7152:.0722:0:.2126:.7152:.0722:0:.2126:.7152:.0722:0

YUV の映像に RGB から係数(BT.709)を掛けたグレースケールのマスクをつける。
-vf format=yuva420p,split[1],format=rgba,colorchannelmixer=1:0:0:0:0:1:0:0:0:0:1:0:.2126:.7152:.0722:0,[1]lut2=x:x:x:y

関連記事

実装についてはこちらも参照
グレースケール画像のうんちく – Qiita

コメントを残す

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

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