いろいろなエフェクトが使えるも、予めモジュールのDLLを読み込ませないと使えないfrei0r
フィルタの使い方。
MPlayer/FFMpeg on Windows (win32/win64)の一番下からfrei0r-pluginsを使うOSに合わせて保存し展開する。最新版はmedia-autobuild_suiteからビルドできる。
顔認識のライブラリはOpenCvのopencv_contribをインストールしてからfrei0rにリンクするか、frei0r-1.4.7z – osspack32 – frei0r 1.4 complete plugins for ffmpeg – Unofficial OSS packages compiled with MinGW (mainly 32bit only) – Google Project Hostingで配布している。
opencv/opencv: Open Source Computer Vision Library
opencv/opencv_contrib: Repository for OpenCV’s extra modules
- dll:face451_dll.7z
- ソースコード:opencv4.5.1、opencv_contrib4.5.1
コンパイルにはfrei0r/src/filter/facebl0r/facebl0r.cppとfrei0r/src/filter/facedetect/facedetect.cppのclassifierのパスを/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xmlからhaarcascade_frontalface_default.xmlに書き換えている。
コンパイルコマンドは以下を参照。media-autobuild_suite/msys64/mingw64.exeからシェルを起動:media-autobuild_suiteでfacebl0r、facedetectモジュールを作る
次に、set FREI0R_PATH
でDLLのフォルダを読み込ませる。Windowsではエクスプローラー上部に表示される絶対パスを指定してもよい。
set FREI0R_PATH=frei0r-1
するとfrei0r
フィルタが使えるようになるが、mixer2や、mixer3のフィルタは実装されてないので使えない。ここで言う mixer2や、mixer3のフィルタとはソースコードのsrcフォルダにあるフィルタのことである。出力は全てのプラグインでピクセルフォーマットがRGBAになるので動画にするときは用途に応じてフォーマット変換format
フィルタを使う。
- 公式サイト:Frei0r :: Free Video Effects collection
- ソースコード:dyne/frei0r: a large collection of free and portable video plugins
- Git:git clone https://github.com/dyne/frei0r.git
コンパイル方法は以下を参照
MLT – Documentation
外部ライブラリ:frei0r – eingusteの日記
ffmpegの公式サイトやヘルプコマンドで見てもフィルタの使い方が詳しく書いてないのでソースコードか別サイトからフィルタの使い方を調べる。
- 公式ドキュメント:FFmpeg Filters Documentation : frei0r
- ソースコード:frei0r/src/filter at master · dyne/frei0r
- frei0r の引数が調べられる:PluginsFilters – MLT – TWiki
- フィルタの説明:www.freedesktop.org : frei0r
frei0r
フィルタの中にはffmpegと同名のフィルタもあったりするが、ffmpegのネイティブフィルタの方が速いので同名のフィルタの場合はffmpegのを使う。モジュールを指定した後の最初のオプションは:でつなぎ、次のオプションは:ではなく|でつなぐ。bool型は0、1ではなくてn、yで指定し、オプションの数値は計算式が使えずdouble型の値を指定する。RGBの色も0から1までのdouble型の値で、色名指定もできる。座標のXYも左上を0として0から1までのdouble型の値とする。
-vf "frei0r=モジュール名:値1|値2|値3" // 以下同様
特徴的なフィルタの例
サンプル動画はsm26266572 マリカー動画の開始5秒から10秒までの5秒間。rgbnoiseだけ容量が大きいので1秒。
- baltan
残像を残すフィルタ。引数無し
ffplay -f lavfi -i testsrc2 -vf frei0r=baltan
- delaygrab
波紋フィルタ。動いているところが球面のように広がる。引数無し
ffplay -f lavfi -i testsrc2 -vf frei0r=delaygrab
- distort0r
映像が右下方向に拡大縮小する
1引数:動かす距離、0から1までfloat指定、既定値:1
2引数:動かす頻度、0から1までfloat指定、既定値:0.005
Filter: frei0r.distort0r – MLT – TWiki
ffplay -f lavfi -i testsrc2 -vf "frei0r=distort0r:1|.0005"
- elastic_scale
解像度変えずに左右に引き延ばしたり、縮めたりする
1引数:水平方向中央の相対位置の指定、0から1までfloat指定、既定値:0.5
2引数:線形エリアの幅の位置(よくわからない)、0から1まで float指定、既定値:0
3引数:線形エリアをどれだけスケールするか、0から1まで float指定、既定値:1
4引数:0に近いほど中央が広がり、1に近いほど外が広がる、0から1まで float指定、既定値:0.7125
ffplay -f lavfi -i testsrc2 -vf "frei0r=elastic_scale:0.5|0.3”
グリッドを引くとよくわかる
ffplay -f lavfi -i "color=c=white,drawgrid=0:0:10:10,split=3[1][2],frei0r=elastic_scale:0.5|0.5|0|0.9[0v];[1]frei0r=elastic_scale:0.5|0.5|1|0.9,[2][0v]vstack=3"
- facebl0r
1人の人間の顔を認識して映像をぼかす。ClassifierはFREI0R_PATHと同じ場所を読み込まないのでffmpegと同じ場所にXMLファイルを置く
Filter: frei0r.facedetectMLT – MLT – Documentation
ffplay -i "人の顔データ" -vf "frei0r=facebl0r:haarcascade_frontalface_default.xml|n|0.025|0.1"
- facedetect
複数人の人間の顔を認識して○か□をオーバーレイする。ClassifierはFREI0R_PATHと同じ場所を読み込まないのでffmpegと同じ場所にXMLファイルを置く
引数は16あり、3引数が○か□の指定、12から16までが色の指定になる
3引数:0が○、0.1が横の楕円、0.2が□、1がランダム
Filter: frei0r.facedetect – MLT – Documentation
ffplay -i "人の顔データ" -vf "frei0r=facedetect:haarcascade_frontalface_default.xml|0.01|0"
- perspective
映像を傾けてゆがませるフィルタ。左上隅を縦軸横軸の00とする
ffmpeg にも同様のフィルタがある
1引数:左上の横座標の相対位置、0から1までfloat指定、既定値:0
2引数:左上の縦座標の相対位置、0から1までfloat指定、既定値:0
3引数:右上の横座標の相対位置、0から1までfloat指定、既定値:1
4引数:右上の縦座標の相対位置、0から1までfloat指定、既定値:0
ffplay -f lavfi -i testsrc2 -vf "frei0r=perspective:0.2/0.2|0.8/0.2"
- glitch0r
グリッチという、映像を左右にずらした帯状のノイズをのせる
1引数:グリッチの量。大きくすると増える、0から1までfloat指定、既定値:0
2引数:小さくするとグリッチの幅が狭くなる、0から1までfloat指定、既定値:0.49913
3引数:小さくすると動きが少なくなる、0から1までfloat指定、既定値:0.499305
4引数:小さくすると色が変わらず元の色、0から1までfloat指定、既定値:0
ffplay -f lavfi -i testsrc2 -vf "frei0r=glitch0r:0.4|0.001|1|1"
- pixeliz0r
モザイクを掛けるフィルタ
モザイク自体の荒指定しか出来ないので特定場所にモザイクを掛ける場合は crop と overlay を併用する。モザイク掛ける範囲は8の倍数を指定しないと斜めにモザイクがかかりきれいな四角にならない。小さい値ほどモザイクが緻密になる
1引数:モザイク1サイズの縦相対ピクセル
0から1までfloat指定、既定値:0.0194444
2引数:モザイク1サイズの横相対ピクセル
0から1までfloat指定、既定値:0.0243056既定値からの倍率の目安
倍率 縦 横 10 0.194444 0.243056 9 0.1749996 0.2187504 8 0.1555552 0.1944448 7 0.1361108 0.1701392 6 0.1166664 0.1458336 5 0.097222 0.121528 4 0.0777776 0.0972224 3 0.0583332 0.0729168 2 0.0388888 0.0486112 1 0.0194444 0.0243056 0.9 0.01749996 0.02187504 0.8 0.01555552 0.01944448 0.7 0.01361108 0.01701392 0.6 0.01166664 0.01458336 0.5 0.0097222 0.0121528 Filter: frei0r.pixeliz0r – MLT – TWiki
ffplay -f lavfi -i testsrc2 -vf "split[a][b];[a]crop=iw/2:ih/2:0:0,frei0r=pixeliz0r:.0194444|.0243056[moz];[b][moz]overlay"
- primaries
原色だけに変換するフィルタ
1引数:使う色の数を指定(最大32色)する、0から1までfloat指定、既定値:1
Filter: frei0r.primaries – MLT – TWikiffplay -f lavfi -i testsrc2 -vf "frei0r=primaries:1"
- rgbnoise
ノイズを生成するフィルタ
1引数:ノイズの発生頻度、0から1までfloat指定、既定値:0.2
Filter: frei0r.rgbnoise – MLT – TWikiffplay -f lavfi -i testsrc2 -vf "frei0r=rgbnoise:.2"
- scanline0r
ブラウン管のような横の縞々模様を載せるフィルタ。引数無し
ffmpeg のネイティブフィルタで実装するならdrawgridフィルタを使う
ffplay -f lavfi -i testsrc2 -vf frei0r=scanline0r
- sobel(ソーベル)
エッジ検出フィルタのエッジのカラー版。引数無し
ffmpeg にもsobelフィルタがある
ffplay -f lavfi -i testsrc2 -vf frei0r=sobel
- transparency
透過フィルタ。映像の透過具合を指定できる
1引数:透過具合の指定、0から1までfloat指定、既定値:0
Filter: frei0r.transparency – MLT – TWiki
ffplay -f lavfi -i testsrc2 -vf split[a][b],[a]scale=iw/2:-1,frei0r=transparency:.4[aa],[b][aa]overlay
- vertigo
めまいフィルタ。映像がにじむような効果がある
1引数:映像の揺れ具合の指定、0から1までfloat指定、既定値:0.02
2引数:映像の拡大具合の指定、0から1までfloat指定、既定値:0.202
Filter: frei0r.vertigo – MLT – TWiki
ffplay -f lavfi -i testsrc2 -vf "frei0r=vertigo:.02|.202"
ネイティブフィルタに実装された。
ピクセライズして映像にモザイクをかけるpixelize
ffmpeg のネイティブフィルタで実装するなら
ffplay -f lavfi -i testsrc2 -vf split[a][b],[a]scale=iw/2:-1,format=yuva420p,lutyuv=val:val:val:128[aa],[b][aa]overlay
frei0r_src は-f lavfi -i
形式で読み込めるソースデータ。filter_params引数の数はソースコードを参照。onecol0rには 0xffffff 形式も可能。lissajous0rはリサジュー図形。
ffplay -f lavfi -i "frei0r_src=size=200x200:framerate=10:filter_name=onecol0r:filter_params=red"
ffplay -f lavfi -i "frei0r_src=size=200x200:framerate=10:filter_name=nois0r:filter_params=10"
ffplay -f lavfi -i "frei0r_src=size=200x200:framerate=10:filter_name=lissajous0r:filter_params=10"
ffplay -f lavfi -i "frei0r_src=size=200x200:framerate=10:filter_name=ising0r:filter_params=10"
ffplay -f lavfi -i "frei0r_src=size=200x200:framerate=10:filter_name=partik0l:filter_params=10"
公式ドキュメント
FFmpeg Filters Documentation : frei0r
FFmpeg Filters Documentation : frei0r_src