How to get the duration of video using cv2 How to get the duration of video using cv2 python python

How to get the duration of video using cv2


In OpenCV 3, the solution is:

import cv2cap = cv2.VideoCapture("./video.mp4")fps = cap.get(cv2.CAP_PROP_FPS)      # OpenCV2 version 2 used "CV_CAP_PROP_FPS"frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))duration = frame_count/fpsprint('fps = ' + str(fps))print('number of frames = ' + str(frame_count))print('duration (S) = ' + str(duration))minutes = int(duration/60)seconds = duration%60print('duration (M:S) = ' + str(minutes) + ':' + str(seconds))cap.release()


cv2 is not designed to explore video metadata, so VideoCapture doesn't have API to retrieve it directly.

You can instead "measure" the length of the stream: seek to the end, then get the timestamp:

>>> v=cv2.VideoCapture('sample.avi')>>> v.set(cv2.CAP_PROP_POS_AVI_RATIO,1)True>>> v.get(cv2.CAP_PROP_POS_MSEC)213400.0

Checking shows that this sets the point after the last frame (not before it), so the timestamp is indeed the exact total length of the stream:

>>> v.get(cv2.CAP_PROP_POS_FRAMES)5335.0>>>> v.get(cv2.CAP_PROP_FRAME_COUNT)5335.0>>> v.set(cv2.CAP_PROP_POS_AVI_RATIO,0)>>> v.get(cv2.CAP_PROP_POS_FRAMES)0.0        # the 1st frame is frame 0, not 1, so "5335" means after the last frame


Capture the video and output the duration is seconds

vidcapture = cv2.VideoCapture('myvideo.mp4')fps = vidcapture.get(cv2.CAP_PROP_FPS)totalNoFrames = vidcapture.get(cv2.CAP_PROP_FRAME_COUNT);durationInSeconds = float(totalNoFrames) / float(fps)print("durationInSeconds: ",durationInSeconds,"s")