在我们的实现中,我们需要知道用OpenCV解码的帧的pts或帧号,然后根据解码的帧做一些处理后,然后在原始流中的pts或帧号与处理结果之间构建映射。
在检查了OpenCV VideoCapture I/F之后,我没有找到这种方法。
OpenCV 视频接口不会公开有关视频流的许多详细信息。它旨在成为易于帧抓取的高级接口,它不提供对编解码器的低级信息的访问。
VideoCapture::read
返回的帧只是图像,它们不包含有关视频的任何信息(如帧号(。您需要单独手动保留该信息。
如果在文件开头开始解码,则只需对从VideoCapture::read
返回的成功解码帧使用整数计数器。
然后是VideoCapture::get
,您可以使用它访问CV_CAP_PROP_POS_MSEC
,CV_CAP_PROP_POS_FRAMES
和CV_CAP_PROP_FPS
,这是您可以使用OpenCV界面接近PTS的。