Как быстрее сохранить анимацию с помощью FuncAnimation?

У меня есть следующий код из здесь для наложения точечной диаграммы на изображение с каждой точкой, построенной по одной. Однако мне нужно сделать это для 6000 кадров, и, похоже, для сохранения видео требуется одна минута на кадр. Может ли кто-нибудь предложить более быстрый способ сохранить видео? Или, может быть, указать, что я делаю неправильно, что это занимает так много времени?

Также приветствуется способ разбрасывания точек с помощью opencv.

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import random
from PIL import Image
import urllib.request

random.seed(20210702)
N = 50
x = random.sample(range(0, 380), N)
y = random.sample(range(0, 380), N)
size =  [20 for x in range(380)]
colors = []

cm = plt.get_cmap('jet', N)

fig,ax = plt.subplots(figsize=(9, 4.5))
graph = ax.scatter([], [], marker='+')# 

url = 'https://raw.githubusercontent.com/kornelski/pngquant/master/test/img/test.png'
im = Image.open(urllib.request.urlopen(url))
print(im.size)

def animate(i):
    ax.imshow(im)
    graph.set_offsets(np.vstack((x[:i+1], y[:i+1])).T)
    graph.set_sizes(size[:i+1])
    colors.append(cm(i))
    graph.set_facecolors(colors) 
    return graph

ani = FuncAnimation(fig, animate, frames=6000, repeat=False, interval=0.00001)
FFwriter = animation.FFMpegWriter(fps=1)
ani.save('animation.mp4', writer = FFwriter)

person user42    schedule 04.07.2021    source источник