CLUTから色を置換するhaldclut

映像や画像のCLUT(カラールックアップテーブル、カラーラットとも言われる)から色を置換するhaldclutフィルタの使い方。CLUTは一般に配布されているものを使うことができるが、解像度を所定のサイズにする必要がある。

カラールックアップテーブルを適用するlut1d、lut3d

「RawTherapee Film Simulation Collection」の項目でCLUTをたくさん配布している。
Film Simulation – RawPedia : archive.org

Continue reading “CLUTから色を置換するhaldclut”

黒フレームを調べる blackframe

フレーム毎に黒フレームを調べるblackframeフィルタの使い方。輝度の値からどれだけ黒いかの設定があるのでシーンチェンジを調べるのに使える。blackdetectフィルタよりも設定方法が分かりやすい。

黒フレーム区間を調べる 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

Continue reading “黒フレームを調べる blackframe”

強力な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

Continue reading “強力な2次元デノイザ sab”

映像の黒枠の座標を検出する bbox

映像フレームの輝度チャンネルから黒枠を検出して黒枠以外の座標をコンソール上に表示する。cropdrawboxのコマンドも表示する。

基本コマンド

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 でモーションブラーを掛ける

基本コマンド

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 Filters Documentation : atadenoise

Continue reading “手軽にモーションブラー atadenoise”

ffmpeg でエッジマスク

ffmpeg でエッジ検出するフィルタにedgedetectconvolutionsobel, prewittなどがある。これらのフィルタを使ってエッジ領域を拡大しグレースケールのマスクとすることでエッジ部分に特定のフィルタを当てないようにすることができる。

Continue reading “ffmpeg でエッジマスク”

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

関連記事

実装についてはこちらも参照
グレースケール画像のうんちく – Qiita

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

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

各映像チャンネルを分離する 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

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