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フィルタがある。

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

各映像チャンネルを結合する mergeplanes

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

コメントを残す

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

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