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

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

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

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

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

4 ответов


моей первой мыслью было выложить команде ffmpeg что-то вроде этого.

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

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

ffmpeg-r 25-qscale 2-i %05d.морф.выходной формат JPG.МР4

(веб-сайт, с которого была взята эта реклама, исчез. Ссылка на сайт был удален.)

где 25 означает 25 кадров в секунду. Вы можете установить это в 1 для небольшой (1 сек) задержки или использовать десятичные дроби, то есть: 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, если вы предпочитаете.


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


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


вы можете использовать эффект смешивания с 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