我正在使用多年前的一些旧代码来计算 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。
我不擅长使用位操作来调试问题。这有什么问题吗?如果有帮助,我可以安排一个视频链接。
非常感谢,罗斯。