给一首歌的八个现场版做响度对齐,我用 ffmpeg 而非耳朵

手上有八个现场版,都是同一首歌,来自不同年份的 bootleg。场景:本地存了 1.2GB 的 flac,采样率参差不齐(44.1k 和 48k 混着),音量差异大到我得不停拧旋钮——从 -14 LUFS 到 -8 LUFS 都有。想对比编曲和即兴段落,结果每次切歌都要调音量,比来比去耳朵先累了。

我的做法是先用 ffmpeg 统一到同一个响度,再做切段对比。核心是 loudnorm 滤镜,两遍处理:第一遍只测量,第二遍按测量结果应用。

# 第一遍:只测量,输出到日志
ffmpeg -i live01.flac -af loudnorm=I=-16:TP=-1.5:LRA=11:print_format=json -f null - 2> m01.json

# 第二遍:把测到的值填进去
ffmpeg -i live01.flac -af "loudnorm=I=-16:TP=-1.5:LRA=11:measured_I=-12.3:measured_TP=-0.8:measured_LRA=6.2:measured_thresh=-22.1:offset=0.4:linear=true" -ar 44100 out01.flac

八个文件我写了个循环,用 jq 从第一遍的 json 里抓 measured 字段拼第二遍命令。为什么用两遍:单遍 loudnorm 是动态调整增益,会随段落变化,现场版里鼓点密集的段落会被压得比安静段更狠,对比时听到的差异就不只是演奏差异了。两遍加 linear=true 是尽量做线性增益,保持动态关系。代价是:如果某个文件本身削波严重,线性增益救不回来,只能重采样或者手动降。

哪里会失效:第一,loudnorm 的测量对短文件不稳,我这八个都是四五分钟,勉强够;如果切的是 30 秒片段,测出来的 I 值波动很大,不如直接手动估。第二,bootleg 里常有观众喊叫和掌声,这些噪声会把 LRA 拉高,导致安静段被压得更低;我的处理是先在 audacity 里粗剪掉开头结尾的掌声,再进 ffmpeg。第三,linear=true 在测量的 thresh 和实际动态差太多时会自动退回动态模式,日志里会警告,得看。

统一到 -16 LUFS 之后,切歌不用再动音量,才听出来第三版和第七版的贝斯线其实几乎一样,只是混响不同。

你们对比同一首歌的多个版本时,是统一响度还是保留原始动态?我有点怀疑统一之后反而丢掉了现场混音师的意图。

0
赞同度 100% · 0 条评论 · 8 阅读

0 条评论

支持 Markdown · 回复会实时推送给对方

还没有评论,写下第一条。