How do I get one random frame from an mp4 video in Python?

Viewed 600

I have an mp4 video in my directory that I need to capture one random frame from in Python. How can I go about doing that?

I'm currently using this code, but it's grabbing the first frame. I need it to randomly pick out of all the frames.

mp4_directory = 'video.mp4'
frames = 324000
random_frame = random.randrange(0, frames)

vidcap = cv2.VideoCapture(mp4_directory)
success,image = vidcap.read()
count = random_frame - 1
while count < random_frame:
    cv2.imwrite("frame%d.jpg" % count, image)     # save frame as JPEG file      
    success,image = vidcap.read()
    print('Read a new frame: ', success)
    count += 1
1 Answers

Try something like this:

vidcap = cv2.VideoCapture("myvideo.mp4")
# get total number of frames
totalFrames = vidcap.get(cv2.CAP_PROP_FRAME_COUNT)
randomFrameNumber=random.randint(0, totalFrames)
# set frame position
vidcap.set(cv2.CAP_PROP_POS_FRAMES,randomFrameNumber)
success, image = vidcap.read()
if success:
    cv2.imwrite("random_frame.jpg", image)
Related