Генерируем видео с картинок. Добавляем звук. Скрипт на python 3

Создание видео из картинок с музыкой на python автоматически

Наткнулся на днях на очень интересный запрос. Человеку нужно было сделать много видео-обзоров для его интернет-магазина, чтобы разместить видео на youtube. То есть заказчик хотел обзоры своих товаров, и (скорее всего) по ключевым словам разместить их на ютубе. В заказе прямо писал что достаточно сделать скриншоты страниц, полазить по сайту и наложить легкую бесплатную музыку. И что работа однотипная, естественно платить много не сможет.
И я стал думать как же это автоматизировать: чтобы комп сам делал скриншоты, генерировал видео и накладывал аудио. Оказалось, не так и тяжело. Читайте, как все это замутить скриптом на python 3.

Как создать генератор видео с музыкой — план действий

Разобьем задачу на несколько мелких:
1) делаем скриншоты страниц сайта (с помощью selenium+phantomjs);
2) генерируем видео из картинок (с модулем OpenCV);
3) добавляем аудио на видео (через модуль moviepy).

Как сделать скриншоты сайта в питоне

Чтобы создать скриншот сайта в selenium достаточно прописать вот такой код:

В нашей задаче удобнее всего использовать phantomjs (чтобы не открывать кучу окон Chrome или FireFox). Поэтому задаем в селениуме фантом, ставим размер окна и делаем скриншоты.

Несколько важных моментов:
1) selenium, phantomjs не входят в стандартную сборку (устанавливаем через pip, phantomjs скачиваем с основного сайта);
2) иногда нужно указать прямой путь к файлу phantomjs.exe (просто в скобках):

3) иногда не срабатывает set_window_size, и делается снимок всей высоты страницы. Если у вас так — пишите в комментарии;
4) при медленном соединении или долгой загрузкой сайта добавьте временную задержку, чтобы получить «нормальный» скриншот:

Создаем видео файл с картинок на opencv python
Генерируем видео с картинок на opencv python

Как создать видео с картинок на питоне

Идем дальше. Скриншоты страницы мы сделали, теперь будем генерировать видео:

P.S. я не претендую на звание «кодер года», поэтому может что не так назвал или «неправильно» написал. Главное — что все работает.

Немного объясню строку:

В скобках сначала прописываем КУДА мы записываем видео (оно может не существовать);
далее задаем кодеки (чуть позже напомню об этом);
потом частота кадров (в нашем случае 1.0 — 1 скриншот в секунду);
и в конце высота и ширина видео.
ВАЖНО! Когда генерируете видео, его размер должен быть такой же как и размер картинок. Если у Вас картинки разного размера — Вы получите ошибку.

Теперь по кодекам. Я более двух часов возился с ffmpeg, чтобы прописывать *’XVID’ в настройке, как было указано в документациях. В детали внедряться не буду, просто этот код работает как мне надо :).

Кроме того, в примере я импортирую библиотеку os. В некоторых случаях я использую следующий код для открытия файлов в cv2, кому как удобно:

После генерации видео идем дальше.

Добавляем аудио к видео файла с помощью moviepy на python 3
Добавляем аудио к видео файла с помощью moviepy на python 3

Как добавить аудио в видео в python 3

Нам нужно добавить аудио-файл к видео. Для этого я решил использовать модуль moviepy (устанавливается через pip).

Добавить дополнительную дорожку на видео в python 3 moviepy

Если Вам нужно добавить дополнительную дорожку на видео, то следует использовать код:

В таком случае сначала накладывается музыкальный файл, и если он короче длины видео — то оставшееся время идет основная дорожка с видео.

Заменить аудио на видео в python 3 moviepy

Если же нужно полностью заменить дорожку в видео, то используем пример:

Здесь основная дорожка с видео «убирается», пишется только наша музыка — 1.mp3. Если музыкальный файл короче видео, то дальше будет тишина.

Вывод

Вот так можно генерировать целые видео-обзоры со скриншотами, накладывать музыку, и все это делать массово. Теперь Вы знаете как сделать много видео без видео-редактора. Удобно, согласитесь. Я вот уже думаю заказов набрать, сразу после отпуска.
Полный код не привожу, еще в порядок не навел.
А Вы встречали подобные запросы? Или что-то другое связанное с видео, музыкой, скриншотами?

0 Comments

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *