测量音频“响度”:RMS与LUFS

时间:2019-12-20 18:12:16

标签: python audio volume spectrogram librosa

我正在尝试测量电视内容的各种片段(约2-40秒)的“响度”。我对内容的相对响度很感兴趣-人们在哪个场景中大喊大声还是在窃窃私语,大声的音乐还是在安静的场景等。我认为这意味着我对捕获增益(输入响度)而不是音量(输出响度)感兴趣)...

我用python尝试了两种方法:

1)librosa的RMS:          np.mean(librosa.feature.rms(spectrogram, center=True).T, axis=0)

2)pyloudnorm :(它实现了ITU-R BS.1770-4响度算法(LUFS))

          `meter = pyln.Meter(samplerate)
          loudness = meter.integrated_loudness(waveform)`

当我比较两者的结果时,它们有时是对齐的,但常常是不同的(同一篇文章显示的RMS相对较高,但响度较低,反之亦然)。更重要的是,尽管它们似乎都可以解决某些问题,但它们似乎都不是电视中即将出现的情况的非常准确的表示。我想知道是否需要采取一些步骤来过滤掉一些未被感知但会以某种方式影响这些指标的频率,或者我是否只是缺少一些重要的东西?谢谢!

1 个答案:

答案 0 :(得分:0)

响度,感知的声音有多大,可能非常棘手。众所周知,它与频率有关,我们对中间频率范围更加敏感。关于幅度,它是非线性的。在某个时候两倍。在小范围内还存在与时间有关的效果,突然的大声声音会导致后面的声音显得比以前的声音不在那儿声音大(临时掩盖)。从长远来看-我们倾向于适应逐渐增加的体积(脱敏)。我们倾向于滤除几乎没有信息(例如静态/重复性噪声)的声音。等等

您至少应该应用频率加权。通常使用A加权https://en.m.wikipedia.org/wiki/A-weighting。这可以通过对librosa的STFT频谱图进行加权来完成。然后,您可以计算该值的RMS。您还应该将其转换为Desibel。