黒フレーム区間を調べるblackdetectフィルタの使い方。輝度の値からどれだけ黒いかの設定があるのでシーンチェンジを調べるのに使える。
強力な2次元デノイザ sab
輝度と彩度の変化を元に範囲を指定してぼかすsab(Shape Adaptive Blur)フィルタの使い方。
基本コマンド
ffmpeg -i input -vf sab=1.0:1.0:1.0:-0.9:-0.9:-0.9 output
ffplay -i input -vf sab=1.0:1.0:1.0:-0.9:-0.9:-0.9
公式ドキュメント:FFmpeg Filters Documentation : sab
映像の黒枠の座標を検出する bbox
映像フレームの輝度チャンネルから黒枠を検出して黒枠以外の座標をコンソール上に表示する。cropとdrawboxのコマンドも表示する。
基本コマンド
ffplay input -vf bbox=16
出力例
n:0 pts:0 pts_time:0 x1:0 x2:1279 y1:78 y2:641 w:1280 h:564 crop=1280:564:0:78 drawbox=0:78:1280:564
公式ドキュメント:FFmpeg Filters Documentation : bbox
オプション
min_val[int]
黒枠ではないと検出する輝度チャンネルの最小の値
引数が一つしか無いのでそのまま数値指定してもよい
既定値:16
範囲:0 から 254 まで
手軽にモーションブラー atadenoise
各チャンネルの変化具合と平均化するフレーム数の指定により簡易のモーションブラーを当てることができるatadenoise(Adaptive Temporal Averaging Denoiser )フィルタの使い方。設定値を 0 にしてもすべてのチャンネルに影響を与えるので色味の変化が大きいと軽くフィルタを当てても変化が大きい。フレーム間で平均化するので3次元デノイズとも言える。タイムライン編集に対応。
基本コマンド
ffmpeg -i input -vf atadenoise=0a=.02:0b=.04:1a=.02:1b=.04:2a=.02:2b=.04:s=33:p=7 output
ffmpeg -i input -vf atadenoise=.02:.04:.02:.04:.02:.04:33:7 output
ffplay -i input -vf atadenoise=.02:.04:.02:.04:.02:.04:33:7
ffmpeg でエッジマスク
ffmpeg でエッジ検出するフィルタにedgedetectとconvolution、sobel, prewittなどがある。これらのフィルタを使ってエッジ領域を拡大しグレースケールのマスクとすることでエッジ部分に特定のフィルタを当てないようにすることができる。
ffmpeg でグレースケールを扱う
フィルタでグレースケールを扱うには大まかに YUV の Y(輝度) を取り出す方法(フォーマットは YUV)と、グレーにフォーマット変換(フォーマットは GRAY)する方法の2通りがある。一般的に前者はリミテッドレンジになるので 16 から 235 の範囲に収まるが処理速度は速い。フルレンジの Y を取り出すにはformat=yuvj420pでフォーマット変換を行う。一方の後者はフォーマット変換を挟むので処理は遅いが 0 から 255 までのフルレンジを扱える。
extractplanesYUV の 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
RGB からグレースケールに変換する(BT.601)。
-vf colorchannelmixer=.299:.587:.114:0:.299:.587:.114:0:.299:.587:.114:0
RGB からグレースケールに変換する(BT.709)。
-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
関連記事
- 色相を動的に変更できる hue
- LUTを手軽に入れ替えられるlut2、tlut2、swapuv
- 各映像チャンネルを分離する extractplanes
- Windows の ffmpeg で生放送する方法 : lutyuv
- 個別チャンネルの値を映像の場所毎に確認できる datascope
- RGBA の各値を別のチャンネルに混ぜ合わせる colorchannelmixer の使い方
実装についてはこちらも参照
グレースケール画像のうんちく – Qiita
アルファチャンネルをグレーで出力する alphaextract
映像にアルファチャンネルがあるときにalphaextractを使えばグレーで取り出すことができる。同時にフォーマットもGRAYに変換される。同じ効果のフィルタにextractplanes=aがありこれも同様にグレーで出力される。0に近いほど透過し、値が大きくなるほど透過しない。
基本コマンド
0000bf(青)の透過した部分を黒で、透過しない部分を白の alphaextract.png で出力する。指定するオプションはない。
ffmpeg -f lavfi -i smptebars=d=1 -vf colorkey=0x0000bf:.01:.1,alphaextract -vframes 1 alphaextract.png
別ファイルの情報から元映像を透過させる alphamerge
alphamergeフィルタは2入力目のグレースケール(グレースケールでなければ変換される)の白黒具合に応じて1入力目に透過情報を加える。透過具合については黒が透過し、白に近いほど透過しなくなり、出力はYUVAまたはARGB、RGBAになる。アルファチャンネルを含む映像になるのでそれに対応したコーデックで出力しないとアルファチャンネルが消えてしまうのに注意。YUVAならffv1。RGBAならutvideoまたはffv1で出力する。同じ機能のフィルタにmergeplanesフィルタがあるがこちらの方が負荷が少し軽く、アルファチャンネルを追加するmaskedmergeフィルタと負荷は変わらない。
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 まで
2016年6月のニコ生統計
集計期間は週間のニコ生統計の1ヶ月分である。2015年の1月の2週目から取得漏れの R-18 放送を含めて Vita API で取得し始めたのでそれ以前と比べて取得放送数が増えている。