いろいろなエフェクトが使えるも、予めモジュールのDLLを読み込ませないと使えないfrei0rフィルタの使い方。しかしZeranoe FFmpeg3.4から有効化されていないのでそれ以前のバージョンを使う。または Windows向けならjb-alvarado/media-autobuild_suiteを使う。

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

facebl0rとfacedetectの64ビットWindows用のDLLとfrei0rを有効にしたffmpegを配布開始した。opencv4.3.0_face.7z

ffmpeg で OpenCV フィルタを使う

コンパイルには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の公式サイトやヘルプコマンドで見てもフィルタの使い方が詳しく書いてないのでソースコードか別サイトからフィルタの使い方を調べる。

frei0rフィルタの中にはffmpegと同名のフィルタもあったりするが、ffmpegのネイティブフィルタの方が速いので同名のフィルタの場合はffmpegのを使う方がよい。モジュールを指定した後の最初のオプションは:でつなぎ、次のオプションは:ではなく|でつなぐ。bool型は0、1ではなくてn、yで指定し、オプションの数値は計算式が使えないので値だけを指定する。

-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人の人間の顔を認識して映像をぼかす
    上で配布している64ビットWindows用のDLLを使うとffmpegと同じ場所にXMLファイルを置くことでClassifier以下の設定もできる
    Filter: frei0r.facedetectMLT – MLT – Documentation
    ffplay -i "人の顔データ" -vf "frei0r=facebl0r:haarcascade_frontalface_default.xml|n|0.025|0.1"
  • facedetect
    複数人の人間の顔を認識して○か□をオーバーレイする
    上で配布している64ビットWindows用のDLLを使うとffmpegと同じ場所にXMLファイルを置くことでClassifier以下の設定もできる
    引数は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 – TWikiffplay -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
  • 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

  • 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"

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

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)