【问题标题】:Creating an animation out of Matplotlib .pngs从 Matplotlib .pngs 创建动画
【发布时间】:2020-08-26 04:32:24
【问题描述】:

你好,我刚刚写完一个计算氢原子轨道的代码。我写了一个for循环,使用命令创建300张图片

plt.savefig("image{i}.png".format(i=i))

现在我想问一下使用 python 从图片中创建高质量 .mp4 或 .gif 文件的最简单方法是什么。我看了几个教程,因为 gif 乱七八糟或者质量太低,对我没有帮助。

感谢您的支持

【问题讨论】:

标签: python matplotlib ffmpeg python-imaging-library


【解决方案1】:

我知道的最简单的方法是使用imageiomimwrite

import imageio
ims = [imageio.imread(f) for f in list_of_im_paths]
imageio.mimwrite(path_to_save_gif, ims)

有明显的选项,例如持续时间、循环次数等。
您可以使用imageio.help('gif') 在文档中了解其他一些选项。

希望对您有所帮助。

【讨论】:

  • 我将 list_of_im_paths 更改为 "~/Plot" 保存 .png 的目录,但出现语法错误。
  • 嗯,那是因为你需要一个路径列表,而不仅仅是一个路径。列表理解如何知道您要使用该目录中的 png 列表?尝试使用 glob 或 os.listdir。
  • @Phicalc,这回答了你的问题吗?如果是这样,通常会接受,以使贡献者和整个社区受益。
【解决方案2】:

更快的方法是使用imageio@ShlomiFanswer,但如果您愿意,也可以使用纯matplotlib 做同样的事情:

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

nframes = 25
plt.subplots_adjust(top=1, bottom=0, left=0, right=1)

def animate(i):
    im = plt.imread('image'+str(i)+'.png')
    plt.imshow(im)

anim = FuncAnimation(plt.gcf(), animate, frames=nframes, interval=(2000.0/nframes))
anim.save('output.gif', writer='imagemagick')

但如果您的首要任务是输出质量,您可能要考虑直接使用ffmpegconvert

ffmpeg -f image2 -i image%d.png output.mp4
ffmpeg -i output.mp4 -vf "fps=10,scale=320:-1:flags=lanczos" -c:v pam -f image2pipe - | \
          convert -delay 10 - -loop 0 -layers optimize output.gif

根据需要更改scale 参数以控制最终输出的大小,scale=-1:-1 保持大小不变​​。

【讨论】:

    猜你喜欢
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    • 1970-01-01
    相关资源
    最近更新 更多