使用管道直接从np.array编写电影

时间:2017-06-16 21:14:39

标签: python numpy video matplotlib ffmpeg

我有4D numpy电影帧数组。我正在寻找一个函数,以给定的帧速率将它们写入电影。我在我的操作系统上安装了FFMPEG,as I can see from these answers,最有效的方法是通过管道。

但是,我使用管道的经验很少,上面链接中的解释对我来说没什么意义。此外,很少有答案似乎实际上实现了管道,而the one that does使用了mencoder,而不是FFMPEG。我对FFMPEG相对缺乏经验,所以我不确定如何修改mencoder答案中的命令字符串,使其在FFMPEG中工作。

我想要的是什么:

以下形式的功能:

animate_np_array(4d_array,framerate) - > output.mp4(或其他视频编解码器)

它实现了一个接一个地向FFMPEG发送帧的管道,并且我可以将其复制粘贴到我现有的代码中。

此外,这个函数绝对不需要实际绘制任何帧,因为对matplotlib.imshow()函数的调用(正如我最常见的那样)会大大减慢速度。

1 个答案:

答案 0 :(得分:10)

ImageIO API提供了一种简单易行的方法:

import imageio
imageio.mimwrite('output_filename.mp4', np_array , fps = [an int])

虽然我不确定它是否使用管道,但速度非常快。