FFmpeg-python – работа с видео

онлайн тренер по питону
Онлайн-тренажер Python 3 для начинающих

Теория без воды. Задачи с автоматической проверкой. Подсказки на русском языке. Работает в любом современном браузере.

начать бесплатно

Введение

Работа с видео традиционно ассоциируется с тяжёлыми инструментами и сложным 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) Делит поток на несколько.

Пример: обрезка и перекодирование видео

python
import ffmpeg ( ffmpeg .input('input.mp4', ss=5, t=10) .output('cut.mp4', vcodec='libx264', acodec='aac', crf=23) .run() )

Пример: добавление текста

python
ffmpeg.input('input.mp4').filter('drawtext', text='Пример', fontfile='Arial.ttf', fontsize=24, fontcolor='white', x=10, y=10 ).output('output.mp4').run()

Заключение

MoviePy — это мощная и доступная библиотека для видеомонтажа на Python. Она позволяет быстро собирать клипы, добавлять текст, музыку, эффекты и экспортировать в популярные форматы. Подходит как для новичков, так и для автоматизации сложных задач видеопроизводства.