RMS标准化ffmpeg

ste*_*eve 8 audio ffmpeg normalize

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

我已经使用了dynaudnorm,但无法获得所需的输出,我相信这是因为它使用了与分析整个文件相对的框架.

为了RMS规范化,我的想法是使用条件语句来创建一个过滤器,它可以自动读取音频文件的RMS(平均)电平,然后自动将RMS(平均)电平设置为指定的dB电平.

理论范例:

ffmpeg -i (inputfilename) -af "normalize_rms=-20dB" (outputfilename)
Run Code Online (Sandbox Code Playgroud)

条件声明和示例的说明:

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

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

小智 2

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

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

如果您只想标准化感知响度,ffmpeg文档建议使用滤波器\xe2\x80\x8bloudnorm

\n