MATROSKA 文件格式

摘要:
因为MATROSKA文件提供了Charger和Attachment子元素来表示其他数据内容,所以不能有Cluster元素。MasterTracksID:1654AE6B描述了包含在集群中的数据磁道信息。文件中可以生成多个备份。MasterAttachmentID:1941A469包含附加到此Segment元素的所有文件。MasterTagID:1265C367包含此片段或其子元素的其他附加信息,如作者姓名、多语言支持等,这些信息与播放无关。段包含元素:SegmentInfo包含元素:Char[16]SegmentUIDID:73A4表示段的128位ID号,可由其他文件引用。Utf-8RevFileNameID:3C83AB包含上一段的文件名。如果找不到它,可以通过遍历文件中的SegmentUID来找到它。

MATROSKA 文件格式

1.EBML (Extensible Binary Meta Language):

EBML语言使用不定长整数,这种方式相对于固定长度的32位/64位字长的整数值更节约空间.放置的位置也不受字节对齐约束..这种长度编码方式来自于UTF-8编码规范.

不定长度的无符号整数值(“vint”):

长度的计算方法:

长度 = 1 + 整数前缀0比特的个数.

使用大字节编码方式.

可以使用大于>=8字节的整数值,这时它的第一个字节的值将会是0x00,用来表达长度超过56位的整数值.但它是被MATROSKAY文件禁止的.

举个例子:

       43 85 03: 将它换算成二进制如下:01000011 10000101 00000011,前缀0比特的个数为1,总长度为:1 + 1 = 2,所包括的字节为:01000011 10000101,最前值为1的比特用作中止前缀0比特.它不能被用来计算整数的结果,那么最终的整数值等于:03 85(901).这样看来,1个字节表示长度最多可以有7个前缀0比特,它也是MATROSKA文件所支持的整数最长长度.使数据所占的空间减小,这是EBML文件最大亮点.

长度未知整数值:

如果除了前缀0之外的比特位全部都是1的话,表示此整数的长度未知.MASTROSKA文件中除了文件头最后一个元素之外,都不要这样写.如果有的整数正好是这样的形式,要对它重编码,如:16383 = 7F FF,要把它编码成: 20 3F FF,虽然整数的长度不可避免的增加了.

EBML元素:

存储方式如下:

typedef struct {

       vint ID;  //Element ID

       vint size; //Element size

       char Data[size] //Element Data

} Ebml_Element;

包含其它元素的元素被称做:EBML Master Elements.子元素的排列顺序是任意的,但最好还是.有一种确定的定义.

有符号整数的表示方法:

大字节序,根据其值的正负符号来减去00或FF来得到具体的数值,如-257 = FE FF, FE FF – FFFF=257.

实数表示方法:

大字节序,可以使用32或64比特来表示IEEE标准定义的浮点数,虽然标准包括了80比特的浮点数,但MATROSKA不使用.

字符串类型:

String类型用ASCII编码方式.UTF-8类型用UTF-8编码方式.

2.MATROSKA 文件项级元素:

MATROSKA 文件格式第1张

只有两种顶级元素:

1.      EBML Header:

用来描述文件中的内容,一个文件只能有一个EBML Header,更多的将被读取它的程序忽略掉.有的MKV生成器在添加多个文件时可能会出现这种情况.

2.      Segment

包括了多媒体数据和回放时所需要的信息头.一个文件可以包括多个信息头,但很多的库不支持多个Segment,Windows平台下可以用Haali Media Splitter来支持多Segment.

3.    EBML文件头:

描述了EBML编解码器的版本号,文件类型,文件名.

元素列表:

Uint EBMLVersion ID:42 86 默认值:1  EBML编码器版本号.

Uint EBMLReadVersion ID:42 F7 默认值:1  EBML解析器版本号

Uint EBMLMaxIDLength ID:42 F2 默认值:4  EBML 元素ID号的最长长度(多少字节),在MATROSKA文件中最长为4字节.

Uint EBMLMAXSizeLength ID:42 F3 默认值:8  EBML元素最长长度(多少字节).

