视频的持续时间(OpenCV)

时间:2015-03-18 11:08:14

标签: c++ opencv

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

谢谢!

1 个答案:

答案 0 :(得分:1)

首先,在尝试获取/设置某些属性之前,从相机/视频中抓取至少一个帧。有时它可以在没有这样做的情况下正常工作,但更好的方法就是这样做 如果它不能解决您的问题,您可能会尝试使用不同的属性:

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。