Posted in

MKV文件解析工具:轨道信息与逐帧列表

拿到一个 MKV 文件,播放器能打开,却不一定告诉你里面有几条音轨、字幕是什么格式,或者某个时间点到底对应哪条帧记录。这篇「技术笔记」配了一款 MKV 文件解析工具:像使用 MediaInfo 一样先看综合信息,再按轨道和时间戳深入检查逐帧列表,整个过程在浏览器本地完成,无需上传视频。

如何使用MKV文件解析工具

  1. 拖入一个文件:把 MKV 拖到文件框,或点击「选择文件」,页面会自动开始扫描。工具也接受同属相关容器家族的 MKA、MKS 和 WebM,并读取文件头确认格式,不只看扩展名。误用 .mp4 后缀的 Matroska 文件也能选择并解析,真正的 MP4 容器暂不支持。没有现成文件时,可以先点「试用示例文件」。
  2. 先看综合信息:解析完成后,会显示文件大小、容器类型、声明时长、轨道数量、帧记录数量,以及文件中声明的标题、封装程序、写入程序和日期等。字段未写入文件时,页面会标为「未声明」,不会补造信息。
  3. 逐条查看轨道:视频轨道显示 Codec ID、像素尺寸和默认帧时长;音频轨道显示采样率、声道和容器声明的位深。字幕也会作为独立轨道列出。每条轨道都附有语言、默认与强制标志、已扫描帧数和数据量。不同音轨使用不同底色,轨道卡片、颜色图例和逐帧表格保持对应;翻页或筛选后,同一条音轨的颜色不变,轨道编号也会一直保留。
  4. 筛选逐帧列表:选择轨道,填写起止 PTS,或勾选「仅关键帧」,再按「应用筛选」。时间单位为毫秒;每页显示 100 条,支持翻页和页码跳转。「重置筛选」可恢复全部记录。
  5. 导出媒体信息:综合信息区的「导出媒体信息 CSV(TAB)」会单独保存文件概况、全部轨道属性、单位和警告。这个文件使用 UTF-8 编码和 TAB 制表符分列,不随逐帧表格的筛选改变;在 Excel 或其他表格软件中导入时,选择「制表符」作为分隔符。文件名以 -media-info.csv 结尾。
  6. 导出帧记录后继续核对:「导出 CSV」和「导出 JSON」覆盖当前已经应用的筛选结果,不限于当前页。JSON 还包含文件及轨道概况、时长来源、Block 偏移、合帧位置和 DiscardPadding 等字段。改了筛选框但还没按「应用筛选」时,导出仍按上一次已应用的条件进行。

扫描中可以点击「取消解析」;完成后用「清空」释放当前结果,再换一个文件。文件通过浏览器分块读取,解析运行在独立 Worker 中,不需要把整个视频一次性载入内存。为控制帧索引的内存消耗,最多保留 50 万条帧记录;到达上限会明确标注「部分结果」,统计和导出只覆盖已经扫描的部分。

MKV是什么?为什么视频、音频和字幕可以放在一起

MKV 是 Matroska 的一种文件形式,本质上是一只带结构的容器。视频可能用 H.264、HEVC 或其他编码,音频和字幕也各有自己的格式;文件后缀相同,不代表内部编码相同。判断播放器兼容性时,应先看轨道的 Codec ID,而不是只看文件名。

Matroska 使用 EBML 描述层级结构。可以把它理解为:文件里有说明整体情况的 Info,有列出轨道的 Tracks,也有容纳媒体记录的 Cluster。工具沿着这套结构读取轨道、时间戳和数据边界;Matroska 官方技术文档提供了这些元素的定义。

逐帧扫描会继续读取 SimpleBlock 和 BlockGroup。一个 Block 不一定只放一帧:音频等较小的数据可以通过 lacing,把多条帧记录合在一起保存。本工具支持 Xiph、固定大小和 EBML 三种合帧方式,会把它们拆成单独的列表行,而不是把一整个合帧 Block 当作一帧。

逐帧列表里的属性分别说明什么