Uint DocTypes ID: 42 82 默认值:matroska  EBML文件中的内容类型,MATROSKA文件为”matroska”.

Uint DocTypeVersion ID:42 87 默认值:1  EBML文件包含数据的编码器版本号.

Uint DocTypeReadVersion ID:42 85 默认值:1 EBML文件包含数据的解析器版本号.

由于所有的元素都包括的默认值,所以可以使用空EBML文件头.

最好不要使ID和元素最大长度超过8字节,对于几乎所有数据来说,它已经足够了,同时对于当前流行的32/65位字长的计算机来说,它将使一次整数运算生成多条指令.

 MATROSKA 文件格式第2张

4.    Segment

Master SegmentInfo ID:15 49 A9 66   包括了SEGMENT元素的信息,如UID,标题等.

Master SeekHead ID:11 4D 9B 74   指向SEGMENT子素的索引信息,可以指向其它的SeekHead,如果Cluster元素中的BlockGroup和SimpleBlock子元素在其尾部,那么可以不用SeekHead,不然的话,文件的帧数据地址定位将很复杂。

Master Cluster ID:1F 42 B6 75   包括了视频,音频,字幕数据。因为MATROSKA文件提供了Charpter和Attachment子元素来表示其它的数据内容,所以可以没有Cluster元素。

Master Tracks ID:16 54 AE 6B   描述了包含在Cluster中的数据轨道信息,可以在文件生成多个备份。如果没有Cluster元素,Tracks元素也可以不存在。

Master Cues ID:1C 53 BB 6B   包含了Cluster数据帧的时间戳,用来支持即时定位。

Master Attachment ID:19 41 A4 69   包含了所有附加在此Segment元素中的文件。

Master Chapter ID:10 43 A7 70   包含了此Segment中所有文本支持信息。

Master Tag ID:12 65 C3 67   包含此Segmen或其子元素的其它附加信息,如作者名,多语言支持等,和回放无关。

Segment包含元素:

MATROSKA 文件格式第3张

SegmentInfo包含元素:

Char[16] SegmentUID  ID:73 A4   表示Segment的128位ID号,可以被其它的文件引用。

Utf-8 SegmentFilename  ID: 73 84   保存此Segment的文件名,但文件名是很容易被改动的,所以没有较高的可靠性。

Char[16] PrevUID      ID:3C B9 23        指向前一个Segment的128位的ID号,用在定位此Segment之前的时间点,利用它可以方便的找出同目录下的相应文件。

Utf-8     PrevFileName             ID:3C 83 AB       包含前一个Segment的文件的名称,如果找不到,可以通过遍历文件中的SegmentUID查找。

Char[16]      NextUID       ID:3E B9 23        指向后一个Segment的128位ID号,用于定位超出此Segment范围的时间点。

Utf-8      NextFileName             ID:3E 8E BB 包含后一个Segment的文件的名称。

Uint TimecodeScale            ID:2A D7 B1 每个时间码都通过和此值相乘来得到具体时间(微秒单位),但不是所有的时间码都这样。

Float      Duration        ID:44 89       此Segment的总回放时间,将其乘以TimecodeScale来得出具体时间(微秒单位)。

Uft-8      Title        ID:7B A9             此Segment的名称,如”Lord of the rings”不可以指定时间,可以用Tag元素来加入多个标题。

String     MuxingApp          ID:4D 80       生成此文件的库名称,如”libMatroska-0.7.0”,在发生问题时可以参考。

Utf-8      WritingApp           ID:57 41       生成此文件的程序名称,如”mkvmerge 0.8.1”。

Int          DateUTC             ID:44 62       生成此文件的时间,从2001.01.01 0:00:00 GMT+0h开始计算。

 MATROSKA 文件格式第4张

SeekHead包含元素:

SeekHead包含了Segment的子元素的位置列表,每对位置,ID号对应着一个Seek元素:

Master          Seek             ID:4D BB      包含了一个Segment的子元素的ID号和它的具体位置。

Seek包含元素:

Uint        SeekID         ID:53 AB      某Segment的子元素的ID号。

Uint        SeekPosition        ID:53 AC      对应SeekID的元素的位置(相对于Segment数据首地址)。

