3

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

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

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

4

9 回答 9

4

我过去的做法是使用来自 Music IP 的 genpuid。闭源软件创建文件的音频指纹,无论格式、id3、校验和等如何。

更多信息可以在这里找到。

这应该确保最多的正重复匹配并最大限度地减少误报。它还可以正确标记不正确的 id3 标签。

于 2008-10-21T20:06:02.473 回答
2

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

  1. 将所有歌曲加载到 iTunes 上(请耐心等待)(请注意,如果您可以在此处使用 iTunes,请停止……我假设您的受骗名单很长且难以管理)
  2. 删除所有歌曲,将它们发送到垃圾桶,这样你就摆脱了目录结构
  3. 显然,不要“清空垃圾”。将歌曲保存到桌面上的文件夹中
  4. 使用mediamonkey、 dupe eliminator甚至iTunes等软件来识别重复项。Dupe eliminator 很好,因为它检查了不同数量的因素,艺术家,长度,文件大小等等,并猜测什么是骗子,什么不是)
  5. 重新加载到 Itunes,这一次检查“自动排列歌曲”,这会将你的新的、无重复的列表放到一个不错的按艺术家按专辑的排列中

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

/mp

于 2008-10-21T19:59:20.740 回答
1

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

编辑:如果他们不是,也许他们可以被制作成......如果你只处理整个专辑,有几个工具可以根据曲目的数量和长度获取所有标签数据。

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

于 2008-10-21T19:34:45.610 回答
1

如果您有一个可以解析文件的库,您可以对音频数据运行哈希。如果歌曲是不同的翻录或已重新压缩/转码/等,这对您没有帮助。

于 2008-10-21T19:38:12.780 回答
1

我确信那里有更优雅的解决方案 - 但如果音频数据是等效的,那么剥离 ID3 标签和散列应该可以解决问题。散列后,您可以根据需要将 ID3 标签放回去。

于 2008-10-21T20:33:25.663 回答
0

或许Last.fm API会很有用。它包括一个 track.getInfo 调用,该调用返回 XML,包括曲目的长度、艺术家姓名、曲目编号等。您可以比较曲目并查看它们是否有超过 N 个字段相等,如果是,则假设它们是相同的曲目。

不过,我不知道他们是否会同意你提交 40gb 音乐的 API 请求。

于 2008-10-21T19:39:12.887 回答
0

像这样的事情怎么样:找到一个库来获取 mp3 的长度以及指向音频数据的指针(看起来有几个库可以做到这一点),根据歌曲长度进行第一次通过过滤器,然后对于具有匹配长度的歌曲校验和它们的音频数据。与此脚本类似,用于查找重复文件/图像

于 2008-10-21T19:54:23.700 回答
0

ffTES的一些改编对我非常相似的任务非常有用。

于 2014-02-05T09:45:59.967 回答
0

我遇到了同样的问题,所以我编写了一个命令行程序,试图通过比较声学指纹来检测相似的音频文件:https ://github.com/derat/soundalike

它使用Chromaprintfpcalc的实用程序来生成指纹,然后在更严格地比较指纹之前构建一个查找表以查找可能的匹配项。

当我运行我的音乐库时,它运行得很好,但如果需要,有各种标志来调整它的行为。如果它对你有用(或者如果它不),请告诉我!

于 2022-02-14T03:19:41.107 回答