Как создать видео из изображений с помощью php? - PullRequest
13 голосов
/ 14 февраля 2012

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

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

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

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

Ответы [ 4 ]

11 голосов
/ 14 февраля 2012

Моей первой мыслью было выложить команду ffmpeg примерно так:

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

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

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

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

Где 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, когда вы пытаетесь прочитать это.При желании его можно перенаправить на стандартный вывод.

5 голосов
/ 14 февраля 2012

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

4 голосов
/ 14 февраля 2012

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

2 голосов
/ 05 сентября 2017

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...