ID3v2规范

时间:2013-06-23 17:18:32

标签: encoding mp3 id3 id3v2

基于http://id3.org/id3v2.3.0规范,帧头的布局为:

Frame ID       $xx xx xx xx (four characters)
Size           $xx xx xx xx
Flags          $xx xx

但同一页面下面几行表示允许不同类型文本编码的帧在帧大小之后直接有文本编码描述字节。如果使用ISO-8859-1,则此字节应为$00,如果使用Unicode,则该字节应为$01

这很令人困惑,因为标志(2个字节)应该直接在帧大小信息之后,所以我希望编码字节位于标志信息之后。

那么现在什么是正确的?

Frame ID       $xx xx xx xx (four characters)
Size           $xx xx xx xx
Flags          $xx xx
Encoding       $xx
Text

Frame ID       $xx xx xx xx (four characters)
Size           $xx xx xx xx
Encoding       $xx
Flags          $xx xx
Text

2 个答案:

答案 0 :(得分:4)

我认为这可能实际上是一个错误案例中的错误措辞。我在ID3v2 Chapter Frame Addendum中找到了两个图表,显示了完整标题的示例。该文档描述了两种新引入的帧类型,这些类型对于手头的问题并不感兴趣。但幸运的是,它还包含嵌入的“标题/歌曲名称/内容描述” - 框架(TIT2)和“字幕/描述细化”框架(TIT3)的示例,它们都是文本框架*:

enter image description here

根据该图,Title框架(ID:TIT2)具有以下结构: 首先the frame header

Frame ID       $xx xx xx xx (four characters)
Size           $xx xx xx xx
Flags          $xx xx

然后直接跟ID-dependent fields

Text encoding  $xx Information    
<text string according to encoding>

这种布局对我来说最有意义。如果您仍然对正确的布局有疑问,可以查看其中一个existing implementations的来源。

旁注:ID3v2.4.0 specification他们将令人困惑的句子更改为。

  

允许不同类型文本编码的框架包含文本   编码描述字节。

* 只有允许不同类型的文本编码的帧具有文本编码描述字节
不出所料,其中大多数是文本框架

答案 1 :(得分:2)

帧头长度为10个字节。 UID为4个字节 帧长度为4个字节(标题除外) 标志为2个字节。 任何其他信息都将在框架本身中找到,而不是其标题。

措辞肯定令人困惑。

意味着您希望读取字符串的位置,第一个字节会告诉您预期的内容。 $ 00表示ISO-8859-1或一个字节编码 $ 01表示Unicode或2字节编码。 $ 01之后是FF FE或FE FF,以通知最高有效字节。

我建议你在一些mp3文件上使用hexa编辑器并解析它们