【问题标题】:How do I determine where in an ID3v2 tag the image is burried?如何确定图像在 ID3v2 标记中的埋藏位置?
【发布时间】:2011-04-16 05:15:47
【问题描述】:

我正在尝试从 mp3 中加载 jpg(我在 Flash 中执行此操作,但这既不存在也不存在),并且我已经在十六进制编辑器中打开了一些 MP3,而其余的标签很清楚,图像部分是个谜。有一个标签“image/jpeg”,但随后我期望图像的字节长度或用于划分图像结尾的字符串键,但我什么也没看到,标签上的文档完全没有帮助。

希望得到一些关于我在这里寻找什么的指导。对结果的不直观感到惊讶!

TIA

【问题讨论】:

    标签: flash mp3 id3v2


    【解决方案1】:

    虽然我通常会提倡 msw 的解决方案,但该网站似乎没有 Flash 库。但是,它确实有ID3v2 specification。如果您查看第 4 节,ID3v2 frame overview,您会看到帧头包括帧的大小,而不包括头。我相信可以安全地假设图像大小可以从那里计算出来。

    PD:我假设您知道 ID3v2 标签的工作原理。如果你不这样做,我建议你至少粗略地看一下规范。基本上,有一个标头,一个扩展标头,然后是一个或多个包含标签数据的帧(每个数据一帧),最后是填充。

    编辑:出于测试目的,我在十六进制编辑器中打开了一个带有已知标签数据的 MP3。找到一个名为APIC的帧,将指定字节数复制到一个新文件中并保存为test.jpg。不太好用。

    进一步挖掘,我找到了frame spec。具体来说,第 4.14 节,attached picture,描述了帧的“子标题”(1 字节文本编码、零分隔的 mimetype、1 字节图片类型和零分隔描述)。所以我从数据中删除了这些信息,并将剩余部分复制到一个新的 jpg 文件中,Windows 能够显示该文件。

    因此,技术是:

    • 从帧头获取帧大小。
    • 解析出帧子标题的帧开头并将其删除。 (4 到无限字节之间的任意位置)
    • 根据剩余字节数计算图像大小。

    【讨论】:

    • 是的......我明白了,但文档有点密集。我希望这些领域会更直接一些。前几个字段(曲目名称、艺术家姓名等)都很明显,但随后是图像标签,然后是相当长的字符序列,在每个 mp3 中都是相同的,所以,它们一定是某种指示符,但它们是什么意思?然后是没有明显END的图像数据......我很惊讶这是“标准”。 :)
    • 嗯,原来它是标准的,只是记录在另一个地方。查看编辑。
    • @Dr.Dredel:如果您不添加@part,您会收到通知吗?我一直在想……
    【解决方案2】:

    除非你喜欢痛苦,否则不要重新发明那个轮子。这是 but one source for libraries 为您工作。

    【讨论】:

    • 哈哈。不,我不是在寻找痛苦,但我确实想在闪存中构建它并且找不到执行此操作的库加上我拒绝相信这非常复杂。
    • 我越看越相信这比我最初认为的复杂:)
    猜你喜欢
    • 1970-01-01
    • 2012-04-06
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多