【问题标题】:Python FuncAnimation is saved only 30%Python FuncAnimation 仅节省 30%
【发布时间】:2015-08-10 04:27:55
【问题描述】:

我正在尝试用我计算出的数据制作电影。我正在使用 ffmpeg 编写器。当我在 Spyder 中启动动画时,它工作正常并结束,但是当我尝试保存它时,它只适用于前 30% 的动画。我怎样才能让它保存整个动画?

这是一段代码(很长); MM 是存储矩阵的地方(其中 1200 个)。

import matplotlib
matplotlib.use("Agg")
from mpl_toolkits.mplot3d import axes3d
import matplotlib.animation as animation
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
nx = 10
ny = 10
X=np.linspace(0, Lx, nx)
Y=np.linspace(0, Ly, ny)   
Writer = animation.writers['ffmpeg']
writer = Writer(fps=15, metadata=dict(artist='Me'), bitrate=1)

plt.ion()
fig = plt.figure()
im = plt.contourf(X, Y, MM[0], np.linspace(T_ok,np.max(MM[-1]),150), cmap =     cm.hot)
ax = fig.add_subplot(111, projection='3d')  
plt.colorbar(im)

def anime(i):
    ax.cla()
    im = ax.contourf(X, Y, MM[i], np.linspace(T_ok,np.max(MM[-1]),150), cmap = cm.hot)
    plt.title('%5.3f'%i)
    return im,

anim = animation.FuncAnimation(fig, anime)
anim.save('anime.mp4', writer=writer)

编辑:我只是将帧设置为 10000 并且它正在工作,但我想知道为什么。应该绘制 1200 个矩阵。

【问题讨论】:

  • 您能否解释一下“我将帧数设置为 1000”的意思?你在哪里做的?我遇到了这个问题。

标签: python animation matplotlib ffmpeg


【解决方案1】:

这个问题已经很老了,但以防万一有人在寻找答案时偶然发现它(就像我一样),this comment 让我明白,对于自定义帧生成器,您需要手动设置 save_count 成员的FuncAnimation 让视频保存整个动画。

即,如果您想使用 animFuncAnimation 实例遍历数组 times,您需要:

# either at instantiation
# anim = FuncAnimation(..., save_count=len(times))
# or after some time, if you need to customize it later
anim.save_count = len(times)
anim.save('anime.mp4', writer=writer)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-26
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    相关资源
    最近更新 更多