2008-10-21 93 views
3

我有两个包含〜20 GB音乐文件(主要是mp3,一些ogg)的目录,我想检测所有重复的歌曲。有两个复杂因素:检测重复的音乐文件

  1. 歌曲在两个目录中可能有不同的文件名。
  2. 包含同一首歌曲的两个文件可能具有不同的ID3标签,因此具有不同的校验和。

解决此问题的好方法是什么?

+0

这与Ron Jeffries/Chet Hendriksen车间问题完全相同!你真的有这个问题吗?或者你想完成车间代码? – tvanfosson 2008-10-21 19:38:34

+0

我真的有这个问题。我将所有音乐导入iTunes,所以现在我有了旧的音乐目录和iTunes目录。基本上我想知道我的旧音乐目录中的哪些文件没有进入iTunes ... – JesperE 2008-10-21 20:56:11

+0

为什么不发送Ron或Chet一个音符并询问他们如何解决它?我记得,我的解决方案与名称格式有关。 http://www.xprogramming.com/或http://www.hendricksonxp.com/ – tvanfosson 2008-10-22 01:05:57

回答

4

我在过去走了关于这个问题的方法是使用来自音乐IP genpuids。封闭源代码软件,无论格式创建一个文件的音频指纹,ID3,校验等

更多信息,可以发现here

这将确保最积极的金额重复的匹配,并尽量减少误报。它也可以正确地标记不正确的ID3标签。

1

ID3/OGG-equiv艺术家和歌曲元标签是否准确?如果他们是,你可以使用这些。

编辑:如果他们不是,也许他们可能会成为...如果你只处理整个专辑,有几个工具,将获得所有的标签数据根据轨道数量和他们的长度。

如果您正在处理专辑和单个文件的混合,它会变得更加复杂。

+0

也许,但我不认为我可以依靠他们。 – JesperE 2008-10-21 19:39:33

1

如果您有一个可以解析文件的库,您可以在音频数据上运行哈希。如果这首歌是不同的翻唱或重新压缩/转码/等等,这不会对你有所帮助。

+0

在处理前端会有点怪异...只是获得大量的ID3需要一个年龄,但在顶部散列音频数据? Eeek! – Oli 2008-10-21 19:45:59

0

也许Last.fm API将是有用的。它包含一个track.getInfo调用,该调用返回XML,包括曲目长度,艺术家姓名,曲目编号等。您可以比较曲目并查看它们是否具有多于N个的字段,如果是,则假定它们是相同的曲目。

不过,我不知道他们是否可以提交40GB音乐的API请求。

+0

该API基于首先拥有半正确的数据...而且,是的,我认为他们会在前100个速射请求中禁止你的IP ..不错的想法虽然.. – Oli 2008-10-21 19:44:21

0

类似这样的事情:找到一个库来获取mp3的长度以及一个指向音频数据的指针(看起来像有一些库可以做到这一点),做一个基于歌曲长度,以及具有匹配长度的歌曲校验他们的音频数据。类似于script for finding duplicate files/images

2

这里就是我会做(或以前做过)...

  1. 加载所有歌曲的iTunes上(包涵) (注意,如果你可以在这里使用iTunes,然后停止...我假设你的列表很长且难以管理)
  2. 删除所有歌曲,将它们发送到垃圾桶,这样你就摆脱了目录结构
  3. 显然,不要“空垃圾”。将歌曲拯救到桌面上的文件夹
  4. 使用软件(如mediamonkey,dupe eliminato r或甚至itunes本身)来识别重复项。 Dupe消除器的好处在于,它通过不同的因素,艺术家,长度,文件大小和whatnot来检查什么是愚蠢和什么不是)
  5. 重新加载到Itunes,这次检查“自动排列歌曲” ,这将把你的新的,无庸置疑的名单放在一个不错的by-artist-by-album安排上

...瞧! (或者如果你阅读digg:“......利润!“)

/MP

1

我确定那里有更优雅的解决方案 - 但是如果音频数据是相同的,那么剥离ID3标签和散列应该会有效。散列之后,如果你喜欢,你可以放回ID3标签。

0

ffTES的一些改编对我来说非常类似的任务。