【发布时间】:2011-01-29 12:05:28
【问题描述】:
我想读取 MP3 文件的最后 1 兆字节并计算文件的那部分的 SHA1 校验和。我想要这个的原因是,当我在寻找重复的 MP3 时,标题信息(歌曲标题、专辑等)可能会有所不同,即使它是完全相同的音频文件,所以我想我会更好地校验和最后是文件的一部分而不是整个文件。有没有一种有效的方法来做到这一点?
【问题讨论】:
我想读取 MP3 文件的最后 1 兆字节并计算文件的那部分的 SHA1 校验和。我想要这个的原因是,当我在寻找重复的 MP3 时,标题信息(歌曲标题、专辑等)可能会有所不同,即使它是完全相同的音频文件,所以我想我会更好地校验和最后是文件的一部分而不是整个文件。有没有一种有效的方法来做到这一点?
【问题讨论】:
MP3 没有任何固有的歌曲/专辑/艺术家“标题”信息。这由 ID3 处理,它可以位于文件的开头(ID3v2,随机大小,取决于指定的信息量)或末尾(ID3v1,固定 128 字节)。要通过校验和正确识别 MP3,您必须确保两个版本的 ID3 标签都被忽略。此外,可以将 MP3 嵌入到 .wav 容器中,在这种情况下会有 .wav 标头等等。
当然,总是有两首歌曲使用不同的比特率、采样率,甚至不同的 CD 翻录器和编码器进行编码的情况。所有人都会产生完全不同的文件,但仍然是“同一首歌”。
【讨论】:
试试fseek。这会将指针移动到文件末尾之前约 1024 KB。
fseek($fp, -1024 * 1024, SEEK_END);
【讨论】: