如何以编程方式比较mp3

时间:2009-02-15 14:11:45

标签: audio mp3 compare

我希望能够以编程方式比较mp3。我不知道的问题是什么。 页眉?直方图?渠道?有没有人有过这个课程的经验?

8 个答案:

答案 0 :(得分:17)

我在音频指纹识别上写了my master's thesis。本文列出了一些开源解决方案,用于比较音乐听起来的问题,并提供它们之间的性能比较。可能有点矫枉过正,但那里有一些非常不错的应用程序。

如果您只想按标记数据进行比较,则需要查看的标准为ID3。基本上有两个版本,第一个是非常简单的(ID3v1),由一个MP3结尾的128字节块组成。 ID3v2在MP3的开头放置一个较大的可变大小的块。

答案 1 :(得分:5)

  
    

我希望能够以编程方式比较mp3

  

我有同样的问题。我发现itunes改变了我的许多亚马逊MP3下载,更改了时间/日期标记,文件大小以及MD5签名。我的备份突然有很多接近重复的文件。

当我做了VIM差异时,我可以看到更改仅限于文件的非常小的部分。即使在近距离缩放时,Audacity中的文件看起来也是相同的。

我的解决方案是创建mp3的无头WAV转储,然后比较每个WAV的MD5签名。 FFMPEG可以很容易地进行翻译。

ffmpeg -y -i $mp3 $mp3.wav;
md5sum $mp3.wav

我创建了一个哈希,MD5作为指向原始MP3文件规范的键。将wav文件放在SSD上以提高速度。

蛮力,但它有效。

答案 2 :(得分:4)

我想你可以采取多种方法:

1。比较标签

您可以比较mp3标签中保存的数据。标签以ID3格式保存。有许多图书馆可以帮助您访问代码,tagLib是一种受欢迎的选择(TagLib Sharp适用于.net应用)

2。声学指纹

这是迄今为止最强大的方法,无论压缩甚至格式如何,您都可以找到匹配项。从文件中的实际音频创建唯一指纹,允许识别歌曲 echoprint是一个开源示例。

3。从文件

创建哈希

这是一种更快捷的方法,可让您查找内容完全匹配的文件。


进一步阅读:

  • 这里有一篇有趣的MSDN文章,关于管理mp3集合(包括阅读标签): link text(这是基本的,但可能仍然有用。)

  • 这里有一些文件格式的描述: link text

答案 3 :(得分:3)

比较是什么意思?元数据(作者,标题等),音频数据?出于什么目的?

比较音频数据的流行和基本方法是计算某些光谱特征的某种距离,例如MFCC:

http://en.wikipedia.org/wiki/Mel_frequency_cepstral_coefficient

答案 4 :(得分:2)

为了更好地回答您的问题,我认为我们需要确切地知道您的目标。

如果您想比较实际的歌曲,musicDNS有一个能够创建音频指纹的库。可以找到名为libOFA的库here。该指纹识别系统由例如musicbrainz用于将数字音频文件与其数据库匹配。理论上,您可以使用它来比较两个不同的数字文件。

如果你想比较标签数据(id3v1 / id3v2),有很多库可以为你做这件事,提到了taglib,libmpg123也有自己的函数来提取标签数据。

libOFA方法的好处在于,您可以将不同的格式相互比较,因为指纹识别是在音频本身上完成的。

答案 5 :(得分:0)

Chromaprint似乎可以满足您的需求。它将PCM数据转换成音频指纹,然后可以用来比较。

他们有一个C API库(尽管它实际上是用C ++编写的),一个python前端,还有一些实用程序可以将结果转换为JSON,这意味着您可以使用另一种语言来处理数据。不过,我认为它们本身不提供比较功能。

另外,如果您使用的是Linux系统,则很可能会找到用于它的软件包。

答案 6 :(得分:-1)

我经常在linux上使用fdupes来查找重复文件。 fdupes使用md5校验和。

答案 7 :(得分:-1)

如果你只想根据标签比较mp3,我建议taglib