使用Python访问MP3音乐数据

5 投票
3 回答
1688 浏览
提问于 2025-04-16 01:19

我正在尝试写一个Python脚本,用来查找重复的mp3或mp4文件,比较的依据是歌曲的数据。我的情况是有很多文件名相似的mp3和mp4文件,但它们的ID3标签却不同。一开始我尝试通过循环和md5来查找重复文件(不考虑文件名)。当然,当ID3标签不匹配时,这种方法就不管用了。

因此,我想找到一种方法,只提取mp3或mp4中的音乐数据,然后用md5来查找重复的文件。请问有什么好的方法可以做到这一点呢?

3 个回答

0

你问的问题其实涉及到比较高级的模糊逻辑相关内容。

这不是一个直接的回答,但你可以看看这篇文章里的讨论:如何检测不同比特率和/或不同ID3标签的重复MP3文件?(其实这可能算是重复的问题……而且它还特别针对Python。)

1

你可以使用一些指纹算法。你可能听说过 MusicBrainz,他们在 这里 列出了一些指纹算法。目前他们使用的是 AcoustId,这个是你也可以考虑的选择(它很好用而且是免费的)。还有一个叫 Chromaprint 的库,可以用来生成这样的指纹。

我写了一个 Python模块 ffmpeg,它通过 FFmpeg 来解码,并提供了一个简单的函数来计算 AcoustId 指纹(使用 Chromaprint)。这里 有一个小示例(它甚至可以查询 MusicBrainz 来找这首歌)。

用这些工具来找出重复的音频应该很简单。

如果音频数据完全相同,指纹就会完全一样;如果音频数据相似,指纹也会相似。如果你不只是想检查是否相等,可以查看 AcoustId 的主页,了解如何计算相似度。

4

试试使用 id3-py 或者 mutagen 来去掉所有的标签(包括ID3v1和ID3v2,这两种标签可能会在同一个文件里),然后对结果计算MD5值。

假设iTunes没有对文件做其他修改,除了标签部分,那么它们应该是完全一样的。不过,如果进行了转码,这种方法就不适用了。

撰写回答