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
公式ドキュメント:FFmpeg Filters Documentation : avgblur
オプション
- sizeX[int]
横軸のカーネルのサイズ。大きい値ほどぼける
既定値:1
範囲:1 から 1024 まで - planes[int]
フィルタを当てるチャンネル指定
詳しくはffmpeg について | チャンネルの順番と注意点を参照
既定値:15(すべてのチャンネル)
範囲:0 から 15 まで - sizeY[int]
縦軸のカーネルのサイズ
既定値:0(sizeXと同じ値)
範囲:0 から 1024 まで
コマンド例
映像を上下に鏡合わせして元の映像と縦に並べると水面に反射しているような効果がある。
ffplay -i input -vf split[0][t];[0]vflip,avgblur=4:1:0[b];[t][b]vstack
FFmpeg Filters Documentation : vflip
アスペクト比を変えて余白にぼかし映像を追加する。
ffplay -f lavfi -i testsrc2=s=1584x896 -vf "setsar=1,split[crp0][crp1];[crp0]scale=1920:1080,setsar=1:1,gblur=sigma=30[blur];[blur][crp1]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2"
overlay
フィルタの代わりにxstack
フィルタでかぶせることもできるが、ノイズがのって正常な映像にならない。
ffplay -f lavfi -i testsrc2=s=1584x896 -vf "split[crp0][crp1];[crp0]scale=1920:1080,setsar=1:1,gblur=sigma=30[blur];[blur][crp1]xstack=layout=0_0|168_92"
解像度が一致しなくても映像を並べられる xstack
FFmpeg: How to render horizontal non full hd video with black frames, to video in 1920×1080, with blurred background – Stack Overflow
avgblur_opencl
opencl を使ってavgblur_opencl
フィルタを使う。
opencl が使えれば以下のコマンドを実行すると対応 CPU、または GPU が表示される。
ffmpeg -hide_banner -v verbose -init_hw_device opencl
出力コマンド例。
ポイントは opencl を使うデバイスを上の例では 0.0 から 1.1 から指定する。能力によって処理速度が大きく異なる。オプション指定は通常と同じ。
コマンド例。
ffmpeg -init_hw_device opencl=ocl:1.0 -filter_hw_device ocl -i input -vf hwupload,avgblur_opencl=1:15:0 output
通常のフィルタに切り替えるにはhwdownload,format=yuv420p
フィルタを挟む。
ffmpeg -init_hw_device opencl=ocl:1.0 -filter_hw_device ocl -i input -vf hwupload,avgblur_opencl,hwdownload,format=yuv420p,lutyuv=val:128:128 output