Opencv CAP_PROP_FRAME_COUNT返回负的负数

时间:2018-06-21 06:58:25

标签: c++ opencv

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在其他视频上效果很好。

1 个答案:

答案 0 :(得分:2)

它与视频大小无关。对于大小大于150 MB的视频,将正确返回该属性。

如果两个视频的容器和视频编解码器相同,则很可能第二个视频因某种原因损坏。这可能会发生写入视频文件时不干净中止。如果您绝对需要帧计数,则可以尝试通过重新编码(例如使用ffmpeg)来解决此问题。

否则,只需忽略帧数并继续抓取帧,直到到达视频末尾为止,即使您没有帧数,这仍然可以正常工作。