月別アーカイブ: 2016年7月

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

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

extractplanes YUV の 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

個別チャンネルの値を映像の場所毎に確認できる datascope

関連記事
各映像チャンネルを分離する extractplanes
Windows の ffmpeg で生放送する方法 : lutyuv

アルファチャンネルをグレースケールで出力する alphaextract

映像にアルファチャンネルがあるときに alphaextract を使えばグレースケールで取り出すことができる。同時にフォーマットもグレースケール YUV に変換される。同じ効果のフィルタに extractplanes=a があり、これもグレースケールで出力する。透過部分の値は小さく、透過しない部分の値は大きくなる。

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

基本コマンド

0000bf(青)の透過した部分を黒で、透過しない部分を白の alphaextract.png で出力する。設定するオプションはない。
ffmpeg -f lavfi -i smptebars=d=1 -vf colorkey=0x0000bf:.01:.1,alphaextract -vframes 1 alphaextract.png

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

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

alphamerge は2番目の入力のグレースケール(グレースケールでなければ変換される)の白黒具合に応じて1番目の入力に透過情報を加える。透過具合については黒が透過し、白に近いほど透過しなくなり、出力は YUVA または ARGB, RGBA になる。アルファチャンネルを含む映像になるのでそれに対応したコーデックで出力しないとアルファチャンネルが消えてしまうのに注意。YUVA なら ffv1。RGBA なら utvideo または ffv1 で出力する。同じ機能のフィルタに mergeplanes があるがこちらの方が負荷が少し軽く、アルファチャンネルを追加する maskedmerge と負荷は変わらない。

各映像チャンネルを結合する mergeplanes
マスクして2入力を合わせる maskedmerge

基本コマンド

YUVA 出力の場合は ffv1
ffmpeg -i yuv -i gray -filter_complex alphamerge -vcodec ffv1 output.mkv
RGBA 出力の場合は utvideo または ffv1
ffmpeg -i rgb -i gray -filter_complex alphamerge -vcodec utvideo output.mkv
mergeplanes を使う例
ffmpeg -i yuv -i gray -filter_complex mergeplanes=0x00010210:yuva420p -vcodec ffv1 output.mkv

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

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

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

オプション

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

  • map0[int]
    第1 plane の入出力を指定する。省略すると入力と同じ映像を返す
    既定値:0
    範囲:0 から 4 まで
  • map1[int]
    第2 plane の入出力を指定する。省略すると入力と同じ映像を返す
    既定値:1
    範囲:0 から 4 まで
  • map2[int]
    第3 plane の入出力を指定する。省略すると入力と同じ映像を返す
    既定値:2
    範囲:0 から 4 まで
  • map3[int]
    第4 plane の入出力を指定する。省略すると入力と同じ映像を返す
    既定値:3
    範囲:0 から 4 まで

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