【问题标题】:Can matplotlib animation output vector sequence?matplotlib动画可以输出向量序列吗?
【发布时间】:2013-05-31 04:06:03
【问题描述】:

是否可以通过matplotlibanimation module输出矢量格式的文件序列?

例如:

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

输出 mp4 电影(通过 ffmpeg)。

我可以指示动画类输出矢量文件的序列吗?

【问题讨论】:

  • 沉默的投票者能否公平并解释他的问题是什么?
  • 好像有人心情不好,对一大堆问题投了反对票。
  • 啊,谢谢@tcaswell,我没有意识到...

标签: matplotlib


【解决方案1】:

要查看您的系统上可用的编写器,请使用:

import matplotlib.animation as animation
print animation.writers.list()

你可能需要为你想要的写一个新的writer

编辑

Matplotlib 动画模块中的“FileWriters”似乎只支持光栅输出。对于FFMpegFileWriter(),这在文档中很清楚,对于FileMovieWriter(),如果我们以不受支持的格式启动此类,则可以派生它:

plt.rcParams['animation.frame_format'] = 'svg'

在这种情况下,打印支持的格式会引发错误:

无法识别的animation.frame_format字符串“'svg'”:有效字符串是 ['rgba', 'tiff', 'jpeg', 'png', 'raw']

所以 Matplotlib 动画模块似乎只适用于栅格数据。

【讨论】:

  • 它输出['ffmpeg', 'ffmpeg_file']。我查看了 ffmpeg 支持的编解码器的密集列表,但似乎没有一个提供矢量输出,而且我首先不确定 MPL 是否为编码器提供光栅,或者是否有可能从 MPL 动画模块输出矢量。我的问题是我使用 x264 和适合动画的自定义参数,但我的轮廓动画肯定看起来更好。也许我应该忘记它,并使用figsave() 然后使用一些动画包。
  • 您只需要正确设置参数即可。动画作者完全与使用figsave 保存图像相同(实际上,'ffmpeg_file'确实保存文件然后使用 ffmpeg 将它们拼接在一起,但是速度很慢)。
  • 或许FileMovieWriter可以输出向量文件的序列。我会研究一下,因为我的印象是动画模块比在循环中简单地使用 figsave() 快得多。
  • 它更快,因为它只是将渲染图像直接通过管道传输到ffmpeg,而无需将文件写入磁盘(包括所有元数据)。我不知道任何基于矢量的电影格式(但我对视频编解码器了解不多)。
  • 我以为 SWF 是 flash 并且基本上已经死了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-17
  • 2018-02-28
  • 2012-01-18
  • 1970-01-01
相关资源
最近更新 更多