使用ffmpeg静音指定部分音频文件

32

我有一个JSON文件,其中包含我想要在给定音频文件中静音的区域。如何处理音频文件以使列出的部分之间被静音?


你可以将这些部分剪下来,然后重新拼接在一起... - rogerdpack
我考虑过这个,但似乎很麻烦:需要切掉我想要的音频部分,然后生成一些无声片段,再拼接起来,并希望合并处不会出现噪音。下面的解决方案完美地解决了问题! - kimadactyl
有一个“选择”过滤器,我想知道它是否适用于音频... - rogerdpack
3个回答

61
下面的命令将会静音两段视频:5-10秒和15-20秒之间。
ffmpeg -i video.mp4 -af "volume=enable='between(t,5,10)':volume=0, volume=enable='between(t,15,20)':volume=0" ...

描述:

-af 是音频过滤器。它通过指定多个音量过滤器,在指定的时间启用/禁用这些过滤器来工作。volume=enable='between(t,5,10)':volume=0 的意思是使用一个音量过滤器,在 5 到 10 秒之间启用,并将音量设置为 0。


1
那很完美,谢谢!你能解释一下它是如何工作的吗? - kimadactyl
7
-af 是音频过滤器。它通过指定多个音量过滤器,在指定的时间启用/禁用这些过滤器。volume=enable='between(t,5,10)':volume=0 意味着使用一个音量过滤器,在 5 至 10 秒之间启用,并将音量设置为 0。 - aergistal
1
在volume=0时,我可以提供的最小和最大值是什么? - karanatwal.github.io
8
如果你希望更快地运行它,可以在命令中添加“-vcodec copy”,这样视频就不会被重新编码(如果你只需要编辑音频的话这是可以的)。例如:ffmpeg -i in.mp4 -vcodec copy -af "volume=enable='between(t,5,10)':volume=0, volume=enable='between(t,15,20)':volume=0" out.mp4 - QwertyChouskie
3
请注意,'between'输入是一个解析为数字的表达式。因此,要在26:40和26:42之间静音,您需要执行'between(t,26*60+40,26*60+42)'。它还支持浮点数(例如,'between(t,26*60+40+0.5,26*60+42)')。 - Moshe
显示剩余3条评论

2
我看到了这篇文章,因为我想知道如何在视频中降低音频部分的音量。
例如,我希望在34到35分钟、37到40分钟之间,将音量设置为输入音量的0.1倍。以下方法适用于我,希望对其他需要完成同样任务的人也有所帮助:
C:\ffmpeg-4.4-full_build\bin>ffmpeg -i in_video.mp4 -filter:a "volume=enable='between(t,34*60,35*60)':volume=0.1, volume=enable='between(t,37*60,40*60)':volume=0.1" -vcodec copy out_video.mp4

注意之间的时间需要以秒为单位。

有关音频音量过滤器(-filter:a)的更多信息,请参阅下面的链接。 https://trac.ffmpeg.org/wiki/AudioVolume


0
感谢 @aergistal,它对我有用:
命令行:
ffmpeg -i input.mp4 -af "volume=enable='between(t,1,2)':volume=0" output.mp4

nodejs 流畅的 ffmpeg:

ffmpeg('input.mp4').audioFilters("volume=0:enable='between(t,1,2)'").output('output.mp4')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接