Python ImageIO中动画Gif的自定义帧持续时间

时间:2016-07-18 09:42:43

标签: python image animation

我一直在玩Python中的GIF动画,其中的帧将由位于温室中的Raspberry Pi相机生成。我使用了来自Almar's answer to a previous question的推荐imageio代码,成功创建了简单的GIF。

但是,我现在正试图减慢帧持续时间但是查看documentation for imageio并且找不到mimsave的任何引用,但确实看到mimwrite,它应该采用四个args。我查看了additional gif documentation并且可以看到有持续时间参数。

目前,我的代码如下:

exportname = "output.gif"
kargs = { 'duration': 5 }
imageio.mimsave(exportname, frames, 'GIF', kargs)

我收到以下错误:

Traceback (most recent call last):
File "makegif.py", line 23, in <module>
imageio.mimsave(exportname, frames, 'GIF', kargs)
TypeError: mimwrite() takes at most 3 arguments (4 given)

其中frames是imageio.imread对象的列表。这是为什么?

更新显示全部答案: 这是一个示例,显示如何使用kwargs创建带有imageio的GIF动画来更改帧持续时间。

import imageio
import os
import sys

if len(sys.argv) < 2:
  print("Not enough args - add the full path")

indir = sys.argv[1]

frames = []

# Load each file into a list
for root, dirs, filenames in os.walk(indir):
  for filename in filenames:
    if filename.endswith(".jpg"):
        print(filename)
        frames.append(imageio.imread(indir + "/" + filename))


# Save them as frames into a gif 
exportname = "output.gif"
kargs = { 'duration': 5 }
imageio.mimsave(exportname, frames, 'GIF', **kargs)

3 个答案:

答案 0 :(得分:9)

mimsave不接受4个位置参数。超出第3个参数的任何内容都必须作为关键字参数提供。换句话说,您必须像这样解压缩kargs

imageio.mimsave(exportname, frames, 'GIF', **kargs)

答案 1 :(得分:6)

或者你可以这样称呼它:

imageio.mimsave(exportname, frames, format='GIF', duration=5)

答案 2 :(得分:0)

我发现这是最简单,最可靠的解决方案

>>> np.char.isalpha(x)

,然后脚本的最后一行就是您要查找的

import imageio
import os

path = '/path/to/script/and/frames'
image_folder = os.fsencode(path)

filenames = []

for file in os.listdir(image_folder):
    filename = os.fsdecode(file)
    if filename.endswith( ('.jpeg', '.png', '.gif') ):
        filenames.append(filename)

filenames.sort() # this iteration technique has no built in order, so sort the frames

images = list(map(lambda filename: imageio.imread(filename), filenames))