SeekHead元素通常包含了全部的Segment的子元素,但有时Cluster元素是个例外。也可以引用另一个SeekHead,比如文件开始有一个小的SeekHead,它引用了另一个在文件尾的SeekHead。

 MATROSKA 文件格式第5张

Tracks包含元素:

包含了存储在Segment元素中轨道的信息,比如轨道类型(音频,视频,字幕),编码器ID,采样率。最好将所有的轨道信息包含在一个Tracks元素中。

每个轨道用一个TrackEntry元素来表示。虽然理论也可以使用TrackUID将轨道信息放在多个TrackEntry中。

有时会出现空TrackEntry元素,但如果所有的轨道都存储在一起或根本就没有轨道(如只有Chapter元素)将不会发生文件解析错误。

Master          TrackEntry           ID:4E            描述一个在Segment元素中的轨道。

TrackEntry包含元素:

Uint        TrackNumber       ID:D7            轨道的序列号,不可以为0,将被Cluster的子元素Block和SimpleBlock使用。

Uint        TrackUID             ID:73 C5       轨道的ID号,不可以为0。

Uint        TrackType            ID:83            轨道的类型,如视频,音频,字幕。

Bool              FlagEnabled         ID:89     默认值:1          是否使用此轨道。

Bool              FlagDefault           ID:88     默认值:1          是否默认播放,如果没有此值为1轨道,将由播放器选择。

Bool              FlagForced           ID:55 AA      是否必须播放,如果多个字幕轨道都包括此属性,那么将选择和音频语言相同的轨道,只会被数位限制管理(DRM)使用。

Bool              FlagLacing            ID:9C     默认值:1          是否包括了捆绑数据块(表示在一个数据块中包含多帧 lacing block)。

Uint        MinCache            ID:6D E7      默认值:0   在播放时必须提供多少帧的缓存区,比如当MPEG4帧以其编码顺序来播放时使用。

Uint        MaxCache           ID:6D F8      在播放时最大可以提供多少帧缓存区,如果等于0,表示不使用缓存。

Uint        DefaultDuration           ID:23 E3 83         表示一帧持续了多少微秒。当没有Duration元素或使用捆绑(lacing)方式时将使用此值。如果值为0表示此轨道的帧的持续时间不定。(如Vorbis 音频)。使用此值将使文件的定位非常容易。

Float             TrackTimecodeScale          ID:23 31 4F         Block元素的时间码+Cluster时间码乘以此值得到Block的具体时间。

Utf-8             Name            ID:53 6E              轨道的名称,不可指定语言。

String            Language       ID:22 B5 9C        默认值:eng       轨道使用的语言,和Name所用语言无关。

String            CodecID       ID:86                   默认值:86        轨道使用的编码类型ID。

Binary           CodecPrivate       ID:63 A2       解压时所需要的数据。如Vorbis编码的初始化数据包。

Utf-8             CodecName         ID:25 86 88         编码类型名称。

Uint        AttachmentLink           ID:74 46       附加在此轨道上的Attchment元素UID。

Master          Video            ID:E0            视频轨道视频相关信息。

Master          Audio            ID:E1            音频轨道音频相关信息。

Master          ContextEncodings        ID:6D 80              轨道的压缩或加密信息。

注意Video和Audio元素与轨道的数据的匹配,否则文件将不能回放。

Video包含元素:

Uint PixelWidth            ID:B0            视频帧的宽度(像素单位)。

Uint PixelHeight           ID:BA           视频帧的高度(像素单位)。

Uint PixelCropBottom  ID:54 AA      默认值:0          从视频帧底部裁减多少像素。

Uint PixelCrop                    ID:54 BB      默认值:0          从视频帧顶部裁减多少像素。

Uint PixelCropLeft              ID:54 CC      默认值:0          从视频帧左侧裁减多少像素。

Uint PixelCropRight            ID:54 DD      默认值:0          从视频帧右侧裁减多少像素。

Uint DisplayWidth        ID:54 B0       默认值:PixelWidth          回放屏幕宽度。

