Одним из решений является использование opencv, данные могут быть переданы из PIL в opencv через numpy.Схема кода, который я использовал:
import numpy as np
from PIL import Image, ImageDraw
import cv2
videodims = (100,100)
fourcc = cv2.VideoWriter_fourcc(*'avc1')
video = cv2.VideoWriter("test.mp4",fourcc, 60,videodims)
img = Image.new('RGB', videodims, color = 'darkred')
#draw stuff that goes on every frame here
for i in range(0,60*60):
imtemp = img.copy()
# draw frame specific stuff here.
video.write(cv2.cvtColor(np.array(imtemp), cv2.COLOR_RGB2BGR))
video.release()
Примечания:
- Я получил базовую технику от https://blog.extramaster.net/2015/07/python-pil-to-mp4.html)
- Экстрамастер заявил, что передача -1 в качестве параметра кодека вызовет выбор кодекасписок, который не работал для меня.
- В итоге мне пришлось использовать Debian Buster (= тестирование на момент написания), так как в более ранних выпусках отсутствовал пакет python3-opencv.
- ЭтоКажется, что если размеры вашего кадра не совпадают с размерами видео, opencv молча не сможет добавить кадр.