通过使用管道,高效地从np.array直接编写电影

5
我有一个由电影帧组成的4D numpy数组。我想要一个函数,以给定的帧速率将它们写入电影中。在我的操作系统上,我已经安装了FFMPEG,并且从这些答案(如我所看到的)中,最有效的方法是通过管道实现。
然而,我对使用管道几乎没有经验,上面链接中的解释对我来说很难理解。此外,很少有答案实际上使用管道,而唯一使用管道的答案使用mencoder而不是FFMPEG。我对FFMPEG的经验相对较少,因此不知道如何修改来自mencoder答案的命令字符串以使其在FFMPEG中运行。 我想要什么: 一个以下形式的函数:
animate_np_array(4d_array,framerate)- >output.mp4(或其他视频编解码器)
采用管道的方式将帧一个接一个地发送到FFMPEG,并且可以将其复制粘贴到我的现有代码中。
此外,这个函数绝不能实际绘制任何帧,因为调用matplotlib.imshow()函数(如我通常看到的)会严重减慢速度。
1个回答

18

ImageIO API 提供了一种非常简单的方法来实现这一点:

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

虽然我不确定这是否使用了管道技术,但它运行速度非常快。


1
不错。对于我的情况,np_array的形状是20x512x512,其中包含了20帧大小为512x512像素的灰度图像。 - user2165
6
这需要安装 imageioimageio-ffmpeg 两个模块。请执行以下命令进行安装:pip install imageiopip install imageio-ffmpeg - Eduardo Pignatelli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接