Uint DisplayHeight              ID:54 BA      默认值:PixelHeight  回放屏幕高度。

Uint DisplayUnit                  ID:54 B2       默认值:0                        回放屏幕宽度和高度单位。0-像素 1-厘米 2-英尺。

解码后,从Pixelxxx长度中裁减Cropxxx长度,然后拉伸至Displayxxx值回放。

Audio包含元素:

Uint SamplingFrequency            ID:B5     默认值:8k        轨道采样率(单位Hz)。

Uint Output-SamplingFrequency              ID:78 85       回放时使用的采样率。默认为SamplingFrequency。

Uint Channels              ID:9F     默认值:1          轨道包含声道数。

Uint BitDepth        ID:62 64       bps(bit per sample),通常用于PCM音频。

ContentEncodings包含元素:

Master ContentEncoding           ID:62 40           描述轨道使用的压缩或加密信息。

ContentEncoding包含元素:

Uint ContentEncoding-Order            ID:50 31       默认值:0          解码器的优先级,值最大的最先使用。

Uint ContentEncoding-Scope            ID:50 32       默认值:1          轨道的哪一部分使用了此加密或压缩方式。

Uint ContentEncoding-Type              ID:50 33       默认值:0          编码类型 0-压缩1-加密。

Master   ContentCompression                 ID:50 34       具体压缩信息。

Master   ContentEncryption                     ID:50 35       具体加密信息。

ContentEncoding元素有时可以达到压缩和加密兼有的效果,如压缩字幕,或将音频帧的同频头去掉。AC-3音频起始字节为:0B 77,在MATROSKA文件中它不存在。

ContentCompression包含元素:

ContentCompAlgo             ID:42 54       默认值:0          描述压缩算法

ContentCompSettings  ID:42 55       压缩配置信息。

TrackType元素值种类:

0x01             视频轨道。

0x02             音频轨道。

0x03             混合音视频轨道。

0x10             标志(logo)轨道。

0x11              字幕轨道。

0x12             按钮轨道。

0x20             控制轨道。

ContentEncodingScope比特值:

1 全部帧。

2 由轨道的CodecPrivate指定。

4 用于下个ContentEncoding元素(由解码顺序指定)。

ContentCompAlgo元素值种类:

0 zlib

1 bzlib

2 lzo1x

3 header striping

 MATROSKA 文件格式第6张

Cluster包含元素:

一个Cluster元素通常包含了几秒钟的多媒体数据,子元素的顺序不固定,但最好将第一个BlockGroup或SimpleBlock元素放在最前部,这样方便找出时间码。

Uint TimeCode            ID:E7     默认值:0          用来做所包含的Block的开始时间码。

Uint Position                ID:A7            父元素在祖父元素的开始位置。在数据损坏时进行同步。

Uint PrevSize        ID:AB        前一个Cluster的大小(字节单位)。方便反向定位和找出前面的Cluster,而不需要使用MetaSeek和Cue元素,在Cluster的ID值损坏后,定位仍可正常进行.

Master          BlockGroup         ID:A0            包含一个数据块及其相关信息如引用等.

Binary           SimpleBlock         ID:A3            只包含一个数据块,没有附加信息,所以资源浪费会小很多,SimpleBlock由Matroska V2提供.

BlockGroup包含元素:

Binary           Block            ID:A1            回放数据.

Int          ReferenceBlock           ID:FB            某帧相对于此数据块的时间码,在解码此数据块时必须已经将此帧解码.

Int          BlockDuration             ID:9B            此数据块的时间码,如果没有此元素,由下一数据块时间码-前一数据块时间码或DefaultDuration来计算.通常字幕是不需要知道持续时间的,除非确实需要控制它的显示时间,但最好还是写入它的Duration元素.

 MATROSKA 文件格式第7张

Cues包含元素:

