RGBA からそれぞれのRGBAにミックスして色を変えるフィルタcolorchannelmixerフィルタの使い方。RGB24で入力した場合の出力フォーマットはRGB24になる。YUV のままに RGB の色味を強くしたり弱くしたりしたい場合はeqフィルタのgamma_r, gamma_g, gamma_bを調整する。

Windows の ffmpeg で生放送する方法 : eq(明暗調整)

基本コマンド

自らのRGBAだけ1にしているので色は変わらない。
ffmpeg -i input -vf colorchannelmixer=1:0:0:0:0:1:0:0:0:0:1:0:0:0:0:1 output

自らの値(rr, gg, bb, aa)だけ既定値は1でそれ以外は0
指定できる範囲は -2 から 2 の float

引数は r, g, b, a にそれぞれの r, g, b, a を掛けて 4×4 の 16 通りある。引数の順番は以下の通りで、頭文字のアルファベットが出力チャンネルになる。

rr, rg, rb, ra, gr, gg, gb, ga, br, bg, bb, ba, ar, ag, ab, aa

RGB の計算式は R を例にすると

red=red*rr + blue*rb + green*rg + alpha*ra

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

簡単な例

上の計算式だけでわかればそれだけなのだが、簡単な例を示すと、RGBA(100,100,100,0)に rr=0.5, rg=0.5, rb=0.5, ra=0 とすると R の値は 0.5(100+100+100)=150 で GB は 100、A は 0 のままである。

ffmpeg -f lavfi -i color=0x646464 -vf colorchannelmixer=.5:.5:.5 -vframes 1 output.png

コマンド例

RGBそれぞれを抽出する。
ffmpeg -f lavfi -i testsrc -vf colorchannelmixer=1:0:0:0:0:0:0:0:0:0:0:0 -vframes 1 R_only.png
ffmpeg -f lavfi -i testsrc -vf colorchannelmixer=0:0:0:0:0:1:0:0:0:0:0:0 -vframes 1 G_only.png
ffmpeg -f lavfi -i testsrc -vf colorchannelmixer=0:0:0:0:0:0:0:0:0:0:1:0 -vframes 1 B_only.png

lutrgbフィルタでもRGBを個別に出力できる。
ffmpeg -f lavfi -i testsrc -vf lutrgb=g=0:b=0 -vframes 1 R_only.png
ffmpeg -f lavfi -i testsrc -vf lutrgb=r=0:b=0 -vframes 1 G_only.png
ffmpeg -f lavfi -i testsrc -vf lutrgb=r=0:g=0 -vframes 1 B_only.png

RGBからグレースケールに変換する(BT.601)。
ffmpeg -f lavfi -i testsrc -vf colorchannelmixer=.299:.587:.114:0:.299:.587:.114:0:.299:.587:.114:0 -vframes 1 gray-601.png
ffplay -f lavfi -i testsrc -vf colorchannelmixer=.299:.587:.114:0:.299:.587:.114:0:.299:.587:.114:0

アルファチャンネルにグレー出力。
ffmpeg -f lavfi -i testsrc -vf format=bgra,colorchannelmixer=1:0:0:0:0:1:0:0:0:0:1:0:.3:.59:.11:0 -vframes 1 gray.png
ffplay -f lavfi -i testsrc -vf format=bgra,colorchannelmixer=1:0:0:0:0:1:0:0:0:0:1:0:.3:.59:.11:0

アルファチャンネルはalphaextractフィルタで確認できる。
ffmpeg -f lavfi -i testsrc -vf format=bgra,colorchannelmixer=1:0:0:0:0:1:0:0:0:0:1:0:.3:.59:.11:0,alphaextract -vframes 1 gray-alphaextract.png
ffplay -f lavfi -i testsrc -vf format=bgra,colorchannelmixer=1:0:0:0:0:1:0:0:0:0:1:0:.3:.59:.11:0,alphaextract

RGBからグレースケールに変換する(BT.709)。
ffmpeg -f lavfi -i testsrc -vf colorchannelmixer=.2126:.7152:.0722:0:.2126:.7152:.0722:0:.2126:.7152:.0722:0 -vframes 1 gray-709.png
ffplay -f lavfi -i testsrc -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

ffmpeg でグレースケールを扱う

セピア調で出力。
ffmpeg -f lavfi -i testsrc -vf colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131:0 -vframes 1 sepia.png
ffplay -f lavfi -i testsrc -vf colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131:0

コメントを残す

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

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