我使用一些多年前的旧代码来计算 MPEG-2 视频的持续时间。似乎有些事情发生了变化,因为我的 49 秒视频变成了 1 小时 49 秒。
在文件中找到最后一个 GOP 头,并提取出 4 字节时间码“040E2AC0”。在 32 位长字中,以小端字节序读取为 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。
我不擅长通过位操作来调试问题。这有什么问题吗?如果有帮助的话,我可以安排一个视频链接。
非常感谢, 罗斯。
最佳答案
发布您的文件是个好主意。
如果您查看文件中的第一个 GOP,它的字节值为 04 08 00 40
(最后一个 GOP 的字节值为 04 0E 2A C0
正如您所说)
当第一个 GOP 通过您的程序运行时,结果是 01:00:00,即 1 小时。
我没有找到任何相关规范,但显然长度是第一个和最后一个 GOP 之间的差异。
关于pascal - 读取 MPEG-2 时间码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38112928/