ffmpeg 5.1から使える予定のフィルタ。指定した矩形にフィルタを当てるfeedbackフィルタの使い方。縦x横で分割できる範囲ならuntile、select、interleave、tileフィルタの併用でも同じことができ、ぼかすだけならvarblurフィルタでもできる。座標を指定して周りの色でブレンドするdelogoフィルタもある。

基本コマンド

左上100×100の位置にgblurフィルタを当てる。
ffmpeg -i input -vf [in][blurin]feedback=x=0:y=0:w=100:h=100[out][blurout];[blurout]gblur[blurin] output
ffplay -i input -vf [in][blurin]feedback=0:0:100:100[out][blurout];[blurout]gblur[blurin]

-filter_complexを使うときは-mapを指定する。
ffmpeg -i input -filter_complex [0:v][blurin]feedback=0:0:100:100[out][blurout];[blurout]gblur[blurin] -map [out] output

untileフィルタで分割できるならその特定場所にフィルタを当てられる。untileフィルタは左上から右に向かって並ぶので奇数番目、つまり右半分にhueフィルタを当てる例。
ffmpeg -f lavfi -i smptehdbars=s=1920x1080 -vf untile=2x2,select='1*not(mod(n\,2))+2*mod(n\,2)':n=2[evn][odd];[odd]hue=n[odd];[evn][odd]interleave,tile=2x2 -r 25 output.mp4
ffplay -f lavfi -i smptehdbars=s=1920x1080 -vf untile=2x2,select='1*not(mod(n\,2))+2*mod(n\,2)':n=2[evn][odd];[odd]hue=n[odd];[evn][odd]interleave,tile=2x2

色相を動的に変更できる hue

分割した特定の場所指定はselectフィルタの複数区間を指定するbetween()、1カ所を指定するeq()を併用する。0から数えるので2\,5は3番目から6番目までと10番目と11番目、16番目にlutyuvフィルタでグレーに色を変えている。
ffmpeg -f lavfi -i smptehdbars=s=1920x1080 -vf untile=4x4,select='st(0\,between(mod(n\,16),2\,5)+between(mod(n\,16),9\,10)+eq(mod(n\,16)\,15));1*not(ld(0))+2*(ld(0))':n=2[evn][odd];[odd]hue=n[odd];[odd]lutyuv=128:128:128[odd];[evn][odd]interleave,tile=4x4 -r 25 output.mp4
ffplay -f lavfi -i smptehdbars=s=1920x1080 -vf untile=4x4,select='st(0\,between(mod(n\,16),2\,5)+between(mod(n\,16),9\,10)+eq(mod(n\,16)\,15));1*not(ld(0))+2*(ld(0))':n=2[evn][odd];[odd]hue=n[odd];[odd]lutyuv=128:128:128[odd];[evn][odd]interleave,tile=4x4

between()eq()の例。
ffmpeg で使える評価式

連続フレームを対象にしたフィルタにtblend、tmedian、tmixフィルタがある。selectフィルタで選択したフレームだけ平均したり差分を取ったりできる。

公式ドキュメント:FFmpeg Filters Documentation : feedback

オプション

  • x[int]
    フィルタを当てる場所の横座標の指定。評価式は使えないので数値指定する
    既定値:0
    範囲:0からINT_MAX
  • y[int]
    フィルタを当てる場所の縦座標の指定。評価式は使えないので数値指定する
    既定値:0
    範囲:0からINT_MAX
  • w[int]
    フィルタを当てる場所の横幅。xから指定した値が横幅になる。評価式は使えないので数値指定する
    既定値:0
    範囲:0からINT_MAX
  • h[int]
    フィルタを当てる場所の縦幅。yから指定した値が縦幅になる。評価式は使えないので数値指定する
    既定値:0
    範囲:0からINT_MAX

コメントを残す

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

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