什么是判断两个MP3文件是否重复的最快方法?

时间:2011-08-02 20:50:08

标签: file hash md5

我想编写一个删除重复iTunes音乐文件的程序。识别欺骗的一种方法是比较MP3和m4a文件的MD5摘要。有更有效的策略吗?

BTW iTunes上的“Display Duplicates”菜单命令显示误报。显然它只是比较艺术家和曲目标题字符串。

1 个答案:

答案 0 :(得分:3)

如果使用哈希来比较两组数据,理想情况下,每次输入必须具有完全相同的输入才能获得完全相同的输出(除非您奇迹般地选择了两次不同输入的冲突,导致相同的输出)。如果你想通过散列整个文件来比较两个MP3文件,那么两组歌曲数据可能完全相同,但由于ID3存储在文件中,因此差异可能会使文件看起来完全不同。由于你正在使用哈希,你不会注意到这两个文件中有99%是匹配的,因为输出会有太大不同。

如果您确实想使用哈希来执行此操作,则应仅对声音数据进行哈希处理,不包括可能附加到文件的任何标记。如果音乐从CD中被翻录,并且同一张CD被翻录两次,则不建议这样做,结果可能会根据翻录参数进行不同的编码/压缩。

更好(但更复杂)的替代方案是尝试比较未压缩的音频数据值。通过对已知输入的一点试验和错误可以得到一个体面的算法。完美地完成这项工作将非常困难(如果可能的话),但如果你得到的准确率超过50%,那么它将比手工完成更好。

请注意,即使是一种可以检测两首歌曲是否接近的算法(比如同一首歌在不同的参数下被撕掉),算法必须要比告诉现场版本是否像工作室版本更复杂。如果你能做到这一点,那就有钱了!

并回顾最初的想法,即如何快速判断它们是否重复。散列会快很多,但是比具有此目的的任何算法都要准确得多。它的速度与准确性和复杂性有关。