如何在Python中唯一标识媒体文件的内容,而不是元数据?

时间:2012-12-09 05:41:23

标签: python algorithm audio mp3 flac

我有一系列媒体文件,主要是音乐,其中大部分都是多年前从CD导入的。该集合已经多次在不同的媒体播放器,不同的文件系统,不同的计算机等之间传输。在这个过程中,一些曲目被意外复制。我也一直在努力策划这些元数据并获得正确标记的所有内容,因为当它大部分最初导入时,我没有花哨的媒体播放软件,甚至没有意识到ID3标签表明一切都只是“跟踪经典专辑“专辑”中的%d“。

这会产生一种情况,我有一些文件包含最新的元数据,但是我要删除的同一媒体文件的“重复”,其元数据尚未正确更新。由于元数据存在于文件中,因此这些文件的内容现在不同,liten2之类的工具不起作用。

我的问题是:是否有一个我可以使用的库,可以方便地提取仅媒体内容的唯一识别指纹(可能是SHA-1哈希,但这不是硬性要求)该文件,忽略元数据?如果是这样,我该如何使用它?

3 个答案:

答案 0 :(得分:4)

Echoprint是一种通过其内容指纹音频的免费方式 - 即它不依赖于元数据,也不依赖于字节精确的数据匹配。他们的常见问题解答有一个条目"I want to deduplicate a big collection"

我认为它的核心本身不是python而是Web API - 但它们提供了pyechonest库。

答案 1 :(得分:3)

您可能需要深入了解音频文件(mp3,avi,mpg,ogg等)的文件格式规范。对于mp3,这将丢弃所有ID3v2元数据块。 在文件内部识别那些实际编码音频信息然后散列这些块以进行比较的块。请记住,如果您有两个不同格式的相同轨道的文件,它们将不会被识别为同一个文件。此外,如果您以相同的格式使用相同的曲目两次,但例如不同的比特率,它们也不会相同。

答案 2 :(得分:-1)

如何(暂时)将文件转换为WAV格式并比较它们的哈希值?应删除ID3标签。 有很多工具可以做到这一点,将这个过程嵌入到脚本中应该不会太困难。