24、音频滤镜:音量调整、降噪、均衡器、延迟效果等常用音频滤镜

音频滤镜这块,说实话是FFmpeg里我最常用的功能之一。做音视频处理这么多年,我遇到过太多「画面完美、声音翻车」的项目了。音量忽大忽小、背景嗡嗡响、人声像隔着一层棉被……这些问题,靠的就是今天要讲的这几个滤镜。

咱们一个一个来。我会把每个滤镜的核心参数、使用场景、还有我踩过的坑都交代清楚。

24.1 音量调整:volume 和 loudnorm

音量调整是最基础的。但你别小看它,调音量不是简单拉个滑块那么简单。

24.1.1 volume 滤镜

这个滤镜用来直接改变音频的增益。语法很简单:

ffmpeg -i input.mp3 -af "volume=2.0" output.mp3

上面这个命令把音量放大到原来的2倍(也就是+6dB)。

我个人习惯用dB值来调,更精确:

ffmpeg -i input.mp3 -af "volume=+3dB" output.mp3

参数说明:

参数 说明 示例
volume 倍数或dB值 volume=0.5 或 volume=-6dB
precision 精度控制(fixed/float/double) precision=float
eval 是否实时评估表达式 eval=once(默认)
注意: 我曾经在项目中直接给一段已经削波的音频加了+6dB增益,结果出来的全是爆音。调整音量前,最好先用 volumedetect 滤镜看看原始音频的峰值和RMS。

24.1.2 loudnorm 滤镜(响度标准化)

这个滤镜我强烈推荐。它遵循ITU-R BS.1770标准,能把不同来源的音频统一到同一个响度水平。比如你做播客,嘉宾的录音音量不一样,用这个就能拉平。

ffmpeg -i input.mp3 -af "loudnorm=I=-16:LRA=11:TP=-1.5" output.mp3

参数含义:

  • I:目标综合响度(单位LUFS),一般播客用-16,音乐用-14
  • LRA:响度范围,控制动态范围
  • TP:真峰值上限,防止削波
我的经验: loudnorm 第一次跑的时候会做一次分析,第二次才真正处理。你可以先用 -f null 跑一遍看日志里的测量值,再决定目标参数。这样更稳。

24.2 降噪:anlmdn 和 afftdn

降噪是音频处理里最头疼的事。FFmpeg提供了两个主要滤镜:anlmdn(非局部均值降噪)和 afftdn(FFT域降噪)。

24.2.1 anlmdn 滤镜

这个适合去除稳态噪声,比如空调声、风扇声。它基于图像处理里的非局部均值算法,效果比较自然。

ffmpeg -i noisy.wav -af "anlmdn=s=0.5:p=0.5:r=0.02" output.wav

参数:

  • s:搜索半径(默认0.5秒)
  • p:补丁持续时间(默认0.5秒)
  • r:降噪强度(默认0.02)

避坑指南: 我曾经在降噪时把 r 值设到0.1,结果人声变得像在水里说话一样,全是「水声」伪影。建议从0.01开始慢慢往上加,边听边调。

24.2.2 afftdn 滤镜

这个滤镜基于FFT变换,适合去除宽带噪声。它有个很实用的功能——自动噪声检测。

ffmpeg -i noisy.wav -af "afftdn=nr=0.5:nf=-20" output.wav

参数:

  • nr:降噪系数(0-1,越大降得越狠)
  • nf:噪声底噪(dB,-20表示低于-20dB的视为噪声)
  • nt:噪声类型(w=白噪声,p=粉红噪声,v=语音噪声)

你想想看,如果环境噪声是空调那种低频嗡嗡声,选粉红噪声模式效果更好。

24.3 均衡器:equalizer 和 bass/treble

均衡器用来调整不同频段的音量。FFmpeg提供了多种均衡器滤镜,我常用的是 equalizerbass/treble

24.3.1 equalizer 滤镜

这是一个参数均衡器,可以精确控制中心频率、带宽和增益。

ffmpeg -i input.mp3 -af "equalizer=f=1000:t=q:w=1:g=+3" output.mp3

