Skip to main content
The Video I/O (videoio) module provides interfaces for reading video from cameras or files and writing video to files, with support for multiple backend APIs and hardware acceleration.

Overview

From opencv2/videoio.hpp:48-64:
Read and write video or image sequences with OpenCV. This module provides unified interfaces for video capture and writing across different platforms and backends including FFmpeg, GStreamer, DirectShow, AVFoundation, and more.

VideoCapture

Capture from cameras or read video files

VideoWriter

Write video files with codec selection

Backends

Multiple API backend support (FFmpeg, GStreamer, etc.)

Hardware Accel

GPU-accelerated encoding and decoding

VideoCapture Class

Capturing from Camera

Example from samples/cpp/videocapture_basic.cpp:

Reading Video Files

Video Capture Backends

From videoio.hpp:92-129, OpenCV supports multiple backends:

Video Capture Properties

From videoio.hpp:138-216, extensive property control:

Seeking in Videos

VideoWriter Class

Writing Video Files

FourCC Codes

Hardware Acceleration

From videoio.hpp:256-269:

Image Sequences

Audio Support

From videoio.hpp:198-206:

Practical Examples

Video File Converter

Extract Video Frames

Real-time Camera Processing

Video Stabilization

Best Practices

Always Check isOpened():
This catches missing files, unsupported formats, or codec issues.
Choose the Right Backend:
  • FFmpeg - Best for file I/O, most format support
  • GStreamer - Good for streaming, pipelines
  • Platform-specific - MSMF (Windows), AVFoundation (macOS) for cameras
Frame Rate Control:
Codec Compatibility: H.264 is the most widely supported codec:
For maximum compatibility, use .mp4 container with H.264 codec.

Troubleshooting

Common Issues

  1. “Cannot open video”
    • Check file exists and path is correct
    • Verify codec support: cap.get(CAP_PROP_FOURCC)
    • Try different backend: VideoCapture(file, CAP_FFMPEG)
  2. Frames not written
    • Ensure frame size matches VideoWriter size
    • Check frame type (CV_8UC3 for color)
    • Verify disk space and write permissions
  3. Camera not found
    • Try different camera indices (0, 1, 2…)
    • Specify backend: VideoCapture(0, CAP_DSHOW)
    • Check camera permissions
  4. Playback too fast/slow
    • Get FPS: cap.get(CAP_PROP_FPS)
    • Use proper delay: waitKey(1000/fps)

Source Reference

Main header: ~/workspace/source/modules/videoio/include/opencv2/videoio.hpp Examples:
  • samples/cpp/videocapture_basic.cpp
  • samples/cpp/videowriter_basic.cpp
  • samples/cpp/videocapture_camera.cpp