使用ImageMagick保存matplotlib动画,无需使用ffmpeg或mencoder

6
我希望创建一个计算函数的动画。我无法在我运行动画的集群上安装ffmpeg或mencoder,但是已经安装了imagemagick。显然,matplotlib.animation支持使用imagemagick作为动画的编写器(例如, 参见这里)。文档说明支持的格式有:
['png', 'jpeg', 'ppm', 'tiff', 'sgi', 'bmp', 'pbm', 'raw', 'rgba']

我认识其中几种非动画文件类型,但显然ffmpeg以某种方式支持.sgi文件。如果我能在家用ffmpeg或mencoder转换它,那么使用集群上的编解码器就没问题了,即使它很晦涩。
如何使用imagemagick保存matplotlib生成的动画?

动态GIF是否可接受? - ebarr
@ebarr:可以接受,但不是最理想的选择。 - Dan
使用你链接的imagemagick写入器。我真的不明白你的问题,因为我认为你在问题中提供了答案的链接。 - tacaswell
根据文档,gif不是被支持的格式。 - Dan
目前,如果您没有指定“writer”,matplotlib似乎会默认使用Pillow来制作gif。因此,您不需要imagemagick、ffmpeg或mencoder。 - Wayne
2个回答

14

当我在努力将一些matplotlib动画导出为动态gif时,我找到了这篇旧文章。它并不是什么高深技术,但第一次设置还是有点麻烦的。我把这篇文章留给以后参考。

至于在集群上设置此环境的具体细节,我想你需要根据你的服务器的具体需求翻译每一步。动态gif至少是由ImageMagickWriter提供的动画选项之一,但可能还有其他选项。

如何操作

  • 获取ImageMagick二进制文件
  • 设置一个环境变量MAGICK_HOME,指向'<your-install-dir>\modules\coders'文件夹(见文档,如果在Windows上,请记得注销并重新登录)
  • 将matplotlib指向ImageMagick的安装目录:(mpl rcParams文档

import matplotlib.pyplot as plt
plt.rcParams['animation.convert_path'] = '<your-install-dir>/magick.exe'
  • 导出您的动画! (mpl文档中关于ImageMagickFileWriter的介绍)

  • writer = ImageMagickFileWriter()
    your_animation.save('location.gif', writer=writer)
    

    请注意,默认情况下,除了返回非零的返回码外,ImageMagick抛出的错误不会传达给您。为了获得更详细的反馈信息,您需要类似以下的内容:

    import matplotlib as mpl
    mpl.verbose.set_level("helpful")
    

    奖励

    作为奖励,这里有一个生命的证明:

    荷兰第一次怀孕时母亲的年龄


    1
    mpl.verbose.set_level("helpful") didn't work for me. Try mpl.rcParams['verbose.level'] = 'helpful' - William Gerecke

    0

    实际上,您可以下载ImageMagick并编辑matplotlibrc以启用它。


    4
    能否提供更多细节? - James A Mohler

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接