Как условно размыть видео с помощью 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), поэтому я получаю 60-секундное видео вместо 30-секундного.

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» в описании графа фильтров не соответствует ни одному потоку.

Я использую последнюю версию ffmpeg на Windows.

решение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

Ты можешьдобавлятьнесколько условий для выполнения размытия в одном выполнении фильтра, а затем использование двух наложений. Конкат избегается. Если вы хотите использовать конкат, вам следует обрезать два потока, но это проще.

Используемое условие — это , if(x,y,z)которое оценивает xи возвращает значение y, если истинно, иначе z.

Связанный контент