Tenho o seguinte código que cria 60 quadros usando pillow em python 3.11.10 e que quero usar para criar um GIF (repetição infinita), com duração de 0,1 segundo por quadro. Os primeiros 4 quadros devem mostrar um quadrado vermelho, e o restante do tempo (quase 6 segundos) deve ser basicamente preto. No entanto, o GIF criado parece conter apenas 2 quadros, um com o quadrado vermelho e outro sem. Como criar o GIF corretamente?
from PIL import Image, ImageDraw
import imageio
import numpy as np
# Colors
red = (255, 0, 0)
black = (0, 0, 0)
grey = (30, 30, 30)
frames = []
framerate = 10
frame_count = 60
for i in range(frame_count):
# Create an image with black background
img = Image.new('RGB', (55, 50), black)
draw = ImageDraw.Draw(img)
# Draw rectangle
draw.rectangle((10, 20, 45, 30), fill=red if i<5 else grey)
# Append frame to the list
frames.append(np.array(img))
# Save frames as a GIF
imageio.mimsave("test.gif", frames, duration=1./framerate, loop=0, plugin='pillow')
Aqui está o gif criado:
Comportamento esperado: 0,4 segundos mostrando o quadrado vermelho, depois 5,6 segundos mostrando basicamente preto.
Com a sugestão de Grismar: