Библиотека MoviePy для создания анимации на Python

MoviePy — это мощная библиотека Python для редактирования видео и создания анимации.

MoviePy — это программное обеспечение с открытым исходным кодом, изначально написанное 
Zulko и выпущенное под лицензией MIT. Оно работает на Windows, Mac и Linux с Python 2 или Python 3. Код размещен на 
Github , где вы можете вносить улучшения, сообщать об ошибках и просить о помощи.

Рассмотрим пример кода, который использует библиотеку MoviePy для создания анимации с вращающимися кругами.

import numpy as np
import gizeh
import moviepy.editor as mpy

W, H = 800, 400  # Разрешение видео
duration = 60  # Длительность видео в секундах
circles = 20  # Количество кругов

def make_frame(t):
    surface = gizeh.Surface(W, H)  # Создание поверхности для рисования

    for i in range(circles):
        angle = 10 * np.pi * (0.25 * i / circles + t / duration)  # Вычисление угла для каждого круга
        center = W * (0.5 + gizeh.polar2cart(0.1, angle))  # Вычисление центра круга
        circle = gizeh.circle(r=W * (1.0 - 1.0 * i / circles),  # Создание круга
                              xy=center, fill=(i % 2, i % 2, i % 2))
        circle.draw(surface)  # Рисование круга на поверхности

    return surface.get_npimage()  # Возвращение кадра как NumPy массива

clip = mpy.VideoClip(make_frame, duration=duration)  # Создание видео клипа
clip.write_videofile("movie.mp4", fps=24)  # Запись видео файла с частотой 24 кадра в секунду
		

В этом коде мы импортируем необходимые библиотеки: numpy для работы с массивами, gizeh для рисования фигур и moviepy.editor для редактирования видео.

Затем устанавливаем параметры видео: разрешение (W и H), длительность (duration) и количество кругов (circles).

Функция make_frame(t) генерирует кадр видео для заданного времени t. Она создает поверхность для рисования с помощью gizeh.Surface, а затем в цикле рисует круги. Угол каждого круга вычисляется в зависимости от времени t и его индекса, что создает эффект вращения. Центр круга также вычисляется с помощью функции gizeh.polar2cart. Цвет круга меняется в зависимости от индекса (i % 2).

После создания функции make_frame мы используем mpy.VideoClip для создания видео клипа, передавая функцию генерации кадра и длительность видео. Наконец, вызывая метод write_videofile, мы записываем видео файл с именем “movie.mp4” с частотой 24 кадра в секунду.

Библиотека MoviePy позволяет легко создавать сложные анимации и визуальные эффекты, предоставляя удобный интерфейс для работы с видео. В данном примере мы создали простую анимацию с вращающимися кругами, но с помощью MoviePy можно реализовать гораздо более сложные визуальные эффекты.