Cues包含了非常有用的定位信息.信息的单元,称为CuesPoint,包含了时间戳,地址信息(Tracker号,Cluster位置,此Cluster的Block号.通常只用于定位关键帧.

Master          CuePoint              ID:BB           Track的定位信息.

Uint        CueTime        ID:B3            在某Cluster的Block的时间码.

Master          CueTrackPositions              ID:B7            Cluster和Block的定位信息.

CueTrackPostions包含元素:

Uint        CueTrack             ID:F7            Track的序号,等于TrackEntry元素的TrackNumber.

Uint        CueClusterPosition             ID:F1            Cluster相对于Segment元素数据的相对地址.

Uint        CueBlockNumber              ID:53 78       Block的序号,在这个Cluster中.

 MATROSKA 文件格式第8张

Chapter包含元素:

包含了此Segment的全部文本信息.和DVD的Chapter相比,增强了很多,处理更加复杂.

Master          EditionEntry          ID:45 B9              描述了一个文本集,理论上可以用多个EditionPoint来描述同一文本集,但不推荐使用.

一个文本集包含了多个文本段落,可以有多个文本集.像播放列表一样使用,以一定间隔依次播放.

EditionEntry包含元素:

Uint EditionUID                  ID:45 BC             文本集的ID号.

Bool       EditionFlagHidden       ID:45 BD      默认值:0             用户是否可以看到.

Bool       EditionFlagDefault       ID:45 DB      默认值:0             播放器默认设置.

Bool       EditionFlagOrdered     ID:45 DD      默认值:0             文本段落是否顺序播放.

Master          ChapterAtom              ID:B6                   文本段落的定义,内部也可以包含ChapterAtom.

ChapterAtom包含元素:

Uint ChapterUID                ID:73 C4              文本段落的ID号,在文件中唯一.

Uint ChapterTimeStart ID:91                   文本段落的开始时间(没有比例值),不可以小于0,即使多媒体数据时间最小为-30.000.

Uint ChapterTimeEnd          ID:92                   文本段落的结束时间,可能是下个段落的开始.

Bool       ChapterFlagHidden            ID:98                   默认值:0             用户是否可见.

Bool       ChapterFlagEnabled           ID:45 98              默认值:1             是否被播放器跳过.

Char[16]       ChapterSegmentUID          ID:6E 67       仅当EditionFlagOrdered=1才有这个元素,用来定位此段落对应的Segment.可以通过搜索当前目录来找到相应文件.

Uint        ChapterSegment-EditionUID            ID:6E BC      文本段落集在由ChapterSegmentUID指定的Segment中的UID号.ChapterTimeStart和ChapterTimeEnd指定相应的回放时间.不被Haali Media Splitter支持.

Master          ChapterTracks             ID:8F            文本段落应用的Track列表.

Master          ChapterDisplay            ID:80            所有文本段落的内容.

ChapterTracks包含子元素:

Uint ChapterTrackNumber                ID:89            Track序号。

Utf-8      ChapString                  ID:85            文本内容。

String     ChapLanguage            ID:43 7C       默认值:eng              所用语言,ISO639-2标准定义。

Utf-8      ChapCountry        ID:43 7E       文本内容对应的国家代码,和语言无关。

Attachments包含元素:

Master   AttachedFile                ID:61 A7       包含附加文件及其相应信息。

AttachedFile包含元素:

Utf-8      FileDescrition              ID:48 7E       文件的描述。

Utf-8      FileName                    ID:46 6E       附加文件名。

String     FileMimeType             ID:46 60       文件的MIME类型。

Binary    FileData                      ID:46 5C       文件数据。

Uint FileUID                       ID:46 AE       附加文件的UID,可以被TrackEntry引用。

 MATROSKA 文件格式第9张

Tags包含元素:

Master          Tag                       ID:73 73       描述一个标签。

Tag包含元素:

Master          Targets                 ID:63 C0       标签应用至的元素。

Master          SimpleTag            ID:67 C8       每个SimpleTag为一个对应于Targets的标签。

Targets包含元素:

Uint TargetTypeValue          ID:68 CA      默认值:50        此标签应用至的对象级别。

Uft-8      TrackUID                    ID:63 C5       此Tag对应的Track的UID.

Uint EditionUID                  ID:63 C9       此Tag对应的Edition的UID.只用来给Edition加入标题.

Uint EditionUID                  ID:63 C4       此Tag对应的Chapter的UID.

Uint AttachmentUID           ID:63 C6       此Tag对应的Attachment的UID.

SimpleTag包含元素:

Utf-8      TagName                    ID:45 A3       Tag的名称.

String     TagLanguage        ID:44 7A       默认值:und          TagName元素使用的元素.默认值比较特殊是”und”.

Bool       TagOriginal                  ID:44 84       默认值:1             是否作为原始标题.

Utf-8      TagString                     ID:44 87       Tag的字符串值.

Binary    TagBinary                    ID:44 85       Tag的二进制值.

一些常用的Tags

TITLE, Target是EditionUID,用来定义Edition的名称.它可以在屏幕上看到.

BPS, Target是TrackUID,用来定义此Track的比特率.

FPS,Target是TrackUID,用来定义此Track的帧率.

原贴地址:http://blog.csdn.NET/CharlesPrince/archive/2009/03/07/3967398.aspx

参考文章:http://blog.csdn.net/hjie8627/archive/2009/08/20/4464154.aspx

参考文档:

 标准:http://www.matroska.org/files/matroska.pdf

 mkv格式说明表参见:http://www.matroska.org/technical/specs/index.html

工具:

mkvmerge/mmg/mkvextract/mkvpropedit/mkvinfo

AVI-Mux_GUI可以分析EBML tree,下载地址 http://www.alexander-noe.com/video/amg/

免责声明:文章转载自《MATROSKA 文件格式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇IOS 获取IDFA以及判断是否越狱Scrapy进阶知识点总结(三)——Items与Item Loaders下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用Unity3D的50个技巧:Unity3D最佳实践!

关于这些技巧 这些技巧不可能适用于每个项目。 这些是基于我的一些项目经验,项目团队的规模从3人到20人不等; 框架结构的可重用性、清晰程度是有代价的——团队的规模和项目的规模决定你要在这个上面付出多少; 很多技巧是品味的问题(这里所列的所有技巧,可能有同样好的技术替代方案); 一些技巧可能是对传统的Unity开发的一个冲击。例如,使用prefab替代对象...

spark 特征选择、特征预处理:提取/转换/选择 缺失值 sparkMllib

数据预处理与特征工程 缺失值处理 缺失值处理通常有如下的方法: 对于unknown值数量较少的变量,包括job和marital,删除这些变量是缺失值(unknown)的行; 如果预计该变量对于学习模型效果影响不大,可以对unknown值赋众数,这里认为变量都对学习模型有较大影响,不采取此法; 可以使用数据完整的行作为训练集,以此来预测缺失值,变量hous...

PHP文本的读写

1 <?php 2 $txtPart="test0.txt"; //export 3 $txtPartContent=fopen($txtPart,"r"); //读文件,返回TRUE,FALSE 4 if($txtPartContent){ //若文件存在继续 5 while(!fe...

Excel统计函数COUNTIF()的常规用法介绍

大神链接: Excel统计函数COUNTIF()的常规用法介绍(自己整理的)http://club.excelhome.net/thread-1169705-1-1.html(出处: ExcelHome技术论坛) Excel统计函数COUNTIF()的常规用法介绍   COUNTIF函数常规用法一   基本简介作用 用来计算区域中满足给定条件的单...

从HTML文件中提取正文的简单方案

http://www.basesnet.com/seo/53从HTML文件中提取正文的简单方案2012-03-07/SEO/HTML文件,提取正文,简单方案/ 1 多种基于html正文提取的思想 一、基于统计的中文网页正文抽取的研究 摘要:信息抽取技术是一种广泛运用于互联网的数据挖掘技术。其目的是从互联网海量数据中抽取有意义、有价值的数据和信息,从而能...

关于DOM的理解

一、DOM简介 D——document,没有文档,也就是没有网页,DOM就无从谈起。 当创建了一个网页并把它加载到web浏览器中时,DOM就悄然而生。浏览器根据网页文档创建一个文档对象。 O——object,对象。 对象有三种, 1、用户自定义对象 2、内建对象,javascript中的对象,如Array,Math,Date等。 3、宿主对象,由浏览器提供...