Extract video frames in python using OpenCV

Question:

I want to break my video into frames.

I am using the following code:

import cv2
import numpy as np
import os

# Playing video from file:
cap = cv2.VideoCapture('myvideo.mp4')
cap.set(cv2.CAP_PROP_FPS, 5)

try:
    if not os.path.exists('data'):
        os.makedirs('data')
except OSError:
    print ('Error: Creating directory of data')

currentFrame = 0
while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    # Saves image of the current frame in jpg file
    name = './data/frame' + str(currentFrame) + '.jpg'
    print ('Creating...' + name)
    cv2.imwrite(name, frame)

    # To stop duplicate images
    currentFrame += 1
    if not ret: break


# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

I have set the FPS = 5 and ‘myvideo.mp4’ is 0:55 sec long. So, I’d expect to have 55*5 = 275 frames, but the code above gives me a lot more frames and it doesn’t stop generating frames. Is something wrong in the code?

Asked By: Katerina T

||

Answers:

if you want a proper framerate you can do

framerate = vid.get(5)

instead of

cap.set(cv2.CAP_PROP_FPS, 5)

this will give you the exact framerate

Answered By: Chewie