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 deprecated and will be removed in a future release.
- Python >= 3.10
- numpy >= 1.22
- scipy >= 1.9
- Pillow >= 9.0
- mediainfo (optional; deprecated, will be removed in a future release)
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.
- Deprecations and cleanup (1.3.0). The libav/avconv backend,
mprobe/mediainfo, and the hardcoded container-extension allowlist are deprecated (DeprecationWarning; removal planned for 1.4.0) -- unknown extensions now warn and defer to ffmpeg instead of raising. Binaries are resolved only from absolute PATH entries (never the CWD). Roughly 1,000 lines of dead, vendored, and Python-2-era code removed, with a pyflakes lint gate in CI keeping it that way. - Metric accuracy overhaul (1.2.0). The NIQE, BRISQUE, VIIDEO, and Video-BLIINDS implementations were validated against their reference MATLAB implementations and fixed where they diverged (reference NIQE model, antialiased half-scale resize, faithful VIIDEO port, motion tie-breaking). Breaking: these four metrics return different -- more accurate -- values than 1.1.x. Scores and features are not comparable across the 1.1.x/1.2.x boundary. Function signatures are unchanged. MSE/PSNR/SSIM/MS-SSIM and ST-RRED were validated as already correct and are unchanged.
- Maintenance (1.2.1). NumPy 2.5 compatibility (
linalg.eignow always returns complex; symmetric eigendecompositions useeigh), the unusedopencv-python-headlessdependency removed, FFmpeg version/binary detection fixes, and clearer errors on badbackend=names and unsupported channel counts. - The 1.1.12–1.1.15 line modernized the package for current Python
(3.10+), NumPy 2.x, and SciPy with no breaking API changes: modern
pyproject.tomlpackaging, non-local I/O (URLs and file-like objects),pathlib.Pathsupport, audio passthrough (audiosrc=), a Python-3 correctness pass, and exception-based input validation.
See CHANGELOG.rst for the complete per-version history.
- Spatial-Temporal filtering helper functions
- Speedup routines (using cython and/or opencl)
- More ffmpeg 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).