参数:

  • f:中心频率(Hz)
  • t:滤波器类型(q=品质因数,o=八度,s=斜率)
  • w:带宽(取决于t参数)
  • g:增益(dB)

多个均衡器可以串联使用:

ffmpeg -i input.mp3 -af "equalizer=f=100:t=q:w=1:g=-3,equalizer=f=3000:t=q:w=1:g=+2" output.mp3

上面这个命令把100Hz降低了3dB,把3000Hz提升了2dB。说白了就是去点闷声,加点清晰度。

24.3.2 bass 和 treble 滤镜

这两个更直观,适合快速调整高低频:

ffmpeg -i input.mp3 -af "bass=g=+4,treble=g=-2" output.mp3
  • bass:低频增益(默认中心频率100Hz)
  • treble:高频增益(默认中心频率3000Hz)
小技巧: 做语音处理时,我习惯把100-300Hz稍微降一点(-2到-3dB),把2-4kHz提一点(+1到+2dB),人声会变得很「透」。但别调太多,否则听起来会「假」。

24.4 延迟效果:adelay 和 aecho

延迟效果在音频创意处理里很常见。FFmpeg提供了两个主要滤镜:adelay(简单延迟)和 aecho(回声效果)。

24.4.1 adelay 滤镜

这个滤镜给音频添加延迟,可以分别控制左右声道:

ffmpeg -i input.mp3 -af "adelay=500|500" output.mp3

上面这个命令给左右声道都延迟500毫秒。你也可以只延迟一个声道:

ffmpeg -i input.mp3 -af "adelay=0|300" output.mp3

这个在立体声扩展里很常用——左右声道不同延迟,听起来空间感更强。

24.4.2 aecho 滤镜

回声效果,模拟声音在空间里反射的效果:

ffmpeg -i input.mp3 -af "aecho=0.8:0.9:1000|1500:0.3|0.2" output.mp3

参数格式:aecho=输入增益:输出增益:延迟时间(ms):衰减系数

多个回声用竖线分隔。上面这个命令模拟了两个反射声,一个延迟1秒衰减到30%,一个延迟1.5秒衰减到20%。

注意: 回声效果很容易做过头。我刚开始玩的时候,把衰减系数设到0.5,延迟设到2000ms,结果听起来像在山洞里录的,完全没法用。建议衰减系数不要超过0.3,延迟不要超过500ms,除非你刻意要那种「空旷感」。

24.5 知识体系总览

下面这张图把今天讲的滤镜按功能分类整理了一下,方便你对照使用:

音频滤镜知识体系 音量调整 降噪 均衡器 延迟效果 volume 滤镜 loudnorm 响度标准化 anlmdn 非局部均值 afftdn FFT域降噪 equalizer 参数均衡 bass/treble 高低频 adelay 简单延迟 aecho 回声效果 使用建议 • 音量调整:先用 volumedetect 分析,再用 loudnorm 标准化 • 降噪:稳态噪声用 anlmdn,宽带噪声用 afftdn,强度从低往高调 • 均衡器:语音处理重点在100-300Hz(降)和2-4kHz(升) • 延迟效果:衰减系数不超过0.3,延迟不超过500ms(除非刻意)

24.6 实战组合案例

最后,我分享一个实际项目中用到的组合命令。当时处理一段户外采访录音,有风声、有音量忽大忽小的问题:

ffmpeg -i outdoor_interview.wav \
  -af "afftdn=nr=0.3:nf=-25:nt=w, \
       equalizer=f=120:t=q:w=1:g=-4, \
       equalizer=f=2500:t=q:w=1:g=+2, \
       loudnorm=I=-16:LRA=11:TP=-1.5" \
  output_clean.wav

这个命令做了三件事:

  1. 先用 afftdn 降噪,去除风声(白噪声模式,强度0.3)
  2. 再用两个 equalizer 调整音色,去掉低频轰鸣,提升人声清晰度
  3. 最后用 loudnorm 统一响度

效果怎么样?嗯,甲方听完说「这声音干净多了」。其实说白了,音频处理没有银弹,关键是多听、多试、找到最适合当前素材的参数组合。


公众号:蓝海资料掘金营,微信deep3321