FFMpeg笔记(十二)MP4 box解析
2023-05-27 12:38 jiayayao 阅读(1122) 评论(0) 编辑 收藏 举报mp4是MPEG-4 Part 14的实现,包含3大box。
一、ftyp
file type box,包含视频文件使用的mp4标准,也作为probe mp4的标志;
二、moov
包含媒体的元数据信息,包含一个mvhd(也就是header box)和若干个trak(track)。trak包含一条音/视频轨道信息和音视频数据的编码格式、音视频数据样本、chunks的大小,存储位置,PTS等。
1、mvhd
movie header box,包含duration和timescale,duration是媒体时长,timescale是单位为秒的媒体时长,可以理解为每秒经历的时间刻度。
2、tkhd
track header box,如果是视频track,会包含宽高信息;
三、mdat
media data box,moov box记录的每帧音视频数据位置信息,实际都存储在mdat box中,通过解析moov box可以获取到每帧音视频数据具体位置,方便播放器进行seek操作。
四、表格总结
Box | 含义 | 备注 | |||
ftyp | file type box | 作为probe标识 | |||
moov | |||||
mvhd | movie header | duration和timescale | |||
meta | |||||
trak | track | 每读到一个track,新增一个AVStream | |||
tkhd | track header | 视频宽高 | |||
tref | |||||
trgr | |||||
edts | |||||
elst | |||||
meta | |||||
mdia | |||||
mdhd | |||||
hdlr | 指定流类型 | ||||
...... | |||||
stbl | sample table box | ||||
stsd | sample descriptions | 采样描述容器:包含codec type,extradata(即SPS、PPS) | |||
stts | (decoding)time-to-sample |
stts stss ctts三个box用于保存媒体数据和时间戳的对应关系。 采样时间容器:stts可以计算每个sample的dts |
|||
ctts |
(composition) time to sample |
pts | |||
stsc |
sample-to-chunk, patial data-offset infomation |
stsc stsz stco三个box用于保存每帧视频或音频数据在文件中的保存位置。 | |||
stsz | sample sizes | 样本大小 | |||
stss |
sync sample table |
采样时间容器:存放了关键字的序号(I帧),seek时需从关键帧开始解码。 | |||
stco | chunk offset | chunk偏移容器 | |||
mdat |
五、fmp4与mp4的区别
fmp4是MPEG-4 Part 12标准的扩展。与传统mp4不同,fmp4格式将媒体文件分成若干片段(fragment),每个片段都是一个完整的mp4文件(不同于CMAF,需要init文件进行保存流格式信息)。fmp4不需要moov box来进行initialization,fmp4的moov box只包含一些track信息,其音视频的metadata信息与数据都存在一个个moof、mdat中。
可以使用FFmpeg 命令生成fmp4 文件,其中frag_keyframe表示要根据关键帧将输出文件分成多个片段,empty_moov表示要在文件的开头添加一个空的moov原子,以便在播放器加载文件时更快地解析它。
ffmpeg -i input.mp4 -movflags frag_keyframe+empty_moov output.mp4
本文来自博客园,作者:jiayayao,邮箱:jiayayao@126.com,转载请注明原文链接:https://www.cnblogs.com/jiayayao/p/17433297.html