我注意到对于一些视频文件,在 AVPacket 结构中返回的 PTS 时间戳不是从 0 开始,而是在一段时间后开始的。例如在 3.128 或什么的。我测试的 99% 的视频文件都有从 0 开始的 PTS 时间戳,但很少有文件有一些从 3.128 或 1.2 或其他东西开始的奇怪时间戳。我应该如何处理这些案件?我是否应该只记录第一个数据包的 PTS 时间戳,然后从所有后续时间戳值中减去此 PTS 以获得基于 0 的 PTS 值?或者我应该如何处理这些基于非 0 的时间戳?谢谢你的帮助!
问问题
1080 次
1 回答
0
Libavcodec/avformat 只是为您提供文件中的数据。不幸的是(或者幸运的是,取决于您的观点),许多文件格式不需要从 0 开始的时间戳。事实上,如果多个文件各自构成较长流的一部分并且您希望能够无损地将它们重新组合在一起。
如果您想要基于 0 的时间戳,那么就像您说的那样,您需要保存最低/第一个时间戳并从所有时间戳中减去该值。但是请注意,对于一些非常丑陋的格式(如 DVD 视频),时间戳在内容中间重置是很常见的,这甚至可能导致您的方法得到负时间戳。如果您预计自己可能会处理此类内容,则需要检测不连续性并对其进行修补。上次我使用 avcodec/avformat,他们没有自动为您执行此操作的功能,但他们现在可能。如果您认为您可能需要它,我会调查它。
于 2012-05-13T16:57:32.117 回答