我想用matplotlib中的python脚本生成的帧创建一个h264或divx电影。这部电影大约有10万帧。
在web上的示例中[例如1],我只看到了将每个帧保存为png,然后在这些文件上运行mencoder或ffmpeg的方法。在我看来,保存每一帧都是不切实际的。有没有办法获取从matplotlib生成的绘图并将其直接管道到ffmpeg,而不生成中间文件?
用ffmpeg的C-api编程对我来说太难了[例2]。另外,我需要一个压缩良好的编码,比如x264,因为电影文件对于后续步骤来说太大了。因此,坚持使用mencoder/ffmpeg/x264会很好。
有什么可以用管子做的吗?
[1]http://matplotlib.sourceforge.net/examples/animation/movie_demo.html
[2]How does one encode a series of images into H264 using the x264 C API?
在修补了ffmpeg(请参阅Joe Kington对我的问题的评论)之后,我能够将png的管道设置为ffmpeg,如下所示:
如果没有patch,它将无法工作,后者只需简单地修改两个文件并添加
libavcodec/png_parser.c
。我不得不手动将修补程序应用到libavcodec/Makefile
。最后,我从Makefile
中删除了'-number',以获取要构建的手册页。有了编译选项转换为图像格式非常慢,并且会添加依赖项。在查看了这些页面和其他页面之后,我使用mencoder(仍然需要ffmpeg解决方案)使用原始的未编码缓冲区进行工作。
详情见:http://vokicodder.blogspot.com/2011/02/numpy-arrays-to-video.html
我有一些不错的加速。
这个功能现在(至少从1.2.0开始,可能是1.1)通过
MovieWriter
类和animation
模块中的子类烘焙到matplotlib中。您还需要提前安装ffmpeg
。Documentation for ^{}
相关问题 更多 >
编程相关推荐