2

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

在文件中找到最后一个 GOP Header,提取 4 字节 TimeCode 为“040E2AC0”。在 32 位 LongWord 中,这在 little endian 中读取为 3223981572。

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

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

小时是 1 但应该是 0。分钟是正确的 0。秒是正确的 49。

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

非常感谢,罗斯。

4

1 回答 1

2

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

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

当第一个 GOP 在您的过程中运行时,结果是 01:00:00,即 1 小时。

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

于 2016-07-05T23:31:12.660 回答