Как создавать видео с изображений с помощью php?

Скажем, у меня есть 10 изображений, и я хочу объединить эти изображения в видео, как в слайд-шоу.

Например, я хочу показать каждое изображение в течение 5 секунд, а затем продолжить следующее изображение еще на 5 секунд.

Если это возможно, будет идеально включать музыку и некоторый описательный текст.

Есть ли пример кода для этого с библиотекой ffmpeg?

Ответ 1

Моя первая мысль заключалась в том, чтобы выполнить команду ffmpeg с чем-то вроде этого.

Создание видео с изображений

ffmpeg может использоваться для сшивания нескольких изображений вместе в видео. Существует много вариантов, но следующего примера должно быть достаточно, чтобы начать. Он принимает все изображения с именами файлов XXXXX.morph.jpg, где X является числовым, и создает видео, называемое "Output.mp4". Параметр qscale указывает качество изображения (1 наивысший и 32 - самый низкий), а опция "-r" используется для укажите количество кадров в секунду.

ffmpeg -r 25 -qscale 2 -i% 05d.morph.jpg output.mp4

(Веб-сайт, на котором был снят этот рекламный блок, отсутствует. был удален.)

Где 25 означает 25 изображений в секунду. Вы можете установить это значение 1 для небольшой (1 с) задержки или использовать десятичные значения, IE: 0,5 для задержки 2 секунды.

Затем вы можете объединить видео и аудиопоток с чем-то вроде этого.

ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -b:a 128k final.mp4

Конечно, выберите подходящие кодеки. Если вы хотите, чтобы mp4 использовал libx264 для видео и aac (встроенный в ffmpeg и уже не "экспериментальный" ) для аудио.

Просто помните, что если вы решите использовать такой метод, который выводит вывод ffmpeg, по умолчанию, stderr, когда вы пытаетесь его прочитать. Он может быть перенаправлен на stdout, если вы предпочитаете.

Ответ 2

Первое, что пришло мне в голову, было imagemagick. Я использовал его с PHP для большого количества манипуляций с изображениями, и я знаю, что он поддерживает чтение приличного количества видеоформатов, и в соответствии с этой ссылкой он также поддерживает запись некоторым.

Ответ 3

да, ffmpeg - правильное решение для вас. я недавно сделал нечто похожее - видео-сайт с анимированными эскизами. Я использовал ffmpeg для компоновки изображений в аминированном gif. однако выход может быть любым, что вам нужно... К сожалению, в моих поисках в этом разделе я не нашел кода для примера, который бы совпадал со всеми вашими моментами, поэтому я предполагаю, что вам придется попробовать вручную с помощью ffmpeg.. в моем проекте я использовал php video toolkit http://sourceforge.net/projects/phpvideotoolkit/ в некоторых частях, чтобы сделать его немного проще...

Ответ 4

Эффект blend можно использовать с ffmpeg:

ffmpeg -framerate 20 \
-loop 1 -t 0.5 -i 1.jpg \
-loop 1 -t 0.5 -i 2.jpg \
-loop 1 -t 0.5 -i 3.jpg \
-loop 1 -t 0.5 -i 4.jpg \
-c:v libx264 \
-filter_complex " \
[1:v][0:v]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b1v]; \
[2:v][1:v]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b2v]; \
[3:v][2:v]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b3v]; \
[0:v][b1v][1:v][b2v][2:v][b3v][3:v]concat=n=7:v=1:a=0,format=yuv420p[v]" -map "[v]" out.mp4

Вы должны проверить ссылку ниже для получения большего эффекта ffmpeg: D

https://github.com/letungit90/ffmpeg_memo