映像や画像のCLUT(カラールックアップテーブル、カラーラットとも言われる)から色を置換するhaldclut
フィルタの使い方。CLUTは一般に配布されているものを使うことができるが、解像度を所定のサイズにする必要がある。
「RawTherapee Film Simulation Collection」の項目でCLUTをたくさん配布している。
Film Simulation – RawPedia : archive.org
niconicoとffmpegのことを中心に書いてる
映像や画像のCLUT(カラールックアップテーブル、カラーラットとも言われる)から色を置換するhaldclut
フィルタの使い方。CLUTは一般に配布されているものを使うことができるが、解像度を所定のサイズにする必要がある。
「RawTherapee Film Simulation Collection」の項目でCLUTをたくさん配布している。
Film Simulation – RawPedia : archive.org
フレーム毎に黒フレームを調べるblackframe
フィルタの使い方。輝度の値からどれだけ黒いかの設定があるのでシーンチェンジを調べるのに使える。blackdetect
フィルタよりも設定方法が分かりやすい。
コンソールの表示されるのでテキストにリダイレクトした方が見やすい。
ffmpeg -i input -vf blackframe=98:32 -f null -
ffmpeg -i input -vf blackframe=98:32 -f null - > blackframe.txt 2>&1
ログの出力例。
frame:1170 pblack:99 pts:3513510 t:39.039000 type:I last_keyframe:1170
黒フレーム区間を調べるblackdetect
フィルタの使い方。輝度の値からどれだけ黒いかの設定があるのでシーンチェンジを調べるのに使える。
輝度と彩度の変化を元に範囲を指定してぼかす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
映像フレームの輝度チャンネルから黒枠を検出して黒枠以外の座標をコンソール上に表示する。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
(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 でエッジ検出するフィルタにedgedetect
とconvolution
、sobel, prewitt
などがある。これらのフィルタを使ってエッジ領域を拡大しグレースケールのマスクとすることでエッジ部分に特定のフィルタを当てないようにすることができる。
フィルタでグレースケールを扱うには大まかに 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
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
関連記事
実装についてはこちらも参照
グレースケール画像のうんちく – Qiita
映像にアルファチャンネルがあるときに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
フィルタは2入力目のグレースケール(グレースケールでなければ変換される)の白黒具合に応じて1入力目に透過情報を加える。透過具合については黒が透過し、白に近いほど透過しなくなり、出力はYUVAまたはARGB、RGBAになる。アルファチャンネルを含む映像になるのでそれに対応したコーデックで出力しないとアルファチャンネルが消えてしまうのに注意。YUVAならffv1。RGBAならutvideoまたはffv1で出力する。同じ機能のフィルタにmergeplanes
フィルタがあるがこちらの方が負荷が少し軽く、アルファチャンネルを追加するmaskedmerge
フィルタと負荷は変わらない。