MP4 / MOV 结构解析器

查看 MP4/M4A/MOV 的封装结构、编码参数与真实码率,诊断影响流式播放的问题。

视频文件"能不能流式播放"、"码率到底多少"、"是什么编码"这些问题的答案都写在文件的封装结构里,但播放器从不把它们摆到台面上。本工具按 ISO-BMFF 规范逐字节解析 MP4/M4A/MOV 的 box 树:从 ftyp 的封装品牌,到 moov 里的轨道定义,再到 avcC/esds 里的具体编码参数,全部摊开给你看,连每个 box 的字节偏移和大小都会列出。

解析在你浏览器内完成,视频不会上传。除了罗列参数,工具还会做几项自诊断:moov 是否在 mdat 之前(决定能不能边下边播)、是否为分片封装(fMP4)、时长与 timescale 是否可信——这些正是"视频网站转码失败"、"拖动进度条要等半天"这类问题的直接原因。

moov 位置为什么决定播放体验

MP4 的元数据集中在 moov box 里:播放器必须先读到它才知道轨道、时长与关键帧位置。moov 在文件开头(faststart)时,边下载边播没有问题;moov 在文件末尾时,播放器要把整个文件下载完才能开始解码——这就是"网盘里的视频拖动进度条转半天"的常见原因。诊断出 moov 后置时,用 ffmpeg 加 -movflags +faststart 重新封装即可,无需重新编码。

实际码率和声明码率为什么对不上

文件的 btrt box 或编码器会"声明"一个目标码率,但真实码率只能用样本表(stsz)里每个样本的实际字节数算出来。两者差得远通常有两种情况:一是内容简单(静止画面、纯语音),编码器实际用量远低于目标;二是分片封装文件把统计信息分散在各 moof 里,头部声明不准。本工具优先展示按字节数算出的实际值。

box 树是查看文件健康度的透视镜

ISO-BMFF 把一切信息装进带 4 字符类型名的 box 里,层层嵌套。结构表会列出每个 box 的类型、偏移与大小:mdat 应该占据绝大部分体积,moov 通常几十到几百 KB;如果出现 0 长度的异常 box 或 moov 缺失,基本可以断定下载不完整或文件被截断。M4A 音频与 MOV 视频是同一种封装,本工具同样支持。

常见问题

视频会被上传吗?
不会。解析只读取文件的字节结构,在你浏览器内完成,没有上传逻辑。几百 MB 的视频文件也只会读头部与 moov 所需的字节。
能解析哪些文件?
所有 ISO-BMFF 家族:MP4(.mp4/.m4v)、音频(.m4a/.mp4a)、QuickTime(.mov)以及 iPhone 录像的 HEVC 版本。WebM/MKV 是另一种封装(EBML),不在支持范围内。
怎么把 moov 移到文件开头?
用 ffmpeg 重新封装:ffmpeg -i input.mp4 -c copy -movflags +faststart output.mp4。-c copy 表示不重新编码,几秒钟完成,画质无损。
分片封装(fMP4)是问题吗?
不是。fMP4 是流媒体(DASH/HLS)的标准做法,把元数据拆到每个分片里便于边录边传。它不适合的场景是完整文件下载——某些老播放器对分片文件的总时长支持不佳,此时可重封装为普通结构。

相关工具