VideoCapture capture(captureFileName); 我正在使用Opencv 3.3.1。 我正在使用以下鳕鱼。
if (!capture.isOpened()) {
throw "Error when reading file";
}
cout << "capture.get(CAP_PROP_FRAME_COUNT)"
<< capture.get(CAP_PROP_FRAME_COUNT) << endl;
cout << "capture.get(CV_CAP_PROP_FPS)" << capture.get(CV_CAP_PROP_FPS)
<< endl;
当视频大小约为30MB时,capture.get(CAP_PROP_FRAME_COUNT)返回值约为16632。但是,当视频大小约为150MB时,capture.get(CAP_PROP_FRAME_COUNT)返回值约为-2.30584e + 14。
其余代码无法正常运行(在该行之后)。以前有人用opencv运行大型视频吗?
更新:
我意识到问题出在源视频中。我用vlc下载该流,但未正确停止录制,一分钟的视频超过100mb(30mb后的帧损坏)。 VideoCapture在其他视频上效果很好。
答案 0 :(得分:2)
它与视频大小无关。对于大小大于150 MB的视频,将正确返回该属性。
如果两个视频的容器和视频编解码器相同,则很可能第二个视频因某种原因损坏。这可能会发生写入视频文件时不干净中止。如果您绝对需要帧计数,则可以尝试通过重新编码(例如使用ffmpeg)来解决此问题。
否则,只需忽略帧数并继续抓取帧,直到到达视频末尾为止,即使您没有帧数,这仍然可以正常工作。