有什么好的Python库来处理视频文件的帧?

13 投票
5 回答
11140 浏览
提问于 2025-04-16 15:29

我在找一个Python的视频处理库,类似于PIL,希望能逐帧处理视频,也就是可以查看每一帧的像素数据,给每一帧画画,然后把结果保存成一个新的视频文件。

我找到了一些类似的问题,但它们都比较老了:

这些问题推荐了PyMediaPyFFMPEG。不过,PyMedia看起来有点过时(但可能还能用?),而PyFFMPEG虽然更新了一些,但几乎没有文档。

我在Ubuntu 10.10上安装这两个库都没成功。在继续之前,我想问:

a) 有没有更好的库可以推荐?

b) 有没有好的教程教我怎么安装和使用这两个库?

5 个回答

2

我最近在研究使用py.processing来做类似的工作。它能满足你提到的所有需求,但它其实是和Processing结合在一起的。你并不是在写纯粹的Python代码。不过,它的确让操作变得相对简单,但由于程序和解释的开销比较大,所以在实时修改视频时可能会比较慢。你提到想要编辑文件,这样的话应该是可以实现的。

3

我推荐你使用scikit-video,这是我见过的最简单的Python视频处理库。

以下是scikit-video在其项目网站上的官方介绍:

scikit-video是为了让使用Python进行视频处理变得简单而设计的。它的设计理念与其他成功的库,比如scikit-learn和scikit-image类似。scikit-video的开发者知道有一些库可以用来处理视频,比如PyFFmpeg、MoviePy、PyAV、imageIO和opencv。但是,他们发现没有一个库能提供一个全面的解决方案,来满足研究级别的视频处理工具的需求。

9

我经常需要做同样的事情,按照我所知道的,Python里没有很好的绑定解决方案。

而且,处理视频文件的帧并不像看起来那么简单。现代视频文件格式并不是把每一帧一个接一个地存储,而是使用“增量帧”,也就是说只存储每一帧与前一帧之间的变化。还有像可变帧率的视频,这让问题变得更加复杂。

以前我用过以下命令来从视频中生成图像。

ffmpeg -i /path/to/file.mpg -an -r 30 -s 320x240 tmp%06d.jpg

这里的30是目标帧率,320x240是图像的尺寸,tmp%06d.jpg是用来存储生成的jpeg图片的命名格式。然后你可以用PIL来处理每一帧,再用mencoder或ffmpeg把这些图像重新拼接成电影:

ffmpeg -r 30 -i tmp%06d.jpg output.mpg

显然,这样做会丢失音轨。

撰写回答