2017-08-29 50 views
0

我正在为我的工作编写ffmpeg链进程脚本。目标是正常化/压缩很多音频文件(mp3)。 它在Python完成,关键的部分是线:如何计算ffmpeg astats波峰因数

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脚本是完整和工作,但音频(录音)的性质有很大的不同,所以我不能使用相同的params用于在他们全部。

我就与ffmpeg的过滤器astats值一些尝试,我发现波峰因数(峰RMS水平的标准比)给了一个很好的参考,以编程方式获得更好的PARAMS。

事实上,我看到一个具有良好动态范围声音和平滑形状的录音,可获得9-15的峰值(compress/normlz params将以某种方式保守)。但拥有22-30左右波峰的音频需要更积极的处理。 (全部凭经验)

有人可以澄清如何真正计算波峰值?考虑到哪些高峰? (为什么平面因子总是0?) 或者如果有人知道如何得到代表声音的平滑度的值也会很好。

感谢您的想法。

回答

0

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

Crest factor

展望ffmpeg's source code,我们看到,波峰因数被定义为:

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

撇开我们看到:

crest_factor = FFMAX(-p->nmin, p->nmax)/sqrt(p->sigma_x2/p->nb_samples) 
012 ,

其中式匹配上面给出的是:

  • max(- x_min, + x_max)相当于abs(x_peak)
  • p->sigma_x2指定音频样本的平方的总和与p->nb_samples对应于音频样本的数目,所以sqrt(p->sigma_x2/p->nb_samples)RMS value

希望它有帮助!

+0

所以,如果我说得对,那么在峰值分布方式上就不存在歧视。 那么限制循环寻找最佳参数是相对有用的。我想我需要更多'智能'度量曲线 – FranGar

+0

非常感谢,编辑时间已过期。 – FranGar

+0

@FranGar是的,没有时间歧视/整合期,如果这是你想知道的。也许你可以把你的音频文件分成小块并分别处理它们中的每一个? – filaton