FFMPG を使用して条件付きでビデオをぼかす方法

FFMPG を使用して条件付きでビデオをぼかす方法

30 秒のビデオの場合のように、2 ~ 10 秒の領域をぼかして 12 ~ 20 秒とは異なる領域をぼかすなど、ビデオを条件付きでぼかしたいです。

しかし、今のところ1回しかぼかすことができません。以下は、目的を達成するために試したコマンドです。算術式

ffmpeg -y -i with_out_sound.mp4 filter_complex [0:v]boxblur=10:enable='between(t,2,10)'[bg],[0:v]crop=206:169:3 2:121[fg],[bg][fg]overlay=32:121:enable='between(t,2,10)'[tmp];[0:v]boxblur=10: enable='between(t,12,20)'[bg],[0:v]crop=206:169:42:100[fg],[bg][fg]overlay=42:100 :enable='between(t,12,20)'[tmp2];[tmp][tmp2]concat[tmp3] -map [tmp3] with_out_sou ndd.mp4

ただし、上記のコマンドは、最初に完全なビデオをぼかし (2-10)、次に完全なビデオをぼかし (12-20) で再度連結するため、30 秒ではなく 60 秒のビデオが得られます。

ffmpeg -y -i with_out_sound.mp4 -filter_complex [0:v]boxblur=10:enable='between(t,2,10)'[bg];[bg]crop=206:169:32:121[fg];[bg][fg]overlay=32:121:enable='between(t,2,10)'[tmp],[tmp]b oxblur=10:enable='between(t,12,20)'[tbg],[tmp]crop=206:169:42:100[tfg],[tbg][tfg]overlay=42:100:enable='between(t,12,20)'[tmp2] -map "[tmp2]" with_out_soundd.mp4

しかし、この場合、フィルターグラフの説明のストリーム指定子 'tmp' がストリームと一致しないというエラーが発生し始めます。

私はWindowsで最新バージョンのffmpegを使用しています。

答え1

使用

ffmpeg -y -i with_out_sound.mp4 -filter_complex \
"[0:v]boxblur=10:enable='if(between(t,2,10)+between(t,12,20),1,0)'[bg];
 [0:v]crop=206:169:32:121[fg1];[0:v]crop=206:169:42:100[fg2];
 [bg][fg1]overlay=32:121:enable='between(t,2,10)'[tmp];
 [tmp][fg2]overlay=42:100:enable='between(t,12,20)'[tmp2]"
-map [tmp2] with_blur.mp4

あなたはできる追加複数の条件を使用して、1 回のフィルター実行でぼかしを行い、2 つのオーバーレイを使用します。連結は回避されます。連結を使用する場合は、2 つのストリームをトリミングする必要がありますが、この方が簡単です。

使用される条件は であり、if(x,y,z)これは評価されxytrue の場合は を返し、そうでない場合は を返しますz

関連情報