我有一个用matplotlib制作的动画,正在使用matplotlib.animation.Animation.save()
保存。效果很好,但是我的电影在动画结束之前就结束了。
我尝试将帧速率,间隔和电影格式从.mp4
更改为.avi
。是否有帧或电影尺寸限制?如何解决?
这是我的代码:
# Updates animation.
def update_line(num, data, line):
line.set_data(data[..., :num])
return line,
fig1 = plt.figure()
l, = plt.plot([], [], '-')
line_ani = animation.FuncAnimation(fig1, update_line, fargs=(np.array(trajectory), l), interval=25, blit=True)
line_ani.save(file_title + '.avi')
plt.show()
虽然电影的长度应为15秒左右,但最终为3秒。我也使用plt.show()
,并且matplotlib显示窗口上的动画更长。
如果有问题的话,我可以在Ubuntu上使用matplotlib 3.03和python 3.6。
答案 0 :(得分:0)
编辑:我可以通过设置参数frames=len(trajectory[1])
来解决此问题。
简而言之,如果您可以以帧为单位预测电影的长度,请使用repeat=False
和frames=number_of_frames
作为.save()
的参数。
将这个答案留给其他人来修复他们的错误。
答案 1 :(得分:0)
对于其他发现此问题且OP的答案无效的人,以下是对我有用的解决方案:
在创建FuncAnimation对象时,添加命名参数save_count
,该参数告诉动画制作者调用save()
时要保存多少帧。
这是我代码中的一个:
self.ani = anim.FuncAnimation(self.fig, lambda i: self.animate(i), frames=self.update_time, repeat=False, init_func=self.init_plot, interval=self._frame_len, save_count=self._max_frame)
一个好处是,这还使您可以将frames
参数保留为一个函数(即,在调用plt.show()
而不是save()
时具有交互性)。
来源:https://holypython.com/how-to-save-matplotlib-animations-the-ultimate-guide/