使用ImageMagick保存matplotlib动画,而不依赖ffmpeg或mencoder

6 投票
2 回答
13230 浏览
提问于 2025-04-18 05:03

我想制作一个计算函数的动画。不过,我在使用的集群上无法安装ffmpeg或mencoder,但imagemagick已经安装好了。matplotlib.animation似乎支持使用imagemagick来制作动画(比如可以在这里找到相关信息)。文档中提到支持的格式有:

['png', 'jpeg', 'ppm', 'tiff', 'sgi', 'bmp', 'pbm', 'raw', 'rgba']

我发现其中有几个格式并不是动画文件,但显然ffmpeg以某种方式支持.sgi文件。如果我在集群上必须使用的编码器比较冷门,那也没关系,只要我能在家里的电脑上用ffmpeg或mencoder转换就行。

我该如何使用imagemagick来保存一个matplotlib的动画呢?

2 个回答

0

其实你可以下载 imagemagick,然后修改 matplotlibrc 文件来启用它。

14

我在尝试把一些 matplotlib 动画导出为动画 gif 的时候,发现了这篇旧帖子。其实这并不是太复杂,但第一次设置的时候还是有点麻烦。我把这篇帖子留着,以备将来参考。

至于在集群上设置这个环境的具体步骤,你可能需要根据你服务器的具体需求来调整每一步。动画 gif 至少是 ImageMagickWriter 提供的动画选项之一,但可能还有其他选项。

操作步骤

  • 获取 ImageMagick 的安装文件
  • 设置一个环境变量 MAGICK_HOME,指向 '<你的安装目录>\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")

附加内容

作为附加内容,这里有一个生动的例子:

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

撰写回答