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