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

基本コマンド

左上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フィルタで選択したフレームだけ平均したり差分を取ったりできる。

feedbackフィルタを複数当てることで複数個所フィルタを使い分けることもできる。
ffmpeg -i input -vf [in][lutin]feedback=0:0:100:100[out0][lutout];[lutout]lutyuv=val:128:128[lutin];[out0][lutin2]feedback=200:200:300:300[out][lutout2];[lutout2]lutyuv=val:128:128[lutin2] -c:a copy output
ffplay -i input -vf [in][lutin]feedback=0:0:100:100[out0][lutout];[lutout]lutyuv=val:128:128[lutin];[out0][lutin2]feedback=200:200:300:300[out][lutout2];[lutout2]lutyuv=val:128:128[lutin2]

公式ドキュメント: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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

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