Генерируем видео с картинок. Добавляем звук. Скрипт на 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. Если музыкальный файл короче видео, то дальше будет тишина.

Вывод

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

  • Доброго времени суток!

    Скажите как добавлять рандомно музыку из списка в видео?

    • Можно с помощью random.

      import random

      music_list = ['a', 'b', 'c', 'd', 'e']
      music4video = random.choice(music_list)

  • Кто подскажет как наложить аудио не с нулевой секунды,а с той секунды с которой мне нужно.

    • Посмотрите репозиторий moviepy на гитхаб. Там есть решения, как пример:

      clip.set_audio(CompositeAudioClip([audioclip.set_start(3)]))

  • Интересно. А как добавлять анимацию и текст на видео как во всех онлайн-редакторах делают?

    • Элементарно. Анимацию через VideoFileClip, картинки через ImageClip, текст через TextClip.
      Вчера делал генератор видео для ютуб, накладывал анимацию (стрелочки для «Переходите по ссылке»).

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

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