Записывает 5-секундный скринкаст левого верхнего квадрата экрана размером 300x300 пикселей (10 кадров в секунду):
import time, numpy as np, pyautogui, imageio
t0 = time.time()
with imageio.get_writer('test.gif', mode='I', duration=0.1) as writer:
while True:
t1 = time.time()
img = pyautogui.screenshot(region=(0,0,300,300))
writer.append_data(np.array(img))
t2 = time.time()
time.sleep(0.1 - (t2 - t1))
if t2 - t0 > 5:
break
Работает, но выходной файл очень большой (1,5 МБ для 5 секунд и только 300x300px!). Некоторые программы (такие как бесплатное программное обеспечение ScreenToGif) могут генерировать оптимизированный GIF с помощью обнаружения неизмененных пикселей в последовательных кадрах , и тогда для одного и того же файла может потребоваться 50 КБ вместо 1,5 МБ.
Как сделать такой оптимизированный GIF с Python? Возможно ли это с imageio
; если нет, есть ли способ сделать это вручную?