2012-02-13 27 views
11

Digamos que tengo 10 imágenes y quiero combinar esas imágenes en un video como una presentación de diapositivas.Cómo crear videos de imágenes con php?

Por ejemplo, quiero mostrar cada imagen durante 5 segundos y luego continuar con la siguiente imagen durante otros 5 segundos.

Si es posible, será perfecto incluir música y texto descriptivo.

¿Hay un código de muestra para esto con la biblioteca ffmpeg?

Respuesta

9

Mi primer pensamiento fue pagar al comando ffmpeg con algo como esto.

creación de un vídeo a partir de imágenes

ffmpeg puede usarse para coser varias imágenes juntas en un vídeo. Hay muchas opciones, pero el siguiente ejemplo debería ser suficiente para comenzar a . Toma todas las imágenes que tienen nombres de archivo de XXXXX.morph.jpg, donde X es numérico y crea un video llamado "output.mp4". La opción qscale especifica la calidad de la imagen (1 es la más alta, y 32 es la más baja), y la opción "-r" se usa para especificar el número de fotogramas por segundo.

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

(El sitio web que esta propaganda fue tomado de se ha ido. Enlace se ha eliminado.)

Donde 25 significa 25 imágenes por segundo. Puede establecer esto en 1 por un retraso leve (1 segundo) o usar decimales, IE: 0.5 por un retraso de 2 segundos.

Puede combinar una secuencia de video y audio con algo como esto.

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

Por supuesto, elija los códecs apropiados. Si quieres un mp4 usa libx264 para video y aac (integrado en ffmpeg y ya no es "experimental") para audio.

Recuerde que si elige utilizar un método como este, la salida de ffmpeg irá, de manera predeterminada, a stderr cuando intente leerlo. Se puede redirigir a stdout si lo prefiere.

+0

bien, por lo que puede elegir cuadros por segundo, pero es eso significa que podemos determinar la duración del video aumentando los fps? por ejemplo, si 25 fps es 1 segundo. ¿Usar 'ffmpeg -r 250' significa 10 segundos para cada imagen? – motto

+0

No, usará 25 imágenes por segundo. 25 fue solo un ejemplo de copiar/pegar. Intente configurarlo en 1 o incluso 0.5 para una pausa de 2 segundos. Agregué esta información a la publicación también. – Timeout

+0

La URL ya no funciona. –

5

Lo primero que me vino a la mente fue imagemagick. Lo he usado con PHP para una gran cantidad de manipulación de imágenes y sé que es compatible con la lectura de una cantidad decente de formatos de video y de acuerdo con ese enlace también es compatible con la escritura de algunos.

+2

imagick requiere ffmpeg así que, básicamente, no hay ninguna ventaja en el uso de la manipulación de video con php ... – Michal

4

sí, ffmpeg es la solución adecuada para usted. Recientemente hice algo similar: un sitio de videos con miniaturas animadas. Usé ffmpeg para juntar imágenes en un gif aminado. sin embargo, el resultado puede ser lo que necesite ... desafortunadamente, en mis búsquedas sobre este tema no he encontrado ningún código de muestra que combine todos los puntos que está buscando, así que supongo que tendrá que intentarlo manualmente con ffmpeg. . En mi proyecto utilicé el kit de herramientas de php video http://sourceforge.net/projects/phpvideotoolkit/ en algunas partes para hacerlo un poco más fácil ...

2

Puede usar el efecto de mezcla con 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 

usted debe comprobar enlace de abajo para más efecto de ffmpeg: D

https://github.com/letungit90/ffmpeg_memo

+0

tks para la retroalimentación @LordNeckbeard he actualizado mi respuesta – Makio

Cuestiones relacionadas