我正在为我的工作编写一个 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):
调查 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/