如何使用 ffmpeg 过滤器音量在 10 秒后将音频静音 2 秒?

How to Mute audio after 10 Seconds for 2 seconds with ffmpeg filter volume?

我正在使用此命令将音频静音:

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

如何使用这样的音量过滤器在特定秒数后将音频静音?

提示:您可以通过添加它们来在一个启用表达式中定位多个时间范围或条件,例如

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


如果模式是规则的,比如'every 10 seconds, for 2 seconds',一般使用mod函数,即returns左操作数由右操作数取余。然后你附上这是一个比较函数,如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