2017-08-29 51 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