您当前的位置:首页 > 电脑百科 > 软件技术 > 音/视频编辑

超详细MP4格式分析

时间:2020-09-02 11:31:56  来源:  作者:

1.MP4解析工具

超详细MP4格式分析

 

mediainfo

超详细MP4格式分析

 

mp4box:http://download.tsi.telecom-paristech.fr/gpac/mp4box.js/filereader.html

超详细MP4格式分析

 

对于Mp4来说,都是一个个box来去组织元素。比如竖着的box,就是一个个box,这里就是重点关注moov。mp4⽂件由box组成,每个box分为Header和Data。其中Header部分包含了box的类型和⼤⼩,Data包含了⼦box或者数据,box可以嵌套⼦box。MP4⽂件的基本组成单元是box,也就是说MP4⽂件是由各种各样的box组成的,有parent box,还有children box。因此,这些boxes之间存在⼀定的层次关系,总结如下表所示,表中标记出了各个box必选或可选特性,√代表Box必选。

超详细MP4格式分析

 

下图是⼀个典型mp4⽂件的基本结构:

超详细MP4格式分析

 

Hexinator:

超详细MP4格式分析

 

Mp4box和mediainfo对比。

超详细MP4格式分析

 

 

超详细MP4格式分析

 

 

超详细MP4格式分析

 

 

超详细MP4格式分析

 

 

超详细MP4格式分析

 


超详细MP4格式分析

 

 

超详细MP4格式分析

 

 

超详细MP4格式分析

 

 

超详细MP4格式分析

 


超详细MP4格式分析

 

 

这个trak,就是表示是多少路音频和视频。每一个AVstream都对应一个track。每个track,可能都有宽高信息,编译器信息,采样率,声道,time_base(time_scale)。

超详细MP4格式分析

 

表示track width和heigth使用了4个字节。

视频和音频的时间刻度不一样。

超详细MP4格式分析

 

音视频的handler也不一样。

超详细MP4格式分析

 

 

超详细MP4格式分析

 

比较重要的sample table。

超详细MP4格式分析

 

 

超详细MP4格式分析

 

 

一个MP4文件分为多个track,一个track分为多个chunk,一个chunk有多个sample。mp4数据索引和真正的数据分开区域存储。

超详细MP4格式分析

 

先用数据索引找到moov,然后才能找到mdat。

超详细MP4格式分析

 

下面的解释就是chunk1-84,都是一一对应1个sample,chunk85,一一对应2个sample,chunk86-88,一一对应一个sample,chunk89,一一对应2个sample,chunk90,一一对应一个sample。

超详细MP4格式分析

 

可以根据sample size去读取每一帧数据的大小。

 

ftyp

File Type Box,⼀般在⽂件的开始位置,描述的⽂件的版本、兼容协议等。

超详细MP4格式分析

 

moov

Movie Box,包含本⽂件中所有媒体数据的宏观描述信息以及每路媒体轨道的具体信息。⼀般位于放在⽂件末尾,但如果为了⽀持http边下载边播放则需要将moov提前。注意,当改变moov位置时,内部⼀些值需要重新计算。

超详细MP4格式分析

 

mdat

Media Data Box,存放具体的媒体数据。

超详细MP4格式分析

 

Moov Insider

mp4的媒体数据信息主要存放在Moov Box中,是我们需要分析的重点。moov的主要组成部分如下:

mvhd

Movie Header Box,记录整个媒体⽂件的描述信息,如创建时间、修改时间、时间度量标尺、可播放时⻓等。

下图示例中,可以获取⽂件信息如时⻓为 Duration: 5016 ms秒。

超详细MP4格式分析

 


超详细MP4格式分析

 

udta

User Data Box,⾃定义数据。

track

Track Box,记录媒体流信息,⽂件中可以存在⼀个或多个track,它们之间是相互独⽴的。

超详细MP4格式分析

 

每个track包含以下⼏个组成部分:

tkhd

Track Header Box,包含关于媒体流的头信息。下图示例中,可以看到流信息如视频流宽度800,⻓度1920。

超详细MP4格式分析

 


超详细MP4格式分析

 

⾳频的tkhd,则⽐如duration、volume等。

超详细MP4格式分析

 


超详细MP4格式分析

 

mdia

Media Box,这是⼀个包含track媒体数据信息的container box。⼦box包括:

mdhd:Media Header Box,存放视频流创建时间,⻓度等信息。

hdlr:Handler Reference Box,媒体的播放过程信息。

minf:Media Information Box,解释track媒体数据的handler-specific信息。minf同样是个containerbox,其内部需要关注的内容是stbl,这也是moov中最复杂的部分。stbl包含了媒体流每⼀个sample在⽂件中的offset,pts,duration等信息。想要播放⼀个mp4⽂件,必须根据stbl正确找到每个sample并送给解码器。

