是否有一个Ruby库可以让我计算MP3文件的音频数据的校验和(减去元数据)或允许我读取MP3的音频数据来自己计算校验和?
我正在寻找类似的东西:
mp3 = Mp3Lib::MP3.new('/path/to/song.mp3')
mp3.audio.sha1sum # => the sha1 checksum of _only_ the audio, minus the metadata
我找到了Mp3Info,但似乎有点单调乏味。初始化Mp3Info对象时,您可以获取实际音频数据开始和结束的帧。
答案 0 :(得分:3)
在没有元数据的情况下提取mp3文件非常容易。
元数据是文件的最后128个字节。元数据始终以3字节“TAG”开头(如果存在)。只需忽略最后128字节。
元数据可以存储在文件的开头或结尾。大多数实现只支持开头。 ID3v2有一个存储大小的标题。标头始终在元数据的开头处被激活。有一个可选的页脚,它是元数据末尾标题的副本。如果元数据位于文件末尾,则需要页脚。
标题具有以下形式
ID3v2/file identifier "ID3"
ID3v2 version $04 00
ID3v2 flags %abcd0000
ID3v2 size 4 * %0xxxxxxx
页脚具有以下形式
ID3v2/file identifier "3DI"
ID3v2 version $04 00
ID3v2 flags %abcd0000
ID3v2 size 4 * %0xxxxxxx
d位说,页脚存在。尺寸是在没有页眉和页脚的情况下测量的。大小的每个字节始终是最高位集。因此,只有28个实际的32位表示大小。
只计算,文件的哪一部分不是元数据,并将其用于散列。
请注意,如果ID3v1和ID3v2都位于文件末尾,则ID3v1位于IDv2后面
答案 1 :(得分:1)
ID3标签是不是存储在128字节块中的文件末尾(ID3 v1),还是存储在文件开头的块中(ID3v2.3和v2.4)? (id3.org)
您可以使用Mp3Info中的audio_content
方法,并从文件中读取那么多数据,但是自己查看文件并找出标题不在哪里可能并不复杂。