我正试图编写一个Python脚本来搜索使用歌曲数据作为比较基础的重复的mp3/4文件。我的情况涉及许多具有相似文件名称但具有不同ID3标签的mp3/4文件。起初,我尝试循环并使用md5来查找重复的文件(忽略文件名)。当然,这在ID3标签不匹配时不起作用。使用Python访问MP3音乐数据
因此,我正在寻找一种方法来从mp3/4中仅提取音乐数据,以便通过md5运行并找到任何重复项。什么是最好的方式去做这件事?
我正试图编写一个Python脚本来搜索使用歌曲数据作为比较基础的重复的mp3/4文件。我的情况涉及许多具有相似文件名称但具有不同ID3标签的mp3/4文件。起初,我尝试循环并使用md5来查找重复的文件(忽略文件名)。当然,这在ID3标签不匹配时不起作用。使用Python访问MP3音乐数据
因此,我正在寻找一种方法来从mp3/4中仅提取音乐数据,以便通过md5运行并找到任何重复项。什么是最好的方式去做这件事?
这实际上是非常先进的,模糊逻辑类型的东西你问。
这不是一个答案,但看一看这篇文章讨论:Detect duplicate MP3 files with different bitrates and/or different ID3 tags?(它可能有资格作为一个傻瓜居然...这是Python所特有的。)
完全不同的问题。这些文件是具有不同ID3标签的相同MP3的副本,因为iTunes试图变得更加智能并更新ID3标签。音乐中应该没有二元差异,只有元数据。不过,谢谢你的回答。 = - ] – 2010-07-14 21:49:20
使用一些指纹算法。你可能知道MusicBrainz。他们列出了一些指纹算法here。他们现在使用AcoustId,这可能是你应该使用的东西(它很好,而且是免费的)。有能够产生这样的指纹的Chromaprint库。
我写了一个Python module ffmpeg
,它通过FFmpeg进行解码,并提供了一个简单的函数来计算AcoustId指纹(使用Chromaprint)。 Here是一个小的演示(它甚至为这首歌查询MusicBrainz)。
应该很容易建立一些工具,使用它找到所有重复项。
如果音频数据完全相同,指纹将完全相同。如果音频数据相似,它将是相似的。请参阅AcoustId homepage了解更多信息,如果您不只是想检查相等性,您如何计算相似性。
音乐可能(虽然'相同')会有不同的比特率(除非你能确定一切都是无损的),这将使得一个简单的数据比较无用。所以你需要更先进的(可能是统计)技术。我敢肯定,SO上的某个人能够提供一些指示... – ChristopheD 2010-07-14 21:32:52
好的一点,而不是简单的md5 fft频率分析更合适。但是,音量可能不同。那么我想你会寻找两个fft之间的相关性,并期望高相关性?它确实变得棘手,因为一些歌曲可能包含难以察觉的“前景” - 介绍或演讲。 – 2010-07-14 21:36:02
@Hamish:我想知道他是否想把这些视为不同(例如,某首歌与现场演出录制的某首歌对比)。这真的取决于你如何定义“重复”,我想。这成为一个相当有趣的问题。 :) – Faisal 2010-07-14 21:40:16