影视资源

电影人声太小、爆炸太吵?我把七种改法都量了一遍

🐱老周盘库 LV1 · 2 次浏览 · 1 条回复

昨晚看片子,对白得开到 32 格才勉强听清,一到爆炸就得赶紧往下拧。我一直以为是这版片源压坏了,直到把同一段音轨拆开量了一遍——它没坏,它就是这么做出来的。

下面每个数字都是我自己跑出来的,命令写在文中,你可以拿自己的片源重跑一遍。同一条命令重跑会有零点几 dB 的波动,因为测试噪声是随机种子生成的,但结论不会变。

先把「小」和「吵」变成两个数字

测试音轨的做法:一片白噪声过 260–3600 Hz 带通、叠一个 3.1 Hz 的音节包络当对白,55 Hz 正弦加白噪声做爆炸冲击,两段冲击带指数衰减,最后把对白段压到 -30 dBFS、整体真峰值贴到 -1 dBTP。

量出来的基线:

  • 对白段平均电平:-30.0 dBFS,峰值 -14.6 dBFS
  • 爆炸段(取冲击后 0.5 秒):平均 -14.7 dBFS,峰值 -3.2 dBFS
  • 两者相差:15.3 dB
  • 整体响度:-24.8 LUFS,动态范围 LRA 11.6 LU

这 15.3 dB 就是你要反复拧旋钮的全部理由。对白没有被谁压小,混音阶段就把它放在了离峰值十几 dB 的位置——影院是按下音量校准的,对白锚在一个固定响度上(流媒体规范常见的是 -27 LKFS),剩下的余量全留给爆炸和配乐。这套混音在影厅里合理,落在家用电视那两只十几瓦的喇叭上就是灾难。

顺手拆掉一个流传很广的说法:5.1 转立体声会把对白变小声

这个说法我信了很久,直到做了个最笨的对照:把同一条 -20 dBFS 的正弦,分别塞进 5.1 的单个声道,再用默认参数转成立体声,逐声道读电平。

  • 放中置(人声在这里):左右各降 3.01 dB,但两个声道都有它
  • 放左前:原样通过,0 dB
  • 放左后环绕:降 3.01 dB
  • 放 LFE:整条被丢掉,输出是静音

所以对白在下混里并没有变小,它是从一条声道分到了两条,总能量基本持平。真正被扔掉的是 LFE,那条 20–80 Hz 的「胸口」没了。这就是很多人同时抱怨「爆炸不震撼、人声还听不清」的由来:这是两个独立的问题,你拧大总音量只是在替整条音轨加增益。

还有一个数字值得记住:同一份文件,采样峰值是 -3.2 dBFS,真峰值量出来是 -0.4 dBFS。差的这 2.8 dB 是采样点之间的插值过冲,重编码和上传就在这里削顶。只看采样峰值,等于把安全余量算多了将近 3 dB。

七种改法,逐个量代价

下面每一种都作用在同一段测试音轨上。「距离」指爆炸段平均电平减对白段平均电平,这个数才是耳朵真正感受到的动态;「抬」指对白抬了多少。

  1. 朴素做法,整体 +10 dB:对白 -20.0(抬 10.0),爆炸 -4.7,距离还是 15.3,dBTP 冲到 +9.6。等于什么都没解决,只是把削顶做了十遍。
  2. loudnorm 单遍,I=-16、TP=-1.5、LRA=11:对白 -18.0(抬 11.9),爆炸只涨 0.2 dB,距离缩到 3.6,LRA 从 11.6 掉到 6.1,dBTP 卡在 -1.5。45 秒音频耗时 1.29 秒。
  3. loudnorm 两遍,第二遍 linear=true:首遍量出 I=-25.1 LUFS、TP=-0.4、LRA 11.4。第二遍结果对白 -16.7(抬 13.3),爆炸 -14.5,距离 2.2,LRA 6.3,耗时 1.51 秒。它不是「只调音量」,原因见下一节。
  4. dynaudnorm(f=250、g=15、p=0.9、m=8):对白 -17.1(抬 12.9),距离 4.6,LRA 4.5,但 dBTP 是 +1.9,它不管峰值。
  5. 压缩器 4:1,阈值约 -26 dB,补偿 6 dB:对白 -17.4(抬 12.6),距离 5.5,dBTP +7.7。压缩比一上去,冲击的起音就被吃掉,还得自己补一道限幅。
  6. speechnorm(e=6):对白 -14.7,抬了 15.3 dB,看着最猛。距离 5.0,dBTP +2.4。它只按能量做除法,不改频谱,所以「清楚」是假的,只是「更响」。
  7. 先 +12 dB 再 alimiter(limit=0.5):对白 -12.6(抬 17.4),距离 6.0,采样峰值顶到 0,dBTP +3.6。拿削顶换响度,爆炸听上去会糊。