PTS 是呈现时间,不是文件里的排列序号。 列表保留文件存储顺序,音视频记录会交错出现;有帧重排的视频也可能出现 PTS 前后跳动。看到 0、600、200 毫秒这样的顺序,不能只凭这一点判断视频损坏。DTS 与 PTS 不是一回事,本工具没有从编码码流中恢复 DTS,因此不会显示一个推算值冒充解码时间。

大小和偏移回答的是「数据在哪里」。 大小按字节统计,只包含这条帧记录的存储数据,不含 Block 头;偏移从文件第 0 字节开始计算。文件总体大小还包含封装结构、索引等内容,所以逐帧大小相加通常不会等于整个文件的大小。某帧更大,也不意味着它的画质一定更好。

关键帧标志来自容器。 SimpleBlock 有对应的标志位,BlockGroup 则可依据是否存在 ReferenceBlock 判断随机访问点。本工具不会进一步解码视频来识别 I/P/B 类型;音频记录也可能被标为关键帧,这不代表它们都是视频中的 I 帧。

时长和合帧后续时间戳可能未知。 单帧 Block 的时长可来自 BlockDuration,轨道也可能提供 DefaultDuration。对于合帧,工具仅在 DefaultDuration 提供逐帧时长依据时,推算后续帧的 PTS;只有 Block 总时长时,不强行把它均分。无法确定的字段显示「未知」,同时保留这些帧共同的 Block PTS,避免用整齐的数字掩盖缺失信息。相关区别可参阅官方 Block 与合帧说明。

哪些场合用得上:三个文件排查案例

案例一:一部片子有多条音轨,先确认语言和编码

一个 MKV 可能同时封装中文、英文音轨以及多条字幕。播放时语言不符合预期,可以先查看轨道编号、语言和默认标志,再结合播放器的轨道选择设置排查。容器里的默认标志只是线索,播放器还可能按自身语言偏好选轨,不能把它当成一定会自动播放的保证。

案例二:重新封装后,核对媒体记录是否仍然存在

同一段素材重新封装后,文件大小、Block 位置和交错顺序可能变化。可以分别解析前后两个文件,筛选同一条视频轨道,导出 CSV 比较记录数量、PTS 和帧大小,帮助发现明显的缺轨或时间戳差异。轨道编号也可能重排,比较前要先核对编码和轨道身份。这种检查不是内容哈希校验,不能仅凭数量相同就认定媒体数据完全一致。

案例三:定位剪辑附近的关键帧和时间戳

准备截取某个片段时,可以选择视频轨道,输入目标附近的 PTS 范围,再查看容器标记的关键帧。这有助于理解为什么直接复制码流的剪切边界可能受关键帧位置限制,也便于把记录导出给后续分析工具。这个页面负责查看信息,并不执行剪切、修复或重新编码。

和MediaInfo相比,这个工具的边界在哪里

这是一款独立实现的 MKV 容器检查工具,并没有集成 MediaInfo,也不覆盖它的全部格式和字段。它的重点是文件概况、轨道信息与可筛选的逐帧存储属性,不提供图像预览、HDR 判断、编码 Profile 识别、字幕内容提取或码流内部分析。

文件平均码率按文件大小和容器声明时长计算,包含封装开销。默认帧率仅由 DefaultDuration 换算,不是逐帧测得的平均帧率;缺少声明时长时,页面会显示已扫描记录的已知末端时间,但不会把它当成准确的文件总时长。

本工具不验证 CRC,也不会解密或恢复缺失数据。对于能识别边界的文件末尾截断,会保留截断前完整的帧记录,并明确标注「部分结果 · 文件截断」;不完整的末尾 Block 不会混入列表。文件头或关键轨道信息不完整、内部结构损坏、无效长度及不支持的 EncryptedBlock 仍会报错。ContentEncodings 轨道只展示存储层信息,不解压或解密。多 Segment 文件只检查第一个 Segment 并给出提示。需要完整码流分析或修复时,仍应使用相应的专业桌面工具。

页面没有上传接口、远程解析服务或第三方运行依赖。只有点「试用示例文件」时,会从本站读取一份自制的小型示例;你选择的文件内容留在设备内存中。先看综合信息,再带着一个具体问题筛选轨道和 PTS,通常比面对一长串字段逐行猜测更容易找到线索。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注