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(默认) |
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:真峰值上限,防止削波
-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提供了多种均衡器滤镜,我常用的是 equalizer 和 bass/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)
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%。
24.5 知识体系总览
下面这张图把今天讲的滤镜按功能分类整理了一下,方便你对照使用:
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
这个命令做了三件事:
- 先用 afftdn 降噪,去除风声(白噪声模式,强度0.3)
- 再用两个 equalizer 调整音色,去掉低频轰鸣,提升人声清晰度
- 最后用 loudnorm 统一响度
效果怎么样?嗯,甲方听完说「这声音干净多了」。其实说白了,音频处理没有银弹,关键是多听、多试、找到最适合当前素材的参数组合。