Convert video to images in Python


Reading time: 20 minutes | Coding time: 5 minutes

A video file is a collection of images. We can look at it as if video is text data, then images are characters. Extracting images (also called frames) from videos is important for various use cases such as image processing, analyzing a part of video in detail, video editing and much more.

In this article, we will take a look at how we can extract images from a video and save them in a folder sequentially. We will use Python as our Programming language and will use the OpenCV library for extracting images from a video.

To install OpenCV, use the following command:

pip install opencv-python

Download a sample video file from which you want to extract images like:

wget -c https://www.sample-videos.com/video123/mp4/720/big_buck_bunny_720p_5mb.mp4 -O video.mp4

This will save a sample video named video.mp4. We will extract frames from this video. Following it, create a folder where you want to save the images:

mkdir image_data

Step 1: Load dependencies

In this step, we will load libraries which we will use. In this case, we have only one dependency that is OpenCV.

import cv2

Step 2: Load the video file

We will load the video file using OpenCV:

vidcap = cv2.VideoCapture('vid.mp4')

Step 3: Get next frame/ image

To get the next frame or image in the video, we need to use:

success, image = vidcap.read()

It returns two values:

  • success: true/ false; true denotes that an image has been loaded
  • image: the actual image data if success = true; if success = false, image is NULL

Step 4: Save the image

We can save the image as a jpeg image using the imwrite method of OpenCV.

cv2.imwrite("video_data/image_%d.jpg" % count, image)

Step 5: Read all images

To read all images, we need to call vidcap.read() repeatly until it returns false.

count = 1
while success:
  cv2.imwrite("video_data/image_%d.jpg" % count, image)    
  success, image = vidcap.read()
  print('Saved image ', count)
  count += 1

Complete Code:

import cv2
vidcap = cv2.VideoCapture('vid.mp4')
success, image = vidcap.read()
count = 1
while success:
  cv2.imwrite("video_data/image_%d.jpg" % count, image)    
  success, image = vidcap.read()
  print('Saved image ', count)
  count += 1

Output:

A section of the output:

...
Saved image  734
Saved image  735
Saved image  736
Saved image  737
Saved image  738
Saved image  739

Following is the view of the folder:

video_frame

With this, all frames have been extracted from the video and you can now go through each frame in detail. There are 739 images in total in our sample video.

Enjoy this new power.