audio - 如何计算 ffmpeg astats 波峰因数

标签 audio ffmpeg statistics compression

我正在为我的工作编写一个 ffmpeg 链流程。目的是规范化/压缩大量音频文件(mp3)。
它是在 Python 中完成的,关键部分是这一行:

ffmpeg -y -i "Input.mp3" -codec:a libmp3lame -b:a 96k -af acompressor=threshold=-15dB:ratio=5:attack=0.01:release=1000:knee=2,dynaudnorm=g=3:m=2:p=0.95 "Output.mp3"

python 脚本是完整的并且可以工作,但是音频(录音)的性质非常不同,所以我不能对所有这些都使用相同的参数。

我对 ffmpeg 过滤器 astats 的值进行了一些试验,发现波峰因数(峰值与 RMS 电平的标准比)为以编程方式获得更好的参数提供了很好的引用。

事实上,我看到一个具有良好动态范围声音和平滑形状的录音,获得了大约 9-15 的峰值(compress/normlz 参数会有点保守)。但是波峰在 22-30 左右的音频需要更积极的处理。
(全部凭经验)

有人可以澄清峰值是如何计算的吗?考虑了哪些峰? (为什么平坦因子总是 0?)
或者,如果有人知道如何获得代表声音“平滑度”的值也会很好。

感谢您的想法。

最佳答案

一般来说,波峰因数定义为(Wikipedia):

Crest factor

调查 ffmpeg's source code ,我们看到波峰因数定义为:

p->sigma_x2 ? FFMAX(-p->nmin, p->nmax) / sqrt(p->sigma_x2 / p->nb_samples) : 1)

搁置案件p->sigma_x2 == 0 ,我们看到:
crest_factor = FFMAX(-p->nmin, p->nmax) / sqrt(p->sigma_x2 / p->nb_samples)

与上面的公式相匹配,因为:
  • max(- x_min, + x_max)相当于abs(x_peak)
  • p->sigma_x2指定音频样本的平方和和p->nb_samples对应于音频样本的数量,所以sqrt(p->sigma_x2 / p->nb_samples)RMS value .

  • 希望能帮助到你!

    关于audio - 如何计算 ffmpeg astats 波峰因数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45941888/

    相关文章:

    android - 如何让音乐从接收器而不是扬声器播放?

    iphone - 只要在Xcode中按住按钮,如何使声音循环?

    c++ - 频率-线性仓到对数屏幕空间

    jquery - 音频暂停/播放

    machine-learning - 是否有任何方法可以找到对响应有显着影响的变量值?

    转换 flv1 (flv) -> h264 (libx264) 时出现 FFMPEG 错误

    ffmpeg - 如何使用 ffmpeg 转换整个目录?

    ios - 如何使用 iOS VideoToolbox 和 FFMPEG 硬编码 MP4 流文件?

    r - 在 r 中使用 dplyr 建立组之间的差异

    php - php函数get_browser的可靠性如何?