我是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。
答案 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
过滤器。