ffmpeg 3.2でリリースしたビデオフィルタ。映像のYUVやRGBを別の映像と入れ換えるときに今まではextractplanes
フィルタで対象チャンネルを取り出して、mergeplanes
フィルタで合わせていたのがlut2
フィルタだけで入れ換えるられる。ただし複数入力するビデオフィルタでは同じ解像度とSARでないとエラーが出る。1入力目がYUVAで2入力目がRGBAの場合、YUVAにRGBAのAと入れ換えることもできる。
ffmpeg 3.4でリリースした同じオプションでtlut2
フィルタも追加された。こちらは1入力1出力になり、前後フレームのLUTを入れ換える。いわゆるtblend
フィルタのLUT版になる。また1入力で各チャンネルを入れ換えるにはshuffleplanes
や、swapuv
フィルタがある。
- 連続フレームの差分をブレンドする tblend
- 各映像チャンネルを結合する mergeplanes
- 各映像チャンネルを分離する extractplanes
- plane を入れ替え、コピーする shuffleplanes
lut2、tlut2
基本コマンド
1入力の Y(または R)をそのままに、1入力の UV(またはGB)を2入力の UV(またはGB)と入れ換える。
ffmpeg -i input1 -i input2 -filter_complex lut2=c0=x:c1=y:c2=y output
ffmpeg -i input1 -i input2 -filter_complex lut2=x:y:y output
ffmpeg -i input1 -i input2 -filter_complex lut2=x:y:y,realtime -f sdl -
公式ドキュメント:FFmpeg Filters Documentation : lut2, tlut2
オプション
lut2、tlut2
フィルタどちらもオプション内容は同じ。
- チャンネル指定
- c0[string]
1番目のチャンネル。一般的には Y または R
既定値:x(1入力目) - c1[string]
2番目のチャンネル。一般的には U または G
既定値:x - c2[string]
3番目のチャンネル。一般的には V または B
既定値:x - c3[string]
4番目のチャンネル。一般的には A
既定値:x
- c0 から c3 に対応した評価式
- w, h
1入力した映像の横幅、または縦幅 - x
1入力した映像の LUT の値 - y
2入力した映像の LUT の値 - bdx
1入力した映像のビット深度の値 - bdy
2入力した映像のビット深度の値
評価式に対応しているのでx, yの組み合わせでblend
フィルタと同じことができ、負荷は変わらない。lut2
フィルタのメリットはblend
フィルタと比べて書式が読みやすい。
YUV 映像を入力したときに同じ効果。
ffmpeg -i input1 -i input2 -filter_complex lut2=c0=x:c1='min(255,x+y)':c2=x output
ffmpeg -i input1 -i input2 -filter_complex blend=c1_mode=addition output
ffmpeg -i input1 -i input2 -filter_complex blend=c1_expr='min(255,A+B)' output
ffmpeg -i input1 -i input2 -filter_complex lut2=c0=x:c1='min(255,x+y)':c2=x,realtime -f sdl -
swapuv
YUVのUとVを入れ替える。オプション指定はない。
基本コマンド
ffmpeg -i input -vf swapuv -c:a copy output
ffplay -i input -vf swapuv
同じことをmergeplanes
フィルタでもできる。
ffmpeg -i input -vf mergeplanes=0x000201:yuv420p -c:a copy output
ffplay -i input -vf mergeplanes=0x000201:yuv420p