mdia展开如下图所示:

超详细MP4格式分析

 


超详细MP4格式分析

 

mdhd

Media Header Box,存放视频流创建时间,⻓度等信息。视频的mdhd,Time scale,Duration等信息。

超详细MP4格式分析

 

⾳频的mdhd,也类似视频,但要注意Time scale,我们在计算时间戳的时候都要使⽤该Time scale,对应我们流⾥⾯的AVStream->time_base

超详细MP4格式分析

 

hdlr

Handler Reference Box,媒体的播放过程信息视频的hdlr,重点Component subtype: vide。

超详细MP4格式分析

 

⾳频的hdlr,Component subtype: soun,如果我们多个⾳轨的时候,Component name:粤语。

超详细MP4格式分析

 

我们分析的⽂件另⼀路⾳轨,根据不同的名字来进行区别。

超详细MP4格式分析

 

minf

minf:Media Information Box,解释track媒体数据的handler-specific信息。minf同样是个containerbox,其内部需要关注的内容是stbl,这也是moov中最复杂的部分。stbl包含了媒体流每⼀个sample在⽂件中的offset,pts,duration等信息。想要播放⼀个mp4⽂件,必须根据stbl正确找到每个sample并送给解码器。

⽽且需要注意的是,minf⾥⾯的⼦容器,⾳频和视频轨是有区别的,⽐如视频轨:vmhd, ⾳频轨则为:smhd

 

vmhd

超详细MP4格式分析

 

smhd

超详细MP4格式分析

 

Stbl Insider

Sample Table Box,上⽂提到mdia中最主要的部分是存放⽂件中每个sample信息的stbl。在解析stbl前,我们需要区分chunk和sample这两个概念。

在mp4⽂件中,sample是⼀个媒体流的基本单元,例如视频流的⼀个sample代表实际的nal数据chunk是数据存储的基本单位,它是⼀系列sample数据的集合,⼀个chunk中可以包含⼀个或多的sample。

超详细MP4格式分析

 

stbl⽤来描述每个sample的信息,包含以下⼏个主要的⼦box:

stsd

Sample Description Box,存放解码必须的描述信息。下图示例中,对于h264的视频流,其具体类型为 avc1 ,extensions中其中存放有sps,pps等解码必要信息。

视频的stsd

超详细MP4格式分析

 

⾥⾯包含了avc1,avc1⾥⾯⼜包含了avcC和pasp。

超详细MP4格式分析

 

avc1:包含了视频Width、Height。

avcC:包含了视频编码器相关的信息,包括sps、pps等信息。

超详细MP4格式分析

 

 

超详细MP4格式分析

 

 

超详细MP4格式分析

 

 

超详细MP4格式分析

 

 

超详细MP4格式分析

 


超详细MP4格式分析

 


超详细MP4格式分析

 

⾳频的stsd

用Hexinator分析,包含了音频相关的信息,比如采样率,通道数。

超详细MP4格式分析

 

stts

Time-to-Sample Box,定义每个sample时⻓。Time-To-Sample的table entry布局如下:

超详细MP4格式分析

 

stts table entry布局

sample count:sample个数。

sample duration:sample持续时间。

持续时间相同的连续sample可以放到⼀个entry⾥达到节省空间的⽬的。这⾥先给出来的是视频的stts,Number of entries,这个参数需要注意并不是sample的个数,sample的实际数量需要将每个entry的sample count进⾏累加才是真正的sample个数。

下图示例中,第1个sample时间为3720,单位⽤mdhd的time scale进⾏换算,⽐如视频的是90000,此时换算成秒为3720/90000 = 0.0413333333333333秒

超详细MP4格式分析

 


超详细MP4格式分析

 

再给出个⾳频的stts,只是mdhd的time scale的差别,之前我们看到⾳频为44100,则计算第⼀个sample的时间。1024/44100=0.0232199546485261秒。

超详细MP4格式分析

 

stss

Sync Sample Box,同步sample表,存放关键帧列表,关键帧是为了⽀持随机访问。

stss的table entry布局如下:

超详细MP4格式分析

 

stss table entry布局

下图示例中,该视频track有3个关键帧:

超详细MP4格式分析

 

 

超详细MP4格式分析

 

stsc

Sample-To-Chunk Box,sample-chunk映射表。

上⽂提到mp4通常把sample封装到chunk中,⼀个chunk可能会包含⼀个或者⼏个sample。Sample-To-Chunk Atom的table entry布局如下图所示:

超详细MP4格式分析

 

First chunk:使⽤该表项的第⼀个chunk序号

Samples per chunk:使⽤该表项的chunk中包含有⼏个sample

