mkv linux 封装字幕,【多媒体封装格式详解】---MKV【1】

Matroska 开源多媒体容器标准。MKV属于其中的一部分。

Matroska常见的有.MKV视频格式、MKA音频格式、.MKS字幕格式、.MK3D files (stereoscopic/3D video).

1.EBML(Extensible Binary Meta Language)

MKV是建立在EBML这种语言的基础上,所以要了解MKV格式需要先了解EBML这种语言。

EBML是一种类似于XML格式的可扩展二进制元语言,使用可变长度的整数存储,以节省空间。

EBML基本元素结构:

typedef struct {

vint ID // EBML-ID

vint size // size of element

char[size] data // data

} EBML_ELEMENT;

ID标志属性类型

size为后面data部分的大小

data部分为ID所标识属性的实际数据

上面可以看到ID和size的类型都是vint,vint(Unsigned Integer Values of Variable Length)可变长度无符号整型,比传统32/64位整型更加节省空间。

长度计算方法为

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

从MKV文件中简单接一段来举个例子。这是16进制表示方式

uid-20758197-id-5056029.html

因为每个EBML元素都是由ID size data 三部分组成,我们就按照这些来分析。

将0x428 转成2进制 为 01000010 按照上面规则  前面有1个0 所以知道ID的长度为2,也就是0x4282为ID值。

将0x88 转成2进制为 10001000 1为开头 长度就是1,去掉前缀1变成了00001000 ,也就是 size的值为 8.

接下来的8个字节就是data值:6D 61 74 72 6F 73 6B 61  根据上面ID值查表得知 这个EMBL 名称为DocType 也就是说data的内容是string格式,所以转成askII码 data值就是“matroska” 和后面显示的一致。

所以这个EBML元素就解析出来了

ID=0x4282;

size=8;

data=“matroska” ;

得到的信息就是 DocType = matroska。

2.整体结构

让我们看看MKV的整体框架结构。

Level 0

Grouping

Level 1

Level 2

Level 3

EBML

Header

EBMLVersion

DocType

Segment

Meta Seek Information

SeekHead

Seek

SeekID

SeekPosition

Seek

SeekID

SeekPosition

Segment Information

Info

Title

SegmentUID

Track

Tracks

TrackEntry

Name

TrackNumber

TrackType

TrackEntry

Name

TrackNumber

TrackType

Chapters

Chapters

Edition Entry

Clusters

Cluster

Timecode

BlockGroup

Block

BlockGroup

Block

ReferenceBlock

BlockGroup

Block

Cluster

Timecode

BlockGroup

Block

BlockGroup

Block

BlockGroup

Block

BlockGroup

Block

BlockDuration

Cueing Data

Cues

CuePoint

CueTime

CuePosition

CuePoint

CueTime

CuePosition

Attachment

Attachments

AttachedFile

FileName

FileData

AttachedFile

FileName

FileData

Tagging

Tags

Tag

MultiTitle

Language

Tag

MultiTitle

Language

EBML元素都有自己的级别,每一个高一级的元素由若干次一级的元素组成。

从整个MKV文件整体来看可分为2大部分:

EBML Header和Segment。

EBML Header由EBMLVersion、DocType等子元素组成,包含了文件的版本、文档类型等相关信息。

Segment部分保存了媒体文件的视频和音频的实际数据,其data部分又可以分为SeekHead、Tracks、Cluster等若干子元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值