scikit-video:用 Python 做视频处理,这个库够轻量

scikit-video 在 GitHub 上拿到了 706 个 Star。

它走的是 scikit-image 和 scikit-learn 的路线,把视频处理这件事做成了 Python 风格。底层依赖 scipy、numpy 和 FFmpeg,接口简洁,上手快。

1、 这东西能做什么

就一件事:用 Python 处理视频,不用碰底层 C 代码。

视频读写、帧提取、运动估计、滤波、编码分析,这些常见操作都封装成了 sklearn 风格的高层函数。你传一个 numpy array 进去,它返回处理后的结果,中间过程全部隐藏。

正文顶部截图

2、 为什么选它

Python 里做视频处理的选择不少,OpenCV 功能最全但接口偏底层,imageio 够简单但功能有限。scikit-video 的位置刚好在中间,比 OpenCV 更 Pythonic,比 imageio 功能更完整。

项目早期参考了 scikit-image 的 API 设计风格,所以如果你用过 scikit-learn 或者 scikit-image,上手 scikit-video 几乎零成本。模块命名、参数传递、返回值风格都保持一致。

从 1.1.12 到 1.1.15 这几个版本,项目做了比较大的现代化改造。现在支持 Python 3.10 到 3.13,兼容 NumPy 2.x 和最新的 SciPy,而且不 breaking 旧 API,之前 1.1.11 上能跑的代码,升级后一样跑。

README区域截图

3、 核心功能一览

视频读写方面,vread、vreader、vwrite 三个函数覆盖了大部分场景。之前只支持本地文件路径,1.1.14 版本之后可以直接传 URL 字符串(http、https、rtsp 都行),也可以传 io.BytesIO 这种类文件对象。这意味着你可以直接从网络流读视频,不用先下载到本地。

视频质量评估方面,ssim 等算法已经内置。1.1.15 版本修复了一个边界情况:当传入的帧尺寸小于子窗口大小时,ssim 直接报错提示,不再静默返回 NaN。

度量分析方面,measure 模块包含多种视频特征提取算法,比如 Li3DDCT_features。上个版本的 Python 3 兼容性修复让这些函数重新可用。

运动估计方面,motion 模块提供全局边缘运动检测等功能。同样在最近的更新中修复了 Python 3 兼容问题。

4、 安装和上手

依赖项不算少:FFmpeg 2.8 以上、numpy、scipy、Pillow、opencv-python-headless(measure 模块需要)。但安装本身很简单:

pip install scikit-video

从源码安装也一样,克隆仓库后本地执行即可。

注意一点,如果你之前装过老版本的 sk-video 包,可能会有 import 冲突。先卸载它再装新版本就行:

pip uninstall sk-video

5、 适合谁用

做视频数据集预处理的研究人员、需要快速验证视频处理算法的工程师、在已有 Python 视频管线里不想引入 OpenCV 那么重依赖的团队。

如果你只是偶尔处理几个视频文件,scikit-video 的简单 API 比临时拼 FFmpeg 命令或者翻 OpenCV 文档要省事得多。

,scikit-video 的简单 API 比临时拼 FFmpeg 命令或者翻 OpenCV 文档要省事得多。

更多推荐