Введение
Работа с видео традиционно ассоциируется с тяжёлыми инструментами и сложным API. Но в Python существует библиотека, делающая видеоредактирование простым и выразительным — MoviePy. Она позволяет создавать, редактировать, комбинировать и экспортировать видео с минимальным количеством кода.
MoviePy построена поверх FFmpeg и поддерживает множество видео- и аудиоформатов. Библиотека удобна для создания динамических роликов, генерации мемов, программного монтажа, анимации и синхронизации с аудио. В этой статье — полный обзор возможностей MoviePy, от обрезки и фильтров до генерации надписей и работы со звуком.
Основная часть
Установка
pip install moviepy
Дополнительно: убедитесь, что установлен ffmpeg
(MoviePy вызывает его под капотом).
Загрузка видео
from moviepy.editor import VideoFileClip
clip = VideoFileClip("video.mp4")
Обрезка видео
clip_cut = clip.subclip(10, 20) # с 10-й по 20-ю секунду
Изменение размера и FPS
resized = clip.resize(height=480)
fps_changed = clip.set_fps(30)
Добавление текста
from moviepy.editor import TextClip, CompositeVideoClip
text = TextClip("Привет!", fontsize=70, color='white')
text = text.set_position("center").set_duration(5)
final = CompositeVideoClip([clip_cut, text])
Объединение нескольких клипов
from moviepy.editor import concatenate_videoclips
final = concatenate_videoclips([clip1, clip2, clip3])
Анимации: появление, исчезновение, перемещение
text = text.fadein(1).fadeout(1)
Работа со звуком
audio = clip.audio
clip_no_audio = clip.without_audio()
clip_with_new_audio = clip.set_audio(audio_clip)
Извлечение аудио
clip.audio.write_audiofile("sound.mp3")
Создание GIF
clip.subclip(5, 10).resize(0.5).write_gif("funny.gif")
Экспорт финального ролика
final.write_videofile("output.mp4", fps=24)
Использование программно созданных клипов
from moviepy.editor import ColorClip
red = ColorClip(size=(640, 480), color=(255, 0, 0), duration=3)
Работа с масками и прозрачностью
clip = clip.set_opacity(0.5)
Эффекты
-
fadein(duration)
/fadeout(duration)
— затемнение -
volumex(factor)
— изменение громкости -
fx()
— функция для применения эффектов (например, зеркалирование)
Пример:
from moviepy.video.fx import mirror_x
mirrored = mirror_x(clip)
Сравнение с другими инструментами
Инструмент | Поддержка видео | Аудио | Текст | Анимации | Уровень кода |
---|---|---|---|---|---|
MoviePy | Да | Да | Да | Да | Низкий |
OpenCV | Да (низкоуровневое) | Нет | Ограничено | Ограничено | Средний |
FFmpeg (CLI) | Да | Да | Нет | Да | Высокий |
Примеры использования
-
Генерация интро и аутро
-
Создание рекламных роликов
-
Обработка видео с веб-камер
-
Монтирование выпусков подкастов с анимированными подложками
-
Конвертация видео в GIF/MP4
Полный список функций и методов библиотеки MoviePy
для Python, сгруппированных по категориям
Загрузка и создание клипов
Функция | Описание |
---|---|
VideoFileClip(filename) |
Загружает видеофайл как объект-клип. |
AudioFileClip(filename) |
Загружает аудиофайл. |
ImageClip(filename) |
Создаёт видео из изображения. |
TextClip(txt, font, fontsize, color) |
Создаёт текстовый клип. |
ColorClip(size, color, duration) |
Генерирует однотонное видео. |
CompositeVideoClip(clips) |
Комбинирует несколько клипов в один (наложение). |
concatenate_videoclips(clips) |
Склеивает клипы друг за другом. |
concatenate_audioclips(clips) |
Объединяет аудио. |
ImageSequenceClip(image_list, fps) |
Создаёт видео из последовательности изображений. |
Основные операции с видео
Метод | Описание |
---|---|
clip.subclip(t_start, t_end) |
Вырезает фрагмент видео. |
clip.cutout(t_start, t_end) |
Удаляет фрагмент из клипа. |
clip.set_duration(t) |
Устанавливает длительность клипа. |
clip.set_fps(fps) |
Изменяет FPS. |
clip.resize(height=..., width=...) |
Масштабирует клип. |
clip.rotate(angle) |
Поворачивает клип. |
clip.speedx(factor) |
Ускоряет или замедляет клип. |
clip.volumex(factor) |
Изменяет громкость. |
clip.set_audio(audio_clip) |
Заменяет аудиодорожку. |
clip.without_audio() |
Удаляет звук. |
clip.set_position((x, y)) |
Позиционирует клип в кадре (для композита). |
Работа с текстом и изображениями
Метод | Описание |
---|---|
TextClip(txt) |
Создание текста в видео. |
text_clip.set_duration(t) |
Задает длительность отображения текста. |
text_clip.set_position(pos) |
Задает позицию текста ("center" , координаты, функции). |
text_clip.crossfadein(t) |
Плавное появление текста. |
text_clip.crossfadeout(t) |
Плавное исчезновение. |
clip.set_opacity(alpha) |
Прозрачность клипа или текста. |
Фильтры и эффекты
Метод | Описание |
---|---|
clip.fx(vfx.fadein, duration) |
Плавное появление. |
clip.fx(vfx.fadeout, duration) |
Плавное исчезновение. |
clip.fx(vfx.blackwhite) |
Чёрно-белый фильтр. |
clip.fx(vfx.invert_colors) |
Инвертирует цвета. |
clip.fx(vfx.time_mirror) |
Обратное воспроизведение. |
clip.fx(vfx.lum_contrast, lum, contrast) |
Изменяет яркость и контраст. |
Сохранение и экспорт
Метод | Описание |
---|---|
clip.write_videofile(filename, fps) |
Сохраняет видеофайл. |
clip.write_gif(filename) |
Сохраняет клип в формате GIF. |
clip.write_images_sequence(folder) |
Сохраняет кадры как изображения. |
clip.audio.write_audiofile(filename) |
Сохраняет только аудиодорожку. |
Получение информации
Атрибут / Метод | Описание |
---|---|
clip.duration |
Длительность клипа (в секундах). |
clip.fps |
Частота кадров. |
clip.size |
Размер кадра (ширина, высота). |
clip.reader |
Доступ к низкоуровневому читателю кадров. |
clip.iter_frames() |
Итератор по кадрам в формате NumPy-массивов. |
Пример: нарезка и экспорт видео
Заключение
MoviePy — это мощная и доступная библиотека для видеомонтажа на Python. Она позволяет быстро собирать клипы, добавлять текст, музыку, эффекты и экспортировать в популярные форматы. Подходит как для новичков, так и для автоматизации сложных задач видеопроизводства.