1

我正在做一个项目,我正在从一些输入视频设备接收原始帧。我正在尝试使用 FFMPEG 库将这些帧写入视频文件中。我无法控制从输入源获得的帧速率。该帧速率在运行时也有所不同。现在我的问题是如何在录制的视频和即将到来的视频之间同步。根据我在 FFMPEG 中设置的帧速率和我收到的录制视频播放的实际帧速率比输入视频快或慢。我尝试按照以下链接在编码视频中添加时间戳(作为 numOfFrames),但这没有帮助。

ffmpeg速度编码问题

请告诉我一种同步两者的方法。这是我第一次使用 FFMPEG 或任何多媒体库,因此任何示例都将受到高度赞赏。

我正在使用 directshow ISampleGrabber 接口来捕获这些帧。谢谢你

4

1 回答 1

1

所以最后我想出了如何做到这一点。这是如何..

首先,我从不为帧提供时间戳的源过滤器的 PREVIEW 引脚进行预览。所以应该从源过滤器的捕获引脚获取帧。比在SampleCB回调函数中我们无法使用IMediaSample::GetTime(). 但是这个函数会以 100ns 为单位返回时间。FFMPEG 要求它以 1/time_base 为单位。这里 time_base 是所需的帧速率。所以directshow时间戳需要先转换成FFMPEG单位。比我们可以在AVFrame::ptsffmpeg的变量中设置pts。需要考虑的另一件事是视频的第一帧在 FFMPEG 中的时间戳应该为 0,因此在从 directshow 时间戳转换为 FFMPEG 时需要注意这一点。

谢谢你

于 2012-10-06T06:56:54.603 回答