Sample description ID:使⽤该表项的chunk参考的stsd表项序号

下图示例中,可以看到该视频track⼀共有1个stsc表项,chunk序列1-x,每个chunk包含⼀个sample。这⾥则说明每个chunk⾥⾯只有⼀个sample⼀个chunk是可以有多个sample)。

超详细MP4格式分析

 

stsz

Sample Size Box,指定了每个sample的size。Sample Size Atom包含两sample总数和⼀张包含了每个sample size的表

sample size 表的entry布局如下图:

超详细MP4格式分析

 

下图示例中,该视频流⼀共有110个sample,第1个sample⼤⼩为42072字节,第2个sample⼤⼩为7354个字节。

超详细MP4格式分析

 


超详细MP4格式分析

 

stco

Chunk Offset Box,指定了每个chunk在⽂件中的位置,这个表是确定每个sample在⽂件中位置的关键。该表包含了chunk个数和⼀个包含每个chunk在⽂件中偏移位置的表。每个表项的内存布局如下:

超详细MP4格式分析

 

需要注意,这⾥stco只是指定的每个chunk在⽂件中的偏移位置,并没有给出每个sample在⽂件中的偏移。想要获得每个sample的偏移位置,需要结合 Sample Size box(stsz)和Sample-To-Chunk(stsc) 计算后取得。

下图示例中,该视频流第1个chunk在⽂件中的偏移为4750,⽽这⾥是每个chunk只有⼀个sample,此时第⼀个sample的起始位置就为4750->0x1D78,数据⼤⼩则参照stsz,第⼀个sample size为172818。

超详细MP4格式分析

 

⽐如偏移位置,7544->0x1D78。

超详细MP4格式分析

 


超详细MP4格式分析

 

如何计算sample偏移位置

上⽂提到通过stco并不能直接获取某个sample的偏移位置,下⾯举例说明如何获取某⼀个pts对应的sample在⽂件中的位置。

⼤体需要以下步骤:

(1)将pts转换到媒体对应的时间坐标系。

(2)根据stts((decoding) time-to-sample)计算某个pts对应的sample序号

(3)根据stsc(sample-to-chunk)计算sample序号存放在哪个chunk中

(4)根据stco(chunk offset)获取对应chunk在⽂件中的偏移位置

(5)根据stsz获取sample在chunk内的偏移位置并加上第4步获取的偏移,计算出sample在⽂件中的偏移。

例如,想要获取3.64秒视频sample数据在⽂件中的位置。

(1)根据time scale参数,将3.64秒转换为视频时间轴对应的3640000 (假如时间刻度不为毫秒)。

视频轨:time scale为90000,转成对应的时间戳为3.64秒*90000。

(2)遍历累加下表所示stts所有项⽬,计算得到3640000位于第110个sample = 327600。

(3)计算出多个sample_deltas叠加才到了327600, 我们这⾥姑且按3780作为平均值计算,实际是3720*1+3780*1+3690*1+3780*2 ...... 这样⼀直叠加进⾏。327600/3780 =86.66666666666667,取整为86。

超详细MP4格式分析

 

(4)查询下表所示stsc所有项⽬,计算得到第86个sample位于第86个chunk,并且在该chunk中位于第1个sample(因为我们的码流是每个chunk对应了⼀个sample)。

超详细MP4格式分析

 

(5)查询下表所示stco所有项⽬,得到第86个chunk在⽂件中偏移位置为1004678。使⽤hexinator。

超详细MP4格式分析

 

(6)查询下表所示stsz所有项⽬,得到第86个sample的size为20934。计算得到3.64秒视频sample数据在⽂件中。

offset:1004678+0 = 1004678

size:20934。

超详细MP4格式分析

 

验证:⽤编辑器打开mp4⽂件,定位到⽂件偏移1004678位置。09分隔符,这⾥占⽤了6个字节, 再看真正的数据区域,前4字节也为 NALU的⻓度0x000051bc=20924。

总共占⽤的字节计算 4+2+4+20924 = 20934。

超详细MP4格式分析

 

《整理mp4协议重点,将协议读薄》:

超详细MP4格式分析

 

⼀个chunk含有多个sample的情景参考下⾯链接进⾏分析:

mp4⽂件格式重点解析:https://www.jianshu.com/p/44c9567d8fcb

 

本篇文章就分析到这里,非常详细的MP4分析,如果对你有用,可以关注,点赞,收藏,转发。



