FFmpeg ч. 5 Делаем видео из картинок, текста и музыки

Осенью я сделал несколько клипов посвященных использованию ffmpeg для создания видеороликов из статичного контента — картинок и текста. Идея в создании программного комплекса способного генерить видеролики из карточек товара в автоматическом режиме.

Мне показалось что тема не очень зашла, да и как то навалилось работы, поэтому продолжение забросил. Однако, периодически, ко мне прорывается фидбек из разряда когда будет дальше. Поэтому будущее наступило и сегодня покажу как можно используя ffmpeg собрать готовый ролик из статики. Чтобы с анимацией. И музычки накинем.

В предыдущих роликах я обходился командной строкой Windows и батниками, но для решения сегодняшней задачи это слишком многословно и не универсально. Поэтому я использовал ещё и Python на минималках.

Сам по себе выходной ролик в творческом плане ))) абсолютно убог, но задача показать как все то, что было в моих роликах раньше, собрать в единое целое. Код без защиты от дурака и вредоноса, в продакшен такое нельзя !

Думаю с вступлением достаточно. Поехали.

Входные данные

У меня есть папка data, где лежат несколько картинок с расширением jpg и текстовый файл с несколькими строками текста. Я использую все картинки, сколько бы их не было в папке. Я показываю все строки текста в файле.

Анимации изображений с помощью ffmpeg

Каждая картинка показывается с тремя анимациями одинаковой продолжительности.

  1. Картинка плавно въезжает в высоту экрана из большего размера
  2. Картинка показывается вписанной в экран
  3. Картинка увеличивается из вписанной, после чего заменяется новой картинкой.

Длина ролика разная. Зависит от количества картинок.

Анимация текста с помощью ffmpeg

Текст выкатывается справа налево, каждая строка текста из текстового файла размещается в видео под предыдущей строкой текста. Скорость выкатывания строк зависит от длины текста, количества строк текста и совокупной длины ролика (которая зависит от количества картинок в папке).

Музыка

Музыку взял из фотонотеки YouTube и наложил на готовый ролик. Она должна обрезаться под длину ролика.

В итоге получилось вот такое видео.

Код скрипта на Python

Python 3.8. Библиотека только одна os, чисто для работы с входными файлами.


Повторюсь, код грязный !!! Его нельзя в лоб использовать в живом проекте на автомате. Например он проверяет файлы картинок по расширению и берет только jpg. Это не безопасно, да и картинки могут быть не только jpg ))). А длинные текстовые строки просто не будут помещаться в ширину видео. Одним словом дорабатывать его ещё и дорабатывать.

Однако что-то подобное у меня успешно работает несколько месяцев на полном автомате, заливая короткие ролики-презентации по api в социалки.

На выходе для данных из трех картинок и текстового файла с 4 строками текста получается вот такая сборка для ffmpeg:


Если дело дойдет до продолжения, то либо пойдем в сторону придумывания разных эффектов, либо в сторону парсинга источников статики и генерации из этой статики видео по схеме в этой статье. Ну или поговорим про использование api для заливки видео. Мне лично про эффекты более интересно. Если есть пожелания пишите или здесь (тут премодерация комментариев) или на Youtube.