读取MPEG-2时间码

时间:2016-06-30 02:19:14

标签: pascal mpeg-2 timecodes

我使用多年前的一些旧代码来计算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处正确。

我对调试问题的位操作不太满意。这有什么问题吗?如果有帮助,我可以安排视频链接。

非常感谢, 罗斯。

1 个答案:

答案 0 :(得分:2)

发布文件是个好主意。

如果你看一下文件中的第一个GOP,它的字节值为04 08 00 40(最后一个GOP就像你说的那样04 0E 2A C0

当第一个GOP通过你的程序时,结果是01:00:00,即1小时。

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