这些都是非常好的答案。这是另一个建议。@ user621442是正确的,因为瓶颈通常是图像的写入,因此,如果您正在将png文件写入视频压缩器,则速度将非常慢(即使您是通过管道将其发送而不是写入磁盘)。我找到了一个使用纯ffmpeg的解决方案,我个人觉得它比matplotlib.animation或mencoder更易于使用。
另外,就我而言,我只想将图像保存在一个轴上,而不是保存所有刻度线标签,图形标题,图形背景等。基本上,我想使用matplotlib代码制作电影/动画,但没有它“看起来像图”。我已经在此处包含了该代码,但是如果需要,您可以制作标准图形并将其通过管道传输到ffmpeg。
import matplotlib.pyplot as plt
import subprocess
f = plt.figure(frameon=False, figsize=(4, 5), dpi=100)
canvas_width, canvas_height = f.canvas.get_width_height()
ax = f.add_axes([0, 0, 1, 1])
ax.axis('off')
def update(frame):
outf = 'ffmpeg.mp4'
cmdstring = ('ffmpeg',
'-y', '-r', '30',
'-s', '%dx%d' % (canvas_width, canvas_height),
'-pix_fmt', 'argb',
'-f', 'rawvideo', '-i', '-',
'-vcodec', 'mpeg4', outf)
p = subprocess.Popen(cmdstring, stdin=subprocess.PIPE)
for frame in range(1000):
update(frame)
plt.draw()
string = f.canvas.tostring_argb()
p.stdin.write(string)
p.communicate()
buffer = fig.canvas.tostring_rgb()
,并使用fig.canvas.get_width_height()
(或fig.bbox.width
等)以像素为单位显示图形的宽度和高度