ISO BMFF格式中mvhd与mdhd box的timescale差异及相关疑问
ISO BMFF中mvhd与mdhd的timescale区别及相关问题解答
一、mvhd与mdhd的timescale核心区别
根据ISO BMFF官方定义:
mvhd(Movie Header Box)的timescale:
用于指定整个影片的时间基准,即每秒包含的时间单位数量。例如,以1/60秒为时间单位时,timescale值为60。
mdhd(Media Header Box)的timescale:
用于指定单个媒体轨道(视频/音频)的时间基准,即该轨道每秒包含的时间单位数量。例如,以1/60秒为时间单位时,timescale值为60。
两者的核心差异:
- mvhd是全局时间基准,作用于整个影片的所有轨道,统一协调不同轨道的时间同步;
- mdhd是轨道级时间基准,每个媒体轨道可独立设置,适配自身媒体类型的时间精度需求。
二、mvhd为1000、帧率24时,视频mdhd设为24000是否正确?
你的思路存在误区:视频mdhd的timescale与mvhd没有直接的乘法关联。
- 视频轨道的mdhd timescale通常由编码格式或时间精度需求决定:比如H.264/H.265编码常用90000作为timescale(对应SMPTE标准时间基准),也可以根据帧率设置为24(1/24秒为单位)、24000等,只要能准确表达帧的时间戳即可;
- 音频轨道的mdhd timescale一般与采样率一致(如48000),这是合理的,因为音频的时间单位和采样点直接对应。
所以将视频mdhd设为24000本身是合法的,但并非必须遵循「帧率×mvhd timescale」的规则,具体取值取决于编码和播放场景的需求。
三、为何mvhd timescale会出现30、90000等不同取值?
mvhd的timescale选择取决于影片的应用场景:
- 取值为30:常见于对时间精度要求不高的场景,比如早期流媒体、简单短视频,将时间单位设为1/30秒,方便和30fps的帧率对齐,简化时间戳计算;
- 取值为90000:这是SMPTE标准定义的高精度时间基准,广泛用于专业视频编码(H.264/H.265)和流媒体分片(如HLS/DASH)。90000的高数值能提供更精细的时间粒度,适配不同帧率的内容(24fps、30fps、60fps等),避免时间戳转换时的精度损失,确保多轨道同步的准确性。
你提到的两个案例:
- 某文件mdhd timescale为30:说明该轨道以1/30秒为时间单位,适合低精度的视频场景;
- 某视频分片mdhd timescale为90000:是流媒体场景下的标准选择,满足高精度时间同步需求。
内容的提问来源于stack exchange,提问作者Kundera
相关产品推荐
相关产品推荐

