前フレームのY差分をマスクしてフィルタを当てなくするモーションマスクの使い方。使うフィルタはtblend
フィルタで前後フレームを1入力で取り込み、maskedmerge
フィルタで1、2入力の割合を決めている。
連続フレームの差分をブレンドする tblend
連続フレームを読み込んでそれぞれを計算するtblend(time blend)
フィルタの使い方。オプションはblend
フィルタと同じ。
条件を指定するのに使う。
ffmpeg で使える評価式
非局所平均のデノイザ nlmeans
ffmpeg 3.2 にリリースしたビデオフィルタ。ffmpeg のフィルタの中でかなり処理が重たい部類に入るエッジ保護のデノイザnlmeans
フィルタの使い方。なぜこれほどまでに重たいかというとデノイズする部分を映像内容によって異なる処理をするために重たくなるから。詳しい処理内容は「non-local means filter」で検索する。
処理内容の紹介記事
Non-local Means Filterによるデノイジング | OpenCV.jp
Non-local Means Filterの実装 – Qiita
該当ソースコード:FFmpeg/vf_nlmeans.c at master · FFmpeg/FFmpeg
公式ドキュメント:FFmpeg Filters Documentation : nlmeans
2019年2月2日処理が見直され 1080p で 30% ほど高速化された。
lavfi/nlmeans: improve the performance:git.videolan.org Git – ffmpeg.git/commitdiff
映像の場所を入れ換えて暗号化する
ネット上で漫画を読めるサービスで画像のリンクを開いてみると、本来の映像の位置からバラバラに配置した画像が見られる。これを ffmpeg のswaprect
フィルタを使って映像をバラバラに配置して同じ効果を求めてみる。
映像をたくさん分割すればするほど組み合わせが複雑になるが、フィルタチェーンの文字数制限がある(-f lavfi -graph -iで入力すれば制限がなくなる)ので無制限に分割できるわけではない。バラバラに分割して暗号化された映像を元に戻すには同じフィルタチェーンを逆順に設定すれば元の映像に戻すことができる。swaprect
フィルタの他にもswapuv
で UV を入れ換えたり、hflip
で左右反転することでより難読化することができる。swaprect
フィルタを多用してもそれほど負荷は上がらないので気にする必要は無いが、映像が難読化され圧縮しにくい映像になり容量が増える。
音声のダイナミックレンジを広げる crystalizer
ffmpeg 3.2 でリリース予定のオーディオフィルタ。単純なアルゴリズムで音声のダイナミックレンジを広げるcrystalizer
フィルタの使い方。
基本コマンド
既定値のオプションを当てる
ffmpeg -i input -af crystalizer=i=2:c=1 output
ffmpeg -i input -af crystalizer=2:1 output
ffplay -i input -af crystalizer=2:1
平均ブラー avgblur
ffmpeg 3.2 でリリースしたビデオフィルタ。隣り合うピクセルを平均化してぼかすavgblur
フィルタの使い方。似たフィルタにgblur
があるが、こちらは縦横に伸ばしたように輝度差がわかりやすい。CPU または GPU に opencl が使えるとavgblur_opencl
フィルタが使える。
基本コマンド
既定値のオプションを当てる
ffmpeg -i input -vf avgblur=sizeX=1:planes=15:sizeY=0 output
ffmpeg -i input -vf avgblur=1:15:0 output
ffplay -i input -vf avgblur=1:15:0
ガウシアンブラー gblur
ffmpeg 3.2 でリリースしたビデオフィルタ。ガウシアンカーネルを使ってしてぼかすgblur
フィルタの使い方。カーネルについてはconvolutionフィルタでも使えるが、具体的な内容は省略。似たフィルタにavgblur
があるが、こちらは満遍なくブラーを掛ける一般的なぼかしフィルタのイメージ。
基本コマンド
既定値のオプションを当てる
ffmpeg -i input -vf gblur=sigma=0.5:steps=1:planes=15:sigmaV=-1 output
ffmpeg -i input -vf gblur=.5:1:15:-1 output
ffplay -i input -vf gblur=.5:1:15:-1
公式ドキュメント:FFmpeg Filters Documentation : gblur
エッジ検出フィルタ sobel, prewitt
ffmpeg 3.2でリリースしたビデオフィルタ。エッジ検出フィルタに単体ではedgedetect
とfrei0r
のsobelがあり、カーネルを指定するconvolution
でもエッジ検出ができるが、今回のこれらのフィルタはedgedetect
よりもエッジ部分の線が太くconvolution
よりも手軽なのでマスクするのにも便利。sobel
とprewitt
、roberts
はカーネルが少し異なるがオプションは同じである。
- ffmpeg でエッジマスク
- エッジ検出フィルタscharr
- エッジ検出フィルタ roberts
- ffmpeg でエッジ検出をする edgedetect
- 鮮鋭化やぼかし、エンボス処理などができる convolution
基本コマンド
ffmpeg -i input -vf sobel=planes=15:scale=1:delta=0 output
ffmpeg -i input -vf sobel=15:1:0 output
ffplay -i input -vf sobel=15:1:0
- Wikipedia:Sobel operator – Wikipedia
- 公式ドキュメント:FFmpeg Filters Documentation : sobel
- 公式ドキュメント:FFmpeg Filters Documentation : prewitt
2つの連続したフィールドを1つのフレームで出力する weave
ffmpeg 3.2でリリースしたビデオフィルタ。フィールドを合わせてフレームにするweave
フィルタの使い方。縦解像度が2倍になり、フレームレートとフレーム数は2分の1になる。3.4の追加フィルタでdoubleweave
フィルタもある。こちらは縦解像度が2倍になるが、フレームレートとフレーム数は変わらない。
各フィールドをフレームに変換する separatefields
基本コマンド
separatefields
でフィールド分解したのをフレームに戻す。つまり何も変わらない
ffmpeg -i input -vf separatefields,weave output
ffplay -i input -vf separatefields,weave
tinterlace
フィルタのtinterlace=0
と同じことができる
2フレームに1フレーム、フィールドがずれたフレームが追加される。解像度はそのままにフレーム数とフレームレートは元映像の倍になる
ffmpeg -i input -vf separatefields,doubleweave output
ffplay -i input -vf separatefields,doubleweave
複数の映像を1つの映像に合わせるinterleave
2以上の映像をPTSに即して連続した映像で出力するinterleave
フィルタの使い方。フィルタを使ってエンコードするときは出力オプションに-rで動画のフレームレートを指定する。select
フィルタを併用するとシーンチェンジやフレームタイプ別にフィルタを使い分けられる。
関連フィルタ:
フィールドを足したり引いたりする tinterlace
ピクチャーをインターリーブ、デインターリーブするil