我使用多年前的一些旧代码来计算MPEG-2视频的持续时间。似乎有些事情发生了变化,因为我在49秒的视频中得到了1小时49秒。
在文件中找到最后一个GOP标题,并提取4字节TimeCode" 040E2AC0"。在32位LongWord中,这读取小端,为3223981572。
然后使用汇编程序函数bswap eax交换endian。结果是68037312.然后一些Pascal代码提取这样的持续时间......
Hours := (TimeCode shr 26) and $1F;
Minutes := (TimeCode shr 20) and $3F;
Seconds := (TimeCode shr 13) and $3F;
小时数为1,但应为0.分钟在0处正确。秒数在49处正确。
我对调试问题的位操作不太满意。这有什么问题吗?如果有帮助,我可以安排视频链接。
非常感谢, 罗斯。
答案 0 :(得分:2)
发布文件是个好主意。
如果你看一下文件中的第一个GOP,它的字节值为04 08 00 40
(最后一个GOP就像你说的那样04 0E 2A C0
)
当第一个GOP通过你的程序时,结果是01:00:00,即1小时。
我没有找到任何规格,但显然长度是第一个和最后一个GOP之间的差异。