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

File 什么';判断两个MP3文件是否重复的最快方法是什么?,file,hash,md5,File,Hash,Md5,我想写一个程序,删除重复的iTunes音乐文件。识别重复的一种方法是比较MP3和m4a文件的MD5摘要。有没有更有效的策略 顺便说一句,iTunes上的“显示重复项”菜单命令显示误报。显然,它只是比较艺术家和曲目标题字符串。如果使用哈希来比较两组数据,理想情况下,它们每次都必须有完全相同的输入才能获得完全相同的输出(除非你奇迹般地选择了两个不同输入的冲突,从而产生相同的输出)。如果要通过散列整个文件来比较两个MP3文件,则两组歌曲数据可能完全相同,但由于ID3存储在文件中,因此存在的差异可能会使

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


顺便说一句,iTunes上的“显示重复项”菜单命令显示误报。显然,它只是比较艺术家和曲目标题字符串。

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

如果您真的想使用散列来实现这一点,您应该只对声音数据进行散列,而不包括可能附加到文件的任何标记。不建议这样做,例如,如果从CD中翻录音乐,并且同一张CD被翻录两次,则结果可能会根据翻录参数进行不同的编码/压缩

一个更好(但更复杂)的选择是尝试比较未压缩的音频数据值。通过对已知输入的一点尝试和错误,可以得到一个不错的算法。完美地做到这一点是非常困难的(如果可能的话),但如果你得到的东西超过50%的准确率,这将比手工完成要好

请注意,即使是一个能够检测两首歌是否接近的算法(比如同一首歌在不同参数下被翻唱),算法也必须比判断直播版本是否类似于录音室版本更复杂。如果你能做到这一点,这里就能赚钱


回到最初的想法,如何快速判断它们是否重复。散列运算的速度要快得多,但准确度要比任何用于此目的的算法低得多。这是速度与准确性和复杂性的对比。

我认为如果ID3标签也必须匹配,那也没关系。那么MD5散列比较是一种方法吗?谢谢大家的广泛讨论!这是最快的,但最不准确。这些文件必须是彼此精确的二进制副本。这可能涵盖70%的相关案例。该死。。。我有点希望说服你创建这个算法:PDefine‘duplicate’?一点一点都一样还是听起来一样?你不妨考虑一下