2012-02-13 3 views
11

Diciamo che ho 10 immagini e voglio combinare quelle immagini in un video come una presentazione.Come creare video da immagini con php?

Ad esempio, desidero mostrare ciascuna immagine per 5 secondi e quindi continuare con l'immagine successiva per altri 5 secondi.

Se possibile, sarà perfetto includere musica e anche testo descrittivo.

C'è un codice di esempio per questo potrebbe essere con la libreria ffmpeg?

risposta

9

Il mio primo pensiero è stato quello di passare al comando ffmpeg con qualcosa di simile.

Creazione di un video dalle immagini

ffmpeg può essere utilizzato per cucire diverse immagini in un video. Ci sono molte opzioni, ma il seguente esempio dovrebbe essere sufficiente per iniziare . Prende tutte le immagini con nomi di file di XXXXX.morph.jpg, dove X è numerico e crea un video chiamato "output.mp4". L'opzione qscale specifica la qualità dell'immagine (1 è il più alto e 32 è il più basso) e l'opzione "-r" è utilizzata per specificare il numero di fotogrammi al secondo.

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

(Il sito che questa fascetta pubblicitaria è stato preso da se ne è andato. Link è stata rimossa.)

Dove 25 significa 25 immagini al secondo. È possibile impostarlo su 1 per un leggero ritardo (1 secondo) o utilizzare decimali, IE: 0,5 per un ritardo di 2 secondi.

È quindi possibile combinare uno streaming video e audio con qualcosa di simile.

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

Ovviamente scegliere i codec appropriati. Se vuoi un mp4 usa libx264 per video e aac (costruito in ffmpeg e non più "sperimentale") per l'audio.

Basta ricordare che se si sceglie di utilizzare un metodo come questo, l'output ffmpeg va, di default, a stderr per quando si tenta di leggerlo. Può essere reindirizzato allo stdout se preferisci.

+0

ok, quindi possiamo scegliere frame al secondo, ma è questo significa che possiamo determinare la durata del video aumentando i fps? per esempio se 25 fps è 1 secondo. Sta usando 'ffmpeg -r 250' significa 10 secondi per ogni immagine? – motto

+0

No, utilizzerà 25 immagini al secondo. 25 era solo un esempio di copia/incolla. Prova a impostarlo su 1 o anche su 0,5 per una pausa di 2 secondi. Ho aggiunto queste informazioni anche al post. – Timeout

+0

L'URL non funziona più. –

5

La prima cosa che mi è venuta in mente è stata imagemagick. L'ho usato con PHP per un sacco di manipolazione delle immagini e so che supporta la lettura di una discreta quantità di formati video e secondo quel link supporta anche la scrittura in alcuni.

+2

imagick richiede ffmpeg quindi in pratica non vi è alcun vantaggio nell'usarlo per la manipolazione video con php ... – Michal

4

sì, ffmpeg è la soluzione giusta per te. Ho appena realizzato qualcosa di simile - un sito di video con miniature animate. Ho usato ffmpeg per mettere insieme le immagini in una gif aminated. tuttavia, l'output può essere qualsiasi cosa tu abbia bisogno ... sfortunatamente, nelle mie ricerche su questo argomento non ho trovato alcun codice di esempio che combinasse tutti i punti che stai cercando, quindi suppongo che dovrai provare manualmente con ffmpeg .. Nel mio progetto ho usato php video toolkit http://sourceforge.net/projects/phpvideotoolkit/ in alcune parti per renderlo un po 'più facile ...

2

È possibile utilizzare l'effetto si fondono 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 

si dovrebbe verificare collegamento muggito per più effetto di ffmpeg: D

https://github.com/letungit90/ffmpeg_memo

+0

tks per feedback @LordNeckbeard ho aggiornato la mia risposta – Makio