在 C++ 中使用具有可变帧速率的 FFmpeg 库(不是 libav 分支)以编程方式捕获视频

Programmatically capturing video with the FFmpeg libaries (not the libav fork) with variable frame rate in c++

我正在使用 c++ 和 OpenGL 开发一个模拟器,我想添加一些视频捕获功能(跨平台是这里的要求)。我决定使用 FFmpeg,因为我可以直接将渲染的帧放入视频中。到目前为止一切顺利,但在 3D 渲染引擎中,您通常无法拥有恒定的帧速率,我认为保持恒定帧速率并不是一个好主意。因此,我试图弄清楚如何使用 FFmpeg 捕获可变帧率视频,或者如何从模拟器的可变帧率转换为 FFmpeg 中视频的恒定帧率。有人可以帮我吗?在可变帧率环境中通常如何捕获视频?

可变帧率主要是混合阶段的一个问题,因为您的容器(例如好的 AVI)可能不支持 VFR。只要您混合成支持每帧时间戳的格式,就应该没问题。 mkv (matroska) 或 mp4 就是很好的例子。然后,只要在 encoding/muxing 期间正确设置 AVPacket.dts,您应该没问题,您的视频应该是 VFR。