【问题标题】:Compare two audio files [duplicate]比较两个音频文件[重复]
【发布时间】:2011-03-11 12:24:14
【问题描述】:

基本上,我有很多代表同一首歌的音频文件。然而,其中一些质量比原作更差,还有一些被编辑到不再与原作匹配的地方。我想做的是以编程方式将这些音频文件与原始文件进行比较,看看哪些与那首歌相匹配,无论质量如何。直接比较显然行不通,因为文件质量参差不齐。

我相信这可以通过分析歌曲的结构并与原版进行比较来完成,但我对音频工程一无所知,所以这对我没有多大帮助。所有歌曲的格式相同(MP3)。另外,我使用的是 Python,所以如果有绑定,那就太好了;如果没有,JVM 甚至本地库也可以,只要它在 Linux 上运行并且我能弄清楚如何使用它。

【问题讨论】:

标签: python audio mp3


【解决方案1】:

这实际上不是一项简单的任务。我不认为任何现成的图书馆可以做到这一点。这是一种可能的方法:

  1. 将 mp3 解码为 PCM。
  2. 确保 PCM 数据具有您预先选择的特定采样率(例如 16KHz)。您需要重新采样具有不同采样率的歌曲。不需要高采样率,因为无论如何您都需要进行模糊比较,但过低的采样率会丢失太多细节。
  3. 归一化 PCM 数据(即找到最大样本值并重新调整所有样本,以使幅度最大的样本使用数据格式的整个动态范围,例如,如果样本格式有符号 16 位,则归一化后最大幅度样本的值应为 32767或 -32767)。
  4. 将音频数据拆分为具有固定样本数的帧(例如:每帧 1000 个样本)。
  5. 将每个帧转换为频谱域 (FFT)。
  6. 计算代表两首歌曲的帧序列之间的相关性。如果相关性大于某个阈值,则假设歌曲相同。

Python 库:

一个额外的并发症。您的歌曲在开始时可能有不同长度的静音。所以为了避免漏报,你可能需要一个额外的步骤:

3.1。从头开始扫描 PCM 数据,直到声能超过预定义的阈值。 (例如,使用 10 个样本的滑动窗口计算 RMS,并在超过动态范围的 1% 时停止)。然后丢弃直到此时的所有数据。

【讨论】:

  • PCM 数据是字节数组吧?在第 3 步中,由于我们需要高达 32767 的幅度进行归一化,我相信您会将其转换为整数/双精度数组。如果我错了,请纠正我。另外,我们是否需要在步骤 6 中计算相关性?或者,如果我们只是比较 fft 值并查看它们是否在阈值内呢?
  • @LINGS (3) 假定步骤 (1) 中的 PCM 数据是适当类型的数组(例如 int16 或 float32)。但是如果选择的解码器返回原始字节,那么是的,需要一个转换步骤。
  • @LINGS re step (6):如果您的解决方案必须容忍噪声,那么简单的差异将不起作用,因为诸如咔嗒声或拍手之类的一些噪声会导致 FFT 的巨大差异。不过,综合差异可能会起作用。我不确定相关性是这里最好的比较方法,我没有像我应该做的那样研究它,但是当我实现类似的东西时它工作正常。
【解决方案2】:

首先,您必须更改比较域。分析未压缩文件中的原始样本将一事无成。您的距离测量将基于您从音频样本中提取的一个或多个特征。维基百科列出了Acoustic Fingerprinting 常用的以下功能:

音频指纹通常利用的感知特征包括平均过零率、估计速度、平均频谱、频谱平坦度、一组频段的突出音调和带宽。

我没有适合您的程序化解决方案,但这里有一个 interesting attempt,用于对 YouTube 音频 ID 系统进行逆向工程。它用于版权侵权检测,类似的问题。

【讨论】:

    【解决方案3】:

    复制自that答案:

    老AudioScrobbler 和MusicBrainz 的人们很久以前就研究过同样的问题。目前,可以帮助您完成任务的 Python 项目是 Picard,它将使用 GUID(实际上是其中的几个)标记音频文件(不仅是 MPEG 1 第 3 层文件),从那时起,匹配标签非常简单。

    如果您更喜欢将其作为自己的项目,libofa 可能会有所帮助。 documentation for the Python wrapper 或许对您的帮助最大。

    【讨论】:

    • 我最终使用了 Picard,至少现在是这样。谢谢。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 2012-04-20
    • 2018-11-20
    • 1970-01-01
    相关资源
    最近更新 更多