我想从在matplotlib中生成的帧中创建一个h264或divx电影,这个电影大约有100k帧。在网络上的示例[例如1]中,我只看到了将每个帧保存为png文件,然后在这些文件上运行mencoder或ffmpeg的方法。在我的情况下,保存每个帧是不切实际的。是否有一种方法可以直接将从matplotlib生成的图形传输到ffmpeg中,而不生成任何中间文件?
使用ffmpeg的C-api进行编程对我来说太难了[例如2]。此外,我需要具有良好压缩性能的编码格式(如x264),否则电影文件将太大,无法进行后续步骤。因此,最好还是使用mencoder / ffmpeg / x264。
是否可以使用管道[3]来完成某些操作?
[1] http://matplotlib.sourceforge.net/examples/animation/movie_demo.html [2] 如何使用x264 C API将一系列图像编码为H264? [3] http://www.ffmpeg.org/ffmpeg-doc.html#SEC41
使用ffmpeg的C-api进行编程对我来说太难了[例如2]。此外,我需要具有良好压缩性能的编码格式(如x264),否则电影文件将太大,无法进行后续步骤。因此,最好还是使用mencoder / ffmpeg / x264。
是否可以使用管道[3]来完成某些操作?
[1] http://matplotlib.sourceforge.net/examples/animation/movie_demo.html [2] 如何使用x264 C API将一系列图像编码为H264? [3] http://www.ffmpeg.org/ffmpeg-doc.html#SEC41
buffer = fig.canvas.tostring_rgb()
获取matplotlib图形的RGB缓冲区,以及图形的像素宽度和高度fig.canvas.get_width_height()
(或fig.bbox.width
等) - Joe Kington-f image2pipe
选项,以便它期望一系列图像)或本地套接字(例如udp://localhost:some_port
)读取,并在Python中将其写入套接字...到目前为止,只有部分成功...虽然我感觉我已经接近成功了...但我对ffmpeg还不够熟悉... - Joe Kingtonffmpeg-f image2pipe-vcodec mjpeg-i-output.whatever
。您可以打开subprocess.Popen(cmdstring.split(),stdin = subprocess.PIPE)
并将每个帧写入其stdin
)如果我有机会,我会发布更详细的示例... - Joe Kingtonmatplotlib
中了(请参见下面的答案)。 - tacaswell