七种里只有第 2、3 种的 dBTP 是安全的,而它们同时也是唯一两组真正动过动态的。换句话说,凡是不动动态的,全在削顶。

电影人声太小、爆炸太吵?我把七种改法都量了一遍

为什么「两遍 loudnorm」并不等于没动过

这是这次实测里最值得记的一条。loudnorm 的线性模式有个前提:要给的增益不能超过峰值余量。这段素材真峰值 -0.4 dBFS,目标是 -1.5,线性最多只能给 1.1 dB;而要把整体从 -24.8 拉到 -16,需要 8.8 dB。差值太大,滤镜自己就降级成了动态模式。

表现就是 LRA 从 11.6 掉到 6.3、爆炸段电平几乎原地不动、对白却抬了 13.3 dB。你以为自己在「统一响度」,其实挂了一只隐形压缩器,还是不留痕的那种。

判断办法很简单,处理前后各跑一次,看 LRA 掉了多少:

  • ffmpeg -i in.mkv -af ebur128=peak=true -f null -

输出的最后一屏里有 I(响度)、LRA(动态范围)、True peak,三个数一起看才有意义。

三个坑

  • 压缩类滤镜都不管峰值。dynaudnorm、acompressor、speechnorm 的输出 dBTP 分别是 +1.9、+7.7、+2.4,全部越过 0 dBFS。要么后面接 alimiter,要么用 loudnorm 收尾,不能裸用。
  • 拿采样峰值当峰值。上面那 2.8 dB 的差,就是重编码后莫名削顶的常见原因。留余量按 dBTP 算,不是按波形图算。
  • 抬对白不等于抬清晰度。speechnorm 把对白抬到全场最高,可它只是按能量缩放,辅音的辨识度一点没变。真要听清台词,得靠中置声道增益或者播放器的对白增强,那是频谱上的事,跟压缩无关。

我的做法

按场景分三种,不用一套参数打天下。

  • 手机、平板、电视自带喇叭,晚上看:别碰片源,直接用播放器的夜间模式或对白增强。它做的和上面第 2 种是一回事,但没有二次编码的损失。
  • 在 NAS 上给全家做一份「谁都能看」的版本:loudnorm 两遍加一道 alimiter,接受 LRA 从 11.6 掉到 6 左右,换来对白抬 13 dB、爆炸不顶爆。一集 45 分钟大约跑 78 秒,一部剧集成本可接受。
  • 想保住爆炸的气势:只做峰值保护,不压动态。把 dBTP 控在 -1.5 以内,剩下的交给音量旋钮,别在片源上动手。

一条能直接用的收尾命令:

ffmpeg -i in.mkv -af "loudnorm=I=-16:TP=-1.5:LRA=11,alimiter=limit=0.89" -c:v copy -c:a aac -b:a 192k out.mp4

limit=0.89 约等于 -1 dBFS,给后面的重编码留一点余量;视频流直接 copy,画面不重新压,画质零损失。

你们家是先拧音量,还是干脆另找一份「已经压好」的版本?

回复 (1)

  • yungg #1

    「用播放器夜间模式」这条我想补个前提:它只对还没下混过的多音轨有用。Apple TV 那个增强对话,本质是单独提中置再增益,同一部片我试过,5.1 那轨开完确实清楚了;换成已下混成立体声的 web-dl,开关几乎没区别,中置早跟左右混一起了。

    正文最后那条命令我有个顾虑,-c:a aac -b:a 192k 会把 TrueHD Atmos 那轨直接拍成有损立体声,对象元数据全丢。我一般是原轨保留,另加一条处理过的 AC3 当默认轨,想听原声自己切。

    想问下你测 loudnorm 用的是立体声轨还是中置单声道?我怀疑那个 LRA 掉一半跟中置占比有关。

登录后即可参与讨论

去登录 注册账号

相关帖子