Tags:MP4格式   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
如何把m4v转换成mp4格式?M4V是一种应用于网络视频点播网站和移动手持设备的视频格式,是MP4格式的一种特殊类型。由苹果公司创造,此种格式为 iPod 、iPhone 和 PlayStation Port...【详细内容】
2021-11-03  Tags: MP4格式  点击:(38)  评论:(0)  加入收藏
1.MP4解析工具 mediainfo mp4box:http://download.tsi.telecom-paristech.fr/gpac/mp4box.js/filereader.html 对于Mp4来说,都是一个个box来去组织元素。比如竖着的box,就是一...【详细内容】
2020-09-02  Tags: MP4格式  点击:(1013)  评论:(0)  加入收藏
相比在电脑中观看视频,似乎现如今的年轻人更喜欢在手机中观看视频,我们可以一个星期甚至一个月不用电脑,但是相信没有几个人可以忍受一天不玩手机吧?今天,小峰想要为大家分享的一...【详细内容】
2020-08-28  Tags: MP4格式  点击:(139)  评论:(0)  加入收藏
对于各大视频网站来说都有自己的专属文件格式,像优酷所用的KUX、爱奇艺QSV等。其实大家都知道这种专有格式就只能用它们自家的客户端才能打开,这是非常不方便的。就好像优酷独...【详细内容】
2019-07-17  Tags: MP4格式  点击:(5273)  评论:(0)  加入收藏
▌简易百科推荐
今天还真是有点小激动啊,B站看来要和抖音杠上了,之前抖音推出网页端要对标B站,不过似乎大家没有用网页刷抖音的习惯。但是这次B站竟然推出了“必剪”电脑客户端,激动的我赶紧下...【详细内容】
2021-12-14  最佳应用    Tags:剪辑   点击:(20)  评论:(0)  加入收藏
做短视频的话我们需不需要跟着热点走呢?答案当然是肯定的!而且还是一定要的!为什么呢?因为热点是最大的流量池,比如最近的大S离婚事件就是热点,这是最大的流量池。所有人的目光都...【详细内容】
2021-12-01  易撰    Tags:短视频   点击:(24)  评论:(0)  加入收藏
平时工作的时候想必大家都有听音乐(摸鱼)的视频,音乐给我们的生活带来了很大的乐趣,但是很多时候我们会发现一些格式的限制,无法播放我们用各种工具录制的音乐,我们现在就来对音频...【详细内容】
2021-11-16  下科技小助手    Tags:MP3   点击:(26)  评论:(0)  加入收藏
游戏视频录制,用什么软件录屏好?小关这几周在某鱼看到了好多的游戏主播,这些游戏主播有的比技术,有的比能说会道,有的比样貌。都在各自得直播间里面玩得热火朝天,有自己的一处小天...【详细内容】
2021-11-11  杨姐爱智能    Tags:录屏   点击:(35)  评论:(0)  加入收藏
怎么在电脑上录制高清视频?小米最近在学校有点闲,因为这个学期的课程较少,自己也提前完成了许多的学习任务,想着怎么有效的把这些空闲的时间好好利用起来,不能白白浪费这些时间吧...【详细内容】
2021-11-11  张哥聊科技    Tags:高清视频   点击:(22)  评论:(0)  加入收藏
时长:4h 14m | 32节| 视频:1280×720,44 KHz | 2.6 GB语言:英语+中英文字幕(根据原英文字幕机译更准确)成为Adobe Premiere Pro专业版视频编辑专家的唯一要求你会学到什么a...【详细内容】
2021-11-03  CG达人  搜狐号  Tags:Premiere   点击:(23)  评论:(0)  加入收藏
我们在制作短视频的时候,需要自己给视频配音,然后与拍摄内容合成还是很难的,所以少不了后期配音的环节。今天小编给大家推荐几款,超好用的短视频配音软件。1、剪映小伙伴是不是...【详细内容】
2021-11-03  语音dub爱好者  搜狐号  Tags:视频配音   点击:(65)  评论:(0)  加入收藏
视频怎么压缩变小?视频的出现虽然说给我们的日常生活带来了极大的消遣与事业发展,但是不得不说视频格式非常占用内存,如果想要进行视频的拍摄、剪辑、放映对工具都需要较高的要...【详细内容】
2021-11-03  娱乐情怀    Tags:视频   点击:(44)  评论:(0)  加入收藏
如何把m4v转换成mp4格式?M4V是一种应用于网络视频点播网站和移动手持设备的视频格式,是MP4格式的一种特殊类型。由苹果公司创造,此种格式为 iPod 、iPhone 和 PlayStation Port...【详细内容】
2021-11-03  纸折兔    Tags:m4v   点击:(38)  评论:(0)  加入收藏
FFmpeg的作用: FFmpeg是一个优秀的多媒体框架; FFmpeg可以运行在Linux,Mac,Windows等平台; FFmpeg可以解码,编码,转码,复用,解复用,过滤音视频数据。播放器基本架构:image.pngSDL视频渲...【详细内容】
2021-10-27  linux音视频    Tags:FFmpeg   点击:(30)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条