Как отключить звук через 10 секунд на 2 секунды с помощью фильтра громкости ffmpeg?

#filter #ffmpeg #volume

#Фильтр #ffmpeg #громкость

Вопрос:

Я использую эту команду для отключения звука :

 ffmpeg -i input.mp4 -af "volume=enable ='between(t,10,15)':volume=0, volume=enable ='between(t,20,25)':volume=0, volume=enable ='between(t,30,35)':volume=0, volume=enable ='between(t,40,45)':volume=0, volume=enable ='between(t,50,55)':volume=0" -c:v copy -c:a aac -b:a 192K output.mp4
  

Как я могу повторить или зациклить этот фильтр, не записывая его снова и снова?

Например, эта команда увеличивает масштаб видео через определенные секунды :

 ffmpeg -i input.mp4 -vf "zoompan=z='if(lte(mod(time,6),3),zoom 1.5,zoom-3)':x='iw/2-(iw/zoom)/2':y='ih/2-(ih/zoom)/2':d=1:fps=24" -c:v libx264 -crf 20 -preset:v ultrafast -profile:v high -g 60 -threads 2 -c:a aac -b:a 192K output.mp4
  

Как я могу использовать подобный фильтр громкости, чтобы отключить звук через определенные секунды?

Ответ №1:

Совет: вы можете настроить несколько временных диапазонов или условий в одном выражении enable, добавив их, например

ffmpeg -i input.mp4 -af "volume=volume=0:enable ='between(t,10,15) between(t,20,25) between(t,30,35) between(t,40,45) between(t,50,55)'" -c:v copy -c:a aac -b:a 192K output.mp4


Если шаблон регулярный, например, «каждые 10 секунд, в течение 2 секунд», обычно используется функция mod, которая возвращает остаток от левого операнда с помощью правого операнда. Затем вы добавляете сравнительную функцию типа lte (меньше или равно)

В этом случае,

ffmpeg -i input.mp4 -af "volume=volume=0:enable ='lte(mod(t,10),2)'" -c:v copy -c:a aac -b:a 192K output.mp4