Как создавать видео из изображений с помощью 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