概述
FFmpeg的loudnorm滤镜是一个实现了EBU R128标准的音频响度(loudness)归一化滤镜。在音频领域中,响度是指音频的感知音量水平,这与音量的技术度量(比如分贝)略有不同。响度归一化旨在调整音频轨道的响度,使得它们在不同的播放环境下提供一致的听觉体验。
使用loudnorm滤镜可以自动将音频调整到指定的响度目标,符合广播行业对响度的标准化要求。该滤镜特别有用于处理可能响度不一致的多个音频文件,比如电视节目、电影、广告和音乐。
EBU R128是欧洲广播联盟制定响度标准的推荐实践。该标准建议的程序内容响度目标级别为-23 LUFS(Loudness Units Full Scale),而loudnorm滤镜能够根据此标准自动调节音频轨道。
响度归一化
loudnorm滤镜具有许多参数,可以对响度的整个归一化过程进行详细配置。以下是loudnorm常用参数:
- I:设置集成响度(Integrated Loudness)目标,默认值为-24 LUFS。
- LRA:设置响度范围(Loudness Range)目标,用于捕捉音频信号的动态范围,默认值为7 LU。
- TP:设置真峰目标(True Peak),默认值为-2.0 dBTP(分贝相对于True Peak)。
- measured_I、measured_LRA、measured_TP、measured_thresh:这些参数通常由第一次运行loudnorm滤镜时生成,用于在双遍响度归一化过程中的第二遍中使用。
以下是使用loudnorm滤镜的一个基本例子:
ffmpeg -i input.wav -af "loudnorm=I=-24:LRA=7:TP=-2.0" output.wav
这个命令表示:
-i input.wav:指定输入文件。
-af "loudnorm=I=-24:LRA=7:TP=-2.0":对输入音频应用loudnorm滤镜,响度目标设为-24 LUFS,响度范围目标为7 LU,真峰目标设为-2.0 dBTP。
output.wav:归一化响度后的输出文件。
如果需要对音频执行正规的响度归一化,可能需要进行两遍处理:第一遍分析音频特征,第二遍应用这些测量结果来实际调整音频的响度。这种称为"双遍"(two-pass)的方式提供了更准确的结果,适用于专业的音频制作。
two-pass归一化步骤
第一步
先找出整段声音的I、TP、LRA等等的数值,指令如下:
ffmpeg -hide_banner -i in.m4a -filter_complex "loudnorm=print_format=json" -f null /dev/null
输出如下:
{
"input_i" : "-15.30",
"input_tp" : "-1.94",
"input_lra" : "1.80",
"input_thresh" : "-25.36",
"output_i" : "-24.16",
"output_tp" : "-11.06",
"output_lra" : "1.40",
"output_thresh" : "-34.23",
"normalization_type" : "dynamic",
"target_offset" : "0.16"
}
第二步
把第一次处理时得到的input_i、input_tp、input_lra、input_thresh数值填进指令中,接着调整I、TP和LRA的数值:
ffmpeg -i in.m4a -filter_complex "loudnorm=linear=true:I=<I>:TP=<TP>:LRA=<lRA>:measured_I=<input_i>:measured_tp=<input_tp>:measured_LRA=<input_lra>:measured_thresh=<input_thresh>" -ar <sample_rate> out.m4a