【问题标题】:What's the fastest way to tell if two MP3 files are duplicates?判断两个 MP3 文件是否重复的最快方法是什么?
【发布时间】:2011-08-02 20:50:07
【问题描述】:

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

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

【问题讨论】:

  • 定义“重复”?一点一点的一样还是听起来一样?您不妨考虑perceptual hash

标签: file hash md5


【解决方案1】:

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

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

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

请注意,即使是可以检测两首歌曲是否接近的算法(比如同一首歌曲在不同参数下翻录),算法也必须比现场版本是否像录音室版本更复杂.如果你能做到这一点,这里就有钱!

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

【讨论】:

  • 我认为如果ID3标签也必须匹配就可以了。那么MD5哈希比较是要走的路吗?感谢您的广泛讨论!
  • 这是最快的,但最不准确。这些文件必须是彼此完全相同的二进制副本。
  • 这可能涵盖 70% 的相关案例。
  • 该死...我有点希望说服你创建算法:P
猜你喜欢
  • 2011-03-28
  • 1970-01-01
  • 2013-02-13
  • 2011-01-31
  • 2012-10-05
  • 1970-01-01
  • 1970-01-01
  • 2011-02-21
  • 1970-01-01
相关资源
最近更新 更多