我正在尝试同时读取和写入由 AVAssetWriter 编写的 H.264 mov 文件。我设法提取了单个 NAL 单元,将它们打包到 ffmpeg 的 AVPackets 中,并使用 ffmpeg 将它们写入另一种视频格式。它工作正常,生成的文件播放良好,但播放速度不正确。如何从原始 H.264 数据计算正确的 PTS/DTS 值?或者也许还有其他方法可以得到它们?
这是我尝试过的:
将捕获最小/最大帧速率限制为 30,并假设输出文件为 30 fps。事实上,它的 fps 总是小于我设置的值。而且,我认为 fps 在数据包之间不是恒定的。
记住每个书面样本的呈现时间戳,并假设样本一对一映射到 NALU,并将保存的时间戳应用于输出数据包。这行不通。
将 PTS 设置为 0 或 AV_NOPTS_VALUE。不工作。
通过谷歌搜索,我了解到原始 H.264 数据通常不包含任何时间信息。它有时可以在 SEI 中包含一些时间信息,但我使用的文件没有它。另一方面,有一些应用程序完全可以做我想做的事情,所以我想它是可能的。