我必须制作大量(〜90,000)人物的动画。就上下文而言,它是从 1700 年到 1950 年的每一天的地图图,并在相关日期标记了感兴趣的事件。我可以使用 来执行此操作matplotlib.animation.FuncAnimation
,并且我的代码可以在一小段测试期内成功执行此操作。但是,对于完整的图形集,渲染需要花费不切实际的时间,并且会产生非常大的电影文件。我读过这显然moviepy
提供了速度和文件大小的优势。但是,我无法让它工作——我相信我的问题是我不明白如何正确设置duration
andfps
参数。
我的代码的简化版本是:
import numpy as np
import matplotlib.pyplot as plt
from moviepy.video.io.bindings import mplfig_to_npimage
import moviepy.editor as mpy
fig = plt.figure()
ax = plt.axes()
x = np.random.randn(10,1)
y = np.random.randn(10,1)
p = plt.plot(x,y,'ko')
time = np.arange(2341973,2342373)
def animate(i):
xn = x+np.sin(2*np.pi*time[i]/10.0)
yn = y+np.cos(2*np.pi*time[i]/8.0)
p[0].set_data(xn,yn)
return mplfig_to_npimage(fig)
fps = 1
duration = len(time)
animation = mpy.VideoClip(animate, duration=duration)
animation.write_videofile("test.mp4", fps=fps)
但是,这不会产生为每个元素生成一帧电影time
并将其保存为 .mp4 的预期结果。我看不到我哪里出错了,任何帮助或指示将不胜感激。
最好的祝愿,卢克