Я хочу условно размыть видео, как для 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' в описании filtergraph не соответствует ни одному потоку.

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

1 ответ1

0

использование

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .