Borrowing coding styles and conventions from scikit-image and scikit-learn, scikit-video is a Python module for video processing built on top of scipy, numpy, and FFmpeg.
This project is distributed under the 3-clause BSD.
Visit the documentation at http://www.scikit-video.org
Requirements:
- FFmpeg >= 2.8 on the system PATH (primary tested backend). The libav/avconv backend is retained in the codebase for compatibility but is not validated by the test suite.
- Python >= 3.10
- numpy >= 1.22
- scipy >= 1.9
- Pillow >= 9.0
- opencv-python-headless >= 4.5 (required by
skvideo.measure) - mediainfo (optional)
Installation from PyPI:
pip install scikit-video
Installation from source (GitHub):
git clone https://github.com/scikit-video/scikit-video.git cd scikit-video pip install .
For development (editable install with test dependencies):
pip install -e ".[test]"
If you installed scikit-video prior to version 1.1.10, you may have an import
conflict with the older sk-video package. Run the following to fix it:
pip uninstall sk-video
Then check that skvideo resolves to the expected location:
import skvideo print(skvideo.__file__)
scikit-video is actively maintained again. The 1.1.12–1.1.15 line modernizes the package for current Python (3.10–3.13), NumPy 2.x, and SciPy, with no breaking API changes; code that worked with 1.1.11 should continue to work unchanged. Highlights:
- Correctness completion (1.1.15). Remaining user-facing
assertvalidation now raises real exceptions (so it survivespython -O);ssimrejects sub-window-size frames instead of returningNaN; last Python-2xrangeremoved. - Non-local I/O (1.1.14).
vread/vreader/vwriteand theFFmpegReader/FFmpegWriterconstructors now accept file paths, URL strings (http://,https://,rtsp://, ...), and file-like objects (io.BytesIO) interchangeably (issues #117, #113, #81). AUserWarningis emitted if a URL scheme isn't compiled into the local FFmpeg build. - Python-3 correctness pass. Fixed several public functions that crashed on
modern Python (e.g.
measure.Li3DDCT_features,utils.canny,motion.globalEdgeMotion,from skvideo import *), replacedassert-based input validation with real exceptions (so it survivespython -O), and made probe failures warn instead of silently returning empty metadata. - Earlier in the 1.1.12–1.1.13 line:
pyproject.tomlpackaging (restorespip installon modern Python/NumPy),pathlib.Pathsupport everywhere, audio passthrough (audiosrc=) and multi-streamffprobein the writer, repeated-flag dict values, and a windowed-readstart_frameargument.
See CHANGELOG.rst for the complete per-version history.
- Spatial-Temporal filtering helper functions
- Speedup routines (using cython and/or opencl)
- More ffmpeg/avconv interfacing
- Add additional algorithms and maintain more comprehensive benchmarks
See CONTRIBUTING.rst for setup instructions.
After installing with the [test] extra, run the suite with:
pytest -v skvideo/tests
Tests that require FFmpeg or libav are automatically skipped if the corresponding binary is not on the system PATH.
Copyright 2015-2026, scikit-video developers (BSD license).
