【问题标题】:RMS Normalize ffmpegRMS归一化ffmpeg
【发布时间】:2016-08-09 07:36:51
【问题描述】:

我是 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。

【问题讨论】:

  • 史蒂夫你得到答案了吗?

标签: audio ffmpeg normalize


【解决方案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 过滤器。

【讨论】:

  • 四个相同的 sed 行:你有一个 original.txt 和一个 original1.tmp 但没有 original.tmp ?这四行是想做什么?
  • @Rup,抱歉,我必须在发布之前自己调试脚本。现在我采取了主要思想并自己重写了脚本,现在它不使用文件来保存临时变量
猜你喜欢
  • 1970-01-01
  • 2012-06-18
  • 1970-01-01
  • 2015-07-02
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 2015-11-23
  • 2019-01-13
相关资源
最近更新 更多