视频的持续时间(OpenCV)

Duration of a video (OpenCV)

本文关键字:OpenCV 持续时间 视频      更新时间:2023-10-16

我想获得视频的fps,但无法使用属性CV_CAP_PROP_fps。我曾想过,有了视频的帧数和持续时间,我可以得到它。问题是,我找不到一些方法来给出持续时间。有人能帮我吗?

谢谢!

首先,在尝试获取/设置某些属性之前,至少从相机/视频中获取一帧。有时不做它可能会很好,但最好只是做它。
如果它不能解决你的问题,你可以尝试使用不同的属性:

cv::VideoCapture camera("some_movie.avi");
cv::Mat img;
camera >> img;
std::cout << camera.get(CV_CAP_PROP_FPS) << std::endl;
std::cout << camera.get(CV_CAP_PROP_FRAME_COUNT) << std::endl;
std::cout << camera.get(CV_CAP_PROP_POS_AVI_RATIO) << std::endl;
std::cout << camera.get(CV_CAP_PROP_POS_FRAMES) << std::endl;
std::cout << camera.get(CV_CAP_PROP_POS_MSEC) << std::endl;
std::cout << "setting pos avi ratio to 1" << std::endl;
std::cout << camera.set(CV_CAP_PROP_POS_AVI_RATIO, 1.0) << std::endl;
std::cout << camera.get(CV_CAP_PROP_POS_AVI_RATIO) << std::endl; //i think it's not working - returns bad position(same as the first call of camera.get(CV_CAP_PROP_POS_AVI_RATIO)
std::cout << camera.get(CV_CAP_PROP_POS_FRAMES) << std::endl;
std::cout << camera.get(CV_CAP_PROP_POS_MSEC) << std::endl;

结果:

30
1739
0.0333333
1
33.3333
将pos-avi比率设置为1
1
0.0333333
1739
57966.7

使用总时间(最后一帧的时间)和帧数,您可以自己计算fps。或者,您可以使用第一帧的位置-只需将1.0除以第一个帧的位置,就可以获得fps。