Введение
Работа с видео традиционно ассоциируется с тяжёлыми инструментами и сложным 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
Полный список функций и методов библиотеки ffmpeg-python
для Python, сгруппированных по категориям
Библиотека ffmpeg-python
— это высокоуровневая обёртка над FFmpeg, которая позволяет строить команды FFmpeg с помощью Python-кода, сохраняя мощь CLI-инструмента.
Подключение и базовые операции
Функция | Описание |
---|---|
ffmpeg.input(filename, **kwargs) |
Устанавливает входной файл/источник. Можно передать параметры, как ss , t , framerate , format . |
ffmpeg.output(*streams, filename, **kwargs) |
Устанавливает выходной файл и параметры (vcodec , acodec , pix_fmt , crf , и т.д.). |
ffmpeg.run(stream, capture_stdout=False, capture_stderr=False) |
Выполняет построенный пайплайн. |
ffmpeg.run_async(...) |
Запускает процесс асинхронно (возвращает subprocess). |
ffmpeg.probe(filename) |
Возвращает метаинформацию о медиафайле (разрешение, кодеки, длительность и т.д.). |
ffmpeg.get_args(stream) |
Возвращает список аргументов командной строки, без выполнения. |
Работа с видео
Функция | Описание |
---|---|
stream.trim(start=10, end=20) |
Вырезает фрагмент видео. |
stream.crop(x, y, width, height) |
Обрезает часть кадра. |
stream.filter('scale', width, height) |
Масштабирует видео. |
stream.filter('fps', fps=30) |
Устанавливает частоту кадров. |
stream.filter('drawtext', text='...', fontfile='...', fontsize=24) |
Добавляет текст. |
stream.overlay(another_stream) |
Накладывает один поток на другой. |
stream.hflip() / vflip() |
Отражает горизонтально / вертикально. |
stream.concat(v=1, a=1) |
Объединяет несколько видеофрагментов. |
Работа с аудио
Функция | Описание |
---|---|
stream.audio.filter('volume', 0.5) |
Уменьшает громкость до 50%. |
`stream.audio.filter('adelay', delays='1000 | 1000')` |
ffmpeg.input(...).audio |
Получение только аудиопотока. |
ffmpeg.output(..., acodec='aac') |
Установка аудиокодека. |
stream.filter('aecho', ...) |
Добавляет эффект эха. |
Сохранение и экспорт
Функция | Описание |
---|---|
ffmpeg.output(..., filename, format='mp4') |
Указание выходного формата. |
ffmpeg.output(..., vcodec='libx264', crf=23) |
Управление качеством и кодеком. |
ffmpeg.output(..., audio_bitrate='128k') |
Установка битрейта аудио. |
ffmpeg.run(...) |
Запускает экспорт. |
ffmpeg.run_async(...) |
Запускает в фоне. |
Параллельные и продвинутые пайплайны
Функция | Описание |
---|---|
stream.global_args('-y') |
Добавляет глобальные флаги (-y — перезапись). |
stream.output(...).overwrite_output() |
Удобный способ перезаписать файл. |
stream.output(...).run(capture_stdout=True) |
Сохраняет вывод команды. |
ffmpeg.concat(...) |
Объединяет несколько потоков. |
ffmpeg.split(stream) |
Делит поток на несколько. |
Пример: обрезка и перекодирование видео
Пример: добавление текста
Заключение
MoviePy — это мощная и доступная библиотека для видеомонтажа на Python. Она позволяет быстро собирать клипы, добавлять текст, музыку, эффекты и экспортировать в популярные форматы. Подходит как для новичков, так и для автоматизации сложных задач видеопроизводства.