我正在做一个项目,在这个项目中,我从一些输入视频设备接收原始帧。我正在尝试使用FFMPEG库在视频文件中写入这些帧。我无法控制从输入源获得的帧率。此帧速率在运行时也会发生变化。现在我的问题是如何在录制的视频和即将到来的视频之间进行同步。根据我在FFMPEG中设置的帧速率和我接收的实际帧速率,录制视频的回放比输入视频快或慢。我试着按照下面的链接在编码的视频中添加时间戳(如numOfFrames),但没有帮助。
请告诉我一种同步两者的方法。这是我第一次使用FFMPEG或任何多媒体库,因此任何示例都将受到高度赞赏。
我正在使用directshow ISampleGrabber接口来捕获这些帧。谢谢
发布于 2012-10-06 14:56:55
所以我终于想出了怎么做。下面是如何..
首先,我从不给帧时间戳的源过滤器的预览引脚中获取预览。因此,应该从源滤波器的捕获引脚获取帧。在SampleCB回调函数中,我们不能使用IMediaSample::GetTime()来获取时间。但此函数将以100 of为单位返回时间。FFMPEG要求它以1/time_base为单位。其中,time_base是所需的帧速率。因此,directshow时间戳需要首先转换为FFMPEG单位。然后我们可以在ffmpeg的AVFrame::pts变量中设置pt。另一件需要考虑的事情是视频的第一帧在FFMPEG中应该有时间戳0,所以在从directshow时间戳转换到FFMPEG 1时需要注意这一点。
谢谢
https://stackoverflow.com/questions/12707224
复制相似问题