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

非局所平均のデノイザ 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
続きを読む 非局所平均のデノイザ nlmeans

映像の場所を入れ換えて暗号化する

ネット上で漫画を読めるサービスで画像のリンクを開いてみると、本来の映像の位置からバラバラに配置されている画像を見られる。これを ffmpeg の swaprect フィルタを使って映像をバラバラに配置して同じ効果が得られる。

映像の2カ所を入れ替える swaprect

映像をたくさん分割すればするほど組み合わせが複雑になるが、フィルタチェーンの文字数制限がある(-f lavfi -graph -i で入力すれば制限がなくなる)ので無制限に分割できるわけではない。バラバラに分割して暗号化された映像を元に戻すには同じフィルタチェーンを逆順に設定すれば元の映像に戻すことができる。swaprect フィルタの他にも swapuv で UV を入れ換えたり、hflip で左右反転することでより難読化することができる。swaprect フィルタを多用してもそれほど負荷は上がらないので気にする必要は無いが、映像が難読化され圧縮しにくい映像になり容量が増える。

FFmpeg Devices Documentation : lavfi
続きを読む 映像の場所を入れ換えて暗号化する

音声のダイナミックレンジを広げる 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

公式ドキュメント:FFmpeg Filters Documentation : crystalizer
続きを読む 音声のダイナミックレンジを広げる crystalizer

平均ブラー avgblur

ffmpeg 3.2 でリリース予定のビデオフィルタ。隣り合うピクセルを平均化してぼかす avgblur フィルタの使い方。似たフィルタに gblur があるが、こちらは縦横に伸ばしたように輝度差がわかりやすい。

基本コマンド

既定値のオプションを当てる
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

公式ドキュメント:FFmpeg Filters Documentation : avgblur
続きを読む 平均ブラー avgblur

ガウシアンブラー 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
続きを読む ガウシアンブラー gblur

エッジ検出フィルタ sobel, prewitt

ffmpeg 3.2 でリリース予定のビデオフィルタ。エッジ検出フィルタに単体では edgedetectfrei0rsobel があり、カーネルを指定する convolution でもエッジ検出ができるが、今回のこれらのフィルタは edgedetect よりもエッジ部分の線が太く convolution よりも手軽なのでマスクするのにも便利。sobelprewittroberts はカーネルが少し異なるがオプションは同じである。

ffmpeg でエッジ検出をする edgedetect
エッジ検出フィルタ roberts
ffmpeg で使える frei0r フィルタの使い方
先鋭化やぼかし、エンボス処理などができる convolution
ffmpeg でエッジマスク

基本コマンド

既定値のオプションを当てる
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

公式ドキュメント:FFmpeg Filters Documentation : sobel
公式ドキュメント:FFmpeg Filters Documentation : prewitt
続きを読む エッジ検出フィルタ sobel, prewitt

2つの連続したフィールドを1つのフレームで出力する weave

ffmpeg 3.2 でリリース予定のビデオフィルタ。フィールドを合わせてフレームにする weave フィルタの使い方。縦解像度が2倍になり、フレームレートとフレーム数は2分の1になる。3.4(予定)の追加フィルタで doubleweave フィルタも追加された。こちらは縦解像度が2倍になるが、フレームレートとフレーム数は変わらない。

基本コマンド

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

公式ドキュメント:FFmpeg Filters Documentation : weave, doubleweave
続きを読む 2つの連続したフィールドを1つのフレームで出力する weave

複数の映像を1つの映像に交互に挟む interleave

2以上の映像を交互に1つの連続した映像で出力する interleave フィルタの使い方。出力フレーム数は1入力のフレーム数が上限になるので複数映像を交互に挟んで出力する場合はあらかじめフレーム数を減らしておく必要がある。

基本コマンド

偶数と奇数フレームに分けて合わせている。適宜 null フィルタを変更。このコマンドでは何も変化しない
ffmpeg -i input -vf "split[0][1];[0]select=(mod(n-1\,2)),null[0a];[1]select=(mod(n\,2)),null[1a];[0a][1a]interleave=2" output
ffplay -i input -vf "split[0][1];[0]select=(mod(n-1\,2)),null[0a];[1]select=(mod(n\,2)),null[1a];[0a][1a]interleave"

公式ドキュメント:FFmpeg Filters Documentation : interleave, ainterleave
続きを読む 複数の映像を1つの映像に交互に挟む interleave

ウェーブレットデノイザ vaguedenoiser

ffmpeg 3.2 でリリース予定のビデオフィルタ。Cohen-Daubechies-Feauveau(CDF) 9/7 のウェーブレットデノイザ。フィルタを当てるチャンネルを指定できる。

基本コマンド

ffmpeg -i input -vf vaguedenoiser=threshold=2:method=2:nsteps=6:percent=85:planes=15 output
ffmpeg -i input -vf vaguedenoiser=2:2:6:85:15 output
ffplay -i input -vf vaguedenoiser=2:2:6:85:15

公式ドキュメント:FFmpeg Filters Documentation : vaguedenoiser
続きを読む ウェーブレットデノイザ vaguedenoiser

ffmpeg でフレーム補間する minterpolate

ffmpeg 3.2 でリリース予定のビデオフィルタ。前後フレームから中間フレームを作り出す minterpolate フィルタの使い方。無料でフレーム補完する方法には AviSynth+MvTools が一般的だが、もっと手軽に1コマンドでフレーム補完した動画を作ることができる。

基本コマンド

かなり負荷が高く、シングルスレッドしか働かないので出力解像度を小さくしないと ffplay ではプレビューがまともに動かない。

30fps の動画を 60fps にフレーム補完する
ffmpeg -i input -vf minterpolate=fps=60:mi_mode=mci:mc_mode=obmc:me_mode=bilat:me=epzs:mb_size=16:search_param=32:vsbmc=0:scd=fdiff:scd_threshold=5 output
ffmpeg -i input -vf minterpolate=60:2:0:1:8:16:32:0:1:5 output

公式ドキュメント:FFmpeg Filters Documentation : minterpolate
続きを読む ffmpeg でフレーム補間する minterpolate