Video Compression in OpenCV

In this tutorial, we will explore the concept of video compression, how it works, and how to implement it using OpenCV.

Updated March 25, 2023

Today’s sponsor is Depot. Depot is a remote container build service that’s half the cost of GitHub Actions runners and up to 40x faster than other build services. Try it for free.

Welcome to this comprehensive tutorial on video compression using OpenCV! In this tutorial, we will explore the concept of video compression, how it works, and how to implement it using OpenCV. This tutorial is perfect for computer vision enthusiasts, developers, and researchers who want to dive into the world of video compression. Let’s get started!

What is Video Compression?

Video compression is a technique used to reduce the size of video files by removing redundant information, allowing for efficient storage and transmission. There are two primary types of video compression: lossless and lossy. Lossless compression preserves the original quality of the video, while lossy compression sacrifices some quality for a greater reduction in size. Some common video compression formats include MPEG, H.264, and VP9.

How to Perform Video Compression with OpenCV: A Step-by-Step Guide

In this tutorial, we will use OpenCV’s built-in functions to compress a video file. We’ll be using Python for our examples, but you can also use the OpenCV C++ API.

Step 1: Install OpenCV and Other Dependencies

First, let’s install OpenCV and other required libraries:

pip install opencv-python opencv-python-headless numpy

Step 2: Load the Input Video File

We’ll start by loading the input video file using OpenCV’s VideoCapture class:

import cv2

input_file = 'path/to/input_video.mp4'
cap = cv2.VideoCapture(input_file)

if not cap.isOpened():
    print("Error: Could not open the input video file.")

Step 3: Set Up the Output Video File

Next, we’ll set up the output video file using OpenCV’s VideoWriter class. We’ll choose the desired compression codec, frame size, and frame rate:

output_file = 'path/to/output_video.mp4'
fourcc = cv2.VideoWriter_fourcc(*'XVID')  # Change this to your desired codec
frame_size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
frame_rate = int(cap.get(cv2.CAP_PROP_FPS))

out = cv2.VideoWriter(output_file, fourcc, frame_rate, frame_size, isColor=True)

if not out.isOpened():
    print("Error: Could not create the output video file.")

Step 4: Compress and Write the Video Frames

Now, we’ll read the frames from the input video, perform any desired processing (e.g., resizing or filtering), and write the compressed frames to the output video:

while cap.isOpened():
    ret, frame =

    if not ret:

    # Perform any desired processing on the frame (e.g., resizing or filtering)

    # Write the compressed frame to the output video file


Step 5: Test the Compressed Video

Finally, you can play the compressed video using a video player to verify the quality and file size.

And there you have it! You’ve successfully performed video compression using OpenCV. By understanding the underlying theory and leveraging OpenCV’s powerful built-in functions, you can now efficiently store and transmit video files. Keep exploring the fascinating world of computer Vision. Happy Coding!