将matplotlib动画另存为电影;电影太短

时间:2019-06-11 17:25:29

标签: python matplotlib

我有一个用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。

2 个答案:

答案 0 :(得分:0)

编辑:我可以通过设置参数frames=len(trajectory[1])来解决此问题。

简而言之,如果您可以以帧为单位预测电影的长度,请使用repeat=Falseframes=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/