【问题标题】:Saving Animation with matplotlib?用 matplotlib 保存动画?
【发布时间】:2014-05-21 19:16:35
【问题描述】:

我已经使用自制软件安装了 ffmpeg。

但是我现在面临的问题是运行脚本时没有保存动画。 我在我的脚本和我的 .bash_profile 下包含了

import matplotlib
matplotlib.use('TKAgg')
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation

# First set up the figure, the axis, and the plot element we want to animate
fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)

# initialization function: plot the background of each frame
def init():
  line.set_data([], [])
  return line,

# animation function.  This is called sequentially
def animate(i):
  x = np.linspace(0, 2, 1000)
  y = np.sin(2 * np.pi * (x - 0.01 * i))
  line.set_data(x, y)
return line,

# call the animator.  blit=True means only re-draw the parts that have changed.
anim = animation.FuncAnimation(fig, animate, init_func=init,
                           frames=200, interval=20, blit=True)

# save the animation as an mp4.  This requires ffmpeg or mencoder to be
# installed.  The extra_args ensure that the x264 codec is used, so that
# the video can be embedded in html5.  You may need to adjust this for
# your system: for more information, see
# http://matplotlib.sourceforge.net/api/animation_api.html
anim.save('basic_animation.mp4', fps=30)

.bash_profile

export PATH=$PATH:/$HOME/../../usr/local/Celler/ffmpreg/2.2.2/bin
export FFMPEG_BIN=/$HOME/../../usr/local/Cellar/ffmpeg/2.2.2/bin/

【问题讨论】:

  • 没有错误?你确定你在寻找输出的正确目录吗?
  • 这适用于我的 Path 还是 PythonPath?我的路径设置正确。
  • 它将保存到运行代码的python实例的cwd中

标签: python animation matplotlib


【解决方案1】:

通过在 Anaconda 环境中使用 ipython 笔记本,我能够正确输出动画。

要让动画显示在 ipython 笔记本中,需要做一些工作。这里是:

from matplotlib import animation 
from tempfile import NamedTemporaryFile

VIDEO_TAG = """<video controls>
 <source src="data:video/x-webm;base64,{0}" type="video/webm">
 Your browser does not support the video tag.
</video>"""

def anim_to_html(anim):
 if not hasattr(anim, '_encoded_video'):
    with NamedTemporaryFile(suffix='.webm') as f:
        anim.save(f.name, fps=6, extra_args=['-vcodec', 'libvpx'])
        video = open(f.name, "rb").read()
    anim._encoded_video = video.encode("base64")

return VIDEO_TAG.format(anim._encoded_video)

from IPython.display import HTML

def display_animation(anim):
  plt.close(anim._fig)
  return HTML(anim_to_html(anim))

上述代码到位后,以下动画正确输出到 ipython 笔记本中:

# First set up the figure, the axis, and the plot element we want to animate
fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)

# initialization function: plot the background of each frame
def init():
  line.set_data([], [])
  return line,

# animation function.  This is called sequentially
def animate(i):
  x = np.linspace(0, 2, 1000)
  y = np.sin(2 * np.pi * (x - 0.01 * i))
  line.set_data(x, y)
  return line,

# call the animator.  blit=True means only re-draw the parts that have changed.
anim = animation.FuncAnimation(fig, animate, init_func=init,
                           frames=200, interval=20, blit=True)

anim.save('basic_animation.mp4', fps=30, extra_args=['-vcodec', 'libx264'])

display_animation(anim)

由于某种原因,当我右键单击并保存时,我无法以可读格式查看电影...如果有人知道或找到解决方案,请告诉我!

【讨论】:

    猜你喜欢
    • 2013-08-03
    • 2018-12-15
    • 2020-07-12
    • 2014-07-14
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    相关资源
    最近更新 更多