RMS标准化FFmpeg

8
我是一名新手,希望能够创建一个脚本,将音频文件的RMS标准化为指定的RMS(平均)分贝级别。请问有人可以展示如何实现吗?
我已经使用了dynaudnorm,但无法得到所需的输出。我认为原因是它使用的是帧而不是分析整个文件。
为了进行RMS标准化,我的想法是使用条件语句创建一个过滤器,可以自动读取音频文件的RMS(平均)水平,然后自动将RMS(平均)水平设置为指定的分贝级别。
理论上的例子:
ffmpeg -i (inputfilename) -af "normalize_rms=-20dB" (outputfilename)

条件语句解释及示例:

  • 第一步:运行astats或volumedetect计算RMS电平。

  • 第二步:如果RMS电平=X dB,则添加Y dB电平以匹配用户指定的dB电平。
    例如:如果RMS电平为-30dB,用户指定的RMS电平为-20dB,则添加10dB。


史蒂夫,你得到了你的答案吗? - jameshwart lopez
1个回答

2
这是一个 bash 脚本,用于解析音频文件的音量,并根据其音量进行归一化处理。主要思路来自于类似的 SO 问题 的答案,其中还讨论了其他方法。
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文档建议使用loudnorm过滤器。


这四行相同的sed命令:你有一个original.txt和一个original1.tmp,但没有original.tmp?这四行命令是在尝试做什么? - Rup
@Rup,抱歉,在发布之前我不得不自己调试脚本。现在我采用了主要思路并重新编写了脚本,现在它不再使用文件保存临时变量。 - user5247008

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接