タグ別アーカイブ: alpha_channel

plane を入れ替え、コピーする shuffleplanes

plane(YUV や RGB の個別チャンネル)を入れ替えたり、コピーしたりできる shuffleplanes フィルタの使い方。

オプション

plane の順番は一般的には YUVA, RGBA の順番になっているが、このフィルタは RGB/A には対応していない。YUV420P の場合 Y と UV では解像度が違うので Y と UV を入れ替えるには YUV444P に変換する必要がある。

  • map0
    第1 plane の入出力を指定する。省略すると入力と同じ映像を返す
  • map1
    第2 plane の入出力を指定する。省略すると入力と同じ映像を返す
  • map2
    第3 plane の入出力を指定する。省略すると入力と同じ映像を返す
  • map3
    第4 plane の入出力を指定する。省略すると入力と同じ映像を返す

続きを読む plane を入れ替え、コピーする shuffleplanes

YUV RGB を比較計算する blend

2入力した映像の YUVA や RGBA を比較して結果を表示する blend の使い方。差分を調べて比較動画を作ったり、マスクした部分に別の映像を重ねたりいろいろな映像効果を作ることができる。

基本コマンド

比較動画として上に二つ並べて左下に差分(Y は 0 差分、UV は1入力)の動画を表示するコマンド例
ffplay -f lavfi "movie=left.mp4,setpts=PTS-STARTPTS,split[a1][a2];movie=right.mp4,setpts=PTS-STARTPTS,split[b1][b2];[a1][b1]blend=c0_mode=difference,pad=2*iw:ih:0:0[blend];[a2][b2]hstack[tmp];[tmp][blend]vstack"
比較動画として上に二つ並べて左下に差分(Y は 0 差分、UV は128)の動画を表示するコマンド例
ffplay -f lavfi "movie=left.mp4,setpts=PTS-STARTPTS,split[a1][a2];movie=right.mp4,setpts=PTS-STARTPTS,split[b1][b2];[a1][b1]blend=c0_mode=difference,lutyuv=val:128:128,pad=2*iw:ih:0:0[blend];[a2][b2]hstack[tmp];[tmp][blend]vstack"

公式ドキュメント:FFmpeg Filters Documentation : blend, tblend
続きを読む YUV RGB を比較計算する blend

マスクして2入力を合わせる maskedmerge

3入力目をマスクにして、1入力目の映像と2入力目の映像をマスクに合わせて出力する。マスクをどの程度指定するかで1入力目と2入力目の割合を指定できる。バージョンは3.0 以降から使える。アルファチャンネルを追加する alphamerge と負荷は変わらない。

別ファイルの情報から元映像を透過させる alphamerge

マスクの各チャンネル(YUVA, RGBA など)の値から1,2入力に対応したチャンネルがブレンド、またはスルーされる。0 ならば1入力目を、255(8bit)ならば2入力目を反映させる。既定値は1, 2入力がブレンドされる。アルファチャンネルは 0 が完全透過になる。出力フォーマットは1入力と同じになる。マスクをフルレンジに対応させるには1入力がフルレンジ(yuvj420p, gray など)に対応しておかなければならない。途中フルレンジで出力がリミテッドレンジならば最後に format=yuv420p をつけてレンジを直す。

マスクの指定には別ファイルを使う方法と、フィルタを当てて各コンポーネントを調整する方法とがある。各コンポーネントを調整には lut が使いやすい。別ファイルを使う場合にはモノクロ映像を使うことでその部分にだけフィルタを当てるのが手軽になる。

Windows の ffmpeg で生放送する方法 : LUT(ルックアップテーブル)

基本コマンド

ffmpeg -f lavfi -i color,format=rgba,split=3[0][1][2];[0]lutrgb=255:255:255:255[0a];[1]lutrgb=0:0:0:0[1a];[2]lutrgb=255:200:150:100[2a];[0a][1a][2a]maskedmerge=0x0 output

公式ドキュメント:FFmpeg Filters Documentation : maskedmerge
続きを読む マスクして2入力を合わせる maskedmerge

ffmpeg でクロマキー合成 その2

chromakey は出力フォーマットが YUVA になるので動画にクロマキー処理をした動画をオーバーレイするのに使う。バージョンは3.0 以降から使える。

RGBA で処理する colorkey はこちら:ffmpeg でクロマキー合成

基本コマンド

colorkey と基本的には同じ。
ffmpeg -i input1 -i input2 -filter_complex [1:0]chromakey=red:.03:.1[1a];[0:0][a1]overlay output
ffmpeg -i input1 -i input2 -filter_complex [1:0]chromakey=0xff0000:.03:.1[1a];[0:0][a1]overlay output

公式ドキュメント:FFmpeg Filters Documentation : chromakey
続きを読む ffmpeg でクロマキー合成 その2

各映像チャンネルを分離する extractplanes

チャンネルを分離して YUV で個別に出力できる。対応チャンネルは YUV, RGB, アルファ である。

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

YUV をそれぞれ出力する例
ffmpeg -i input -filter_complex "extractplanes=y+u+v[y][u][v]" -map [y] y.mp4 -map [u] u.mp4 -map [v] v.mp4

Y だけ出力する例
ffmpeg -i input -filter_complex "extractplanes=y" y.mp4

Y だけ出力するのなら lutyuv でもできる
ffmpeg -i input -filter_complex "lutyuv=val:128:128" y.mp4

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

分離したチャンネルを合わせたり入れ替えたり複製したり、フォーマットを変えたりできる。またアルファチャンネルのない映像に、他のチャンネルをアルファチャンネルに複製することもできる。チャンネルを入れ換えるだけなら lut2 でもでき、アルファチャンネルの追加なら alphamerge でもできる。
続きを読む 各映像チャンネルを結合する mergeplanes

明るいところ、暗いところにフィルタを当てる

明暗の度合いでもマスクできるのでこれを応用して一つの映像に複数のフィルタを使い分ける方法。特定色なら colorkey フィルタを使ってマスクすることもできる。一般的には映像をシャープにするほど容量は大きく、ぼかすほど容量は小さくなるので、シャープとぼかしを使い分けて高画質配信を目指す。

colorkey の使い方:ffmpeg でクロマキー合成

なぜぼかしも併用するかと言えばビットレートの節約になるのも正しいが、ニコ生のようなビットレート制限が厳しいところでは、低解像度で暗くて見えにくい部分にビットレートをたくさん割り当てる必要はないからである。
続きを読む 明るいところ、暗いところにフィルタを当てる

colorchannelmixer の使い方

RGBA からそれぞれの RGBA にミックスして色を変えるフィルタ colorchannelmixer フィルタの使い方。

基本コマンド

自らの 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
続きを読む colorchannelmixer の使い方

ffmpeg でクロマキー合成

ffmpeg に colorkey フィルタが取り込まれたことにより、クロマキー合成や特定色に個別のフィルタを当てられるようになった。

ffmpeg 2.7.1 以降か master を使っていれば colorkey フィルタが使える。
avfilter/vf_colorkey: Add colorkey video filter

colorkey は指定した色の部分をアルファチャンネルにして、それ以外を RGB の RGBA で出力する。指定する色は16進数の ffffff 形式か、色名を指定する。入力映像が RGB の方が YUV よりも処理が早い。

YUVA で処理する chromakey はこちら:ffmpeg でクロマキー合成 その2

16進数と色の説明:FFmpeg Utilities Documentation :: Color

続きを読む ffmpeg でクロマキー合成