使用ImageMagick保存matplotlib动画,而不依赖ffmpeg或mencoder
我想制作一个计算函数的动画。不过,我在使用的集群上无法安装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")
附加内容
作为附加内容,这里有一个生动的例子: