Playing video to correct speed with OpenCV

I have problem with plying video file, why it is slow motion ? How can I make it normal speed?

#include"opencv2/opencv.hpp" 
using namespace cv; 

int main(int, char**) 
{ 
    VideoCapture cap("eye.mp4"); 
    // open the default camera 
    if (!cap.isOpened()) 
        // check if we succeeded 
        return -1; 

    namedWindow("Video", 1); 
    while (1) 
    { 
        Mat frame; 
        cap >> frame; 
        imshow("Video", frame); 
        if (waitKey(10) == 'c') 
            break; 
    } 
    return 0; 
}

Upvotes: 3

Views: 19869

Answers (1)

Eric Omine
Eric Omine

Reputation: 529

VideoCapture isn't built for playback, it's just a way to grab frames from video file or camera. Other libraries that supports playback, such as GStreamer or Directshow, they set a clock that control the playback, so that it can be configured to play as fastest as possible or use the original framerate.

In your snippet, the interval between frames comes from the time it takes to read a frame and the waitKey(10). Try using waitKey(0), it should at least play faster. Ideally, you could use waitKey(1/fps).

Upvotes: 2

Related Questions