提示

返回博客列表

下载的视频音量忽大忽小?用 ffmpeg 抽音频并做响度标准化

下载的视频音量忽大忽小?用 ffmpeg 抽音频并做响度标准化

不知道你有没有这种经历:追一部剧,正片声音小得像蚊子叫,一切到广告或者另一集,又"轰"地一声差点把耳朵震聋。尤其是从不同网站扒下来的视频,有的录的是会议室麦克风,有的带了后期混音,音量标准根本不统一。这篇文章就聊聊怎么用 ffmpeg 把音频抽出来、统一响度,让自己看片不再手忙脚乱调音量。

先搞清楚:响度和音量不是一回事

很多人以为"把声音调大"就是 solution,其实音量(volume)只是振幅的放大,而响度(loudness)才是人耳主观感受到的大小。一段低频很重的音频,数值上峰值很高,听起来却未必"响";一段人声清晰的中频,峰值不高但听得清楚。所以工业界用 LUFS(Loudness Units relative to Full Scale)来衡量,主流标准叫 EBU R128(欧洲)和 ATSC A/85(北美),目标一般落在 -23 LUFS 左右。

第一步:把音频从视频里抽出来

最保真的方式是直接拷贝音轨,不重新编码:

ffmpeg -i input.mp4 -vn -acodec copy output.aac

-vn 不处理视频,-acodec copy 是音频流原样拷贝。如果源音频本身就是 AAC,这样最快。想统一格式(比如都变成 192k 的 mp3)就重编码:

ffmpeg -i input.mp4 -vn -acodec libmp3lame -b:a 192k output.mp3

第二步:用 loudnorm 做响度标准化

ffmpeg 内置 loudnorm 滤镜,实现的就是 EBU R128。单趟(single pass)最省事:

ffmpeg -i input.mp4 -af loudnorm=I=-23:TP=-1.5:LRA=11 -ar 48000 -ac 2 output.mp4

I 是目标整体响度(LUFS),TP 是真峰限制(dBTP),LRA 是响度范围。这套参数能应付绝大多数场景。

但单趟是"边扫边调",遇到动态很大的片子偶尔会抽抽。双趟(two pass)更稳:

# 第一趟:只测量,结果打印成 json
ffmpeg -i input.mp4 -af loudnorm=I=-23:TP=-1.5:LRA=11:print_format=json -f null -
# 第二趟:把 measured_xxx 填回去
ffmpeg -i input.mp4 -af loudnorm=I=-23:TP=-1.5:LRA=11:measured_I=-22.8:measured_TP=-1.2:measured_LRA=10.5:measured_thresh=-33.4:offset=0.3 -ar 48000 -ac 2 output.mp4

几个容易踩的坑

现象 可能原因 解决办法
处理后发闷 采样率被改成 44100 显式加 -ar 48000
左右声道不均衡 单声道被强扩成双声道 -ac 1 或先 pan 滤镜
峰值爆音 没限制 TP 保留 TP=-1.5 并加 alimiter
处理极慢 双趟 + 重编码 批量用单趟,关键片用双趟

常见问题

Q:能不能只改音频不动画质? 能。用 -c:v copy -af loudnorm... 只重编码音频,画质零损失。

Q:loudnorm 和 volume 滤镜有什么区别? volume 只是线性乘增益,会一起放大噪声和爆音;loudnorm 按响度标准动态压缩/扩展,听感更自然。

Q:手机上听,目标响度要调吗? 流媒体平台一般建议 -14 LUFS 左右,比电视标准高。自己存着看保持 -23 也没问题,只是相对"轻"一点。

想亲手试试?用 VidDown 一键解析下载

粘贴视频链接即可解析,多平台支持、网页端即用;下载桌面客户端解锁海外平台本地解析,开通会员更享不限次下载。

顶部