读取 MPEG-2 时间码

Read MPEG-2 timecode

我使用多年前的一些旧代码来计算 MPEG-2 视频的持续时间。似乎发生了一些变化,因为我的 49 秒视频需要 1 小时 49 秒。

在文件中找到最后一个 GOP Header,提取 4 字节时间码“040E2AC0”。在 32 位 LongWord 中,这在小端读取为 3223981572.

然后使用汇编程序函数 bswap eax 交换字节序。结果是 68037312。一些 Pascal 代码然后像这样提取持续时间...

Hours   := (TimeCode shr 26) and F;
Minutes := (TimeCode shr 20) and F;
Seconds := (TimeCode shr 13) and F;

小时为 1 但应为 0。分钟正确为 0。秒正确为 49。

我不擅长用位操作来调试问题。这有什么问题吗?如果有帮助,我可以为视频安排 link。

非常感谢, 罗斯.

发布你的文件是个好主意。

如果您查看文件中的第一个 GOP,它的字节值为 04 08 00 40(如您所说,最后一个 GOP 的字节值为 04 0E 2A C0

当第一个 GOP 运行 通过您的程序时,结果是 01:00:00,正好是 1 小时。

我没有找到任何规范,但显然长度是第一个和最后一个 GOP 之间的差异