我正在使用一些多年前的旧代码来计算MPEG-2视频的持续时间。似乎有些事情已经改变了,因为我得到了1小时49秒的49秒视频。
在文件中找到最后一个GOP头,并提取4字节的TimeCode "040E2AC0“。在32位LongWord中,它以3223981572的形式读取小endian。
然后使用汇编程序函数bswap交换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秒是正确的。
我不太擅长用位操作来调试这个问题。这有什么问题吗?如果有帮助的话,我可以安排一个视频链接。
非常感谢罗斯。
发布于 2016-07-05 23:31:12
张贴你的档案是个好主意。
如果您查看文件中的第一个GOP,它有04 08 00 40的字节值(正如您所说的,最后一个GOP有04 0E 2A C0 )。
当第一个GOP在您的过程中运行时,结果是01:00:00,即1小时。
我没有找到任何规格,但显然长度是第一和最后的GOP之间的区别。
https://stackoverflow.com/questions/38112928
复制相似问题