RMS标准化ffmpeg

时间:2016-04-17 16:32:29

标签: audio ffmpeg normalize

我是ffmpeg的新手,想创建一个可以将RMS规范化音频文件到指定RMS(平均值)dB级别的脚本。有人可以说明如何做到这一点?

我使用了dynaudnorm,但无法获得所需的输出,我相信这是因为它使用了与分析整个文件相对应的帧。

要对RMS进行标准化,我的想法是使用条件语句创建一个过滤器,该过滤器可以自动读取音频文件的RMS(平均值)级别,然后自动将RMS(平均)级别设置为指定的dB级别。

理论范例:

ffmpeg -i (inputfilename) -af "normalize_rms=-20dB" (outputfilename)

条件声明和示例的说明:

  • 通过1:运行astats或volumedetect来计算RMS级别。

  • 通过2:如果RMS级别= X dB,则添加Y dB级别以匹配用户指定的dB级别。
    示例:如果RMS电平= -30dB,用户指定的RMS电平= -20dB,则加10dB。

1 个答案:

答案 0 :(得分:1)

这是一个bash脚本,用于解析音频文件卷,然后根据音量对其进行标准化。主要思想来自对类似SO question的回答,其中还讨论了其他方法。

sound_info="$(ffmpeg -i sound.mp3 -af volumedetect -f null -y nul $1 2>&1)"
max_volume_line="$(echo "$sound_info" | grep 'max_volume')"
max_volume_line="$(echo "$max_volume_line" | grep -Po "max_volume:\s+\S+\s+dB")"
volume="$(echo "$max_volume_line" | grep -Po "[-|+]?\d+\.?\d*")"
ffmpeg -i sound.mp3 -af "volume=$volume" normalized_sound.mp3

如果您希望将感知响度标准化,ffmpeg文档suggests to use ​loudnorm过滤器。