2010-07-09 25 views
24

C'è un modo per convertire una gif animata in un formato video (ad esempio .avi) su Linux?Gif animato per avi su linux

Ho già provato

ffmpeg -i thegif.gif thevideo.avi 

ma tutto quello che ottiene è la prima immagine del video.

+0

ffmpeg -i foo.gif foo.mkv lavora con ffmpeg corrente, e funziona anche scorretto con gif animate framerate variabile . Con l'output mkv, ottieni un frame rate variabile mkv. Con l'output di mp4, fa salire il fps più in alto del necessario, e quindi duplica i fotogrammi in base alle esigenze per far visualizzare le cose quando appropriato. per esempio. una gif con circa 25 fps e circa 10 fps ha realizzato un mp4 a 50 fps, con 2x dups e 5x dup frame a seconda della parte. La memorizzazione di frame duplicati non richiede molto spazio, IDK se sono anche nel flusso h.264 o solo nel contenitore mp4. –

risposta

12

posso suggerire combinazione di ImageMagick e ffmpeg

fare questo per estrarre ogni fotogramma come png/jpeg

$magick> convert 'images.gif[0]' image.png 

fare questo per convertire le immagini in sequenza di film

ffmpeg -f image2 -i image%d.jpg video.mpg 

Altro aiuto sui comandi

http://www.imagemagick.org/script/command-line-processing.php

http://www.catswhocode.com/blog/19-ffmpeg-commands-for-all-needs

http://electron.mit.edu/~gsteele/ffmpeg/

+7

Se la tua gif ha transperance devi aggiungere -coalesce in questo modo: convert -coalesce download.gif% 05d.png –

+0

-1, perché il tuo primo comando non funziona. Ma il comando di NordicMainframe funziona. – erik

+1

Questo perde le informazioni sul frame rate dalla gif di input. ffmpeg attuale ora gestisce direttamente l'input gif animato. –

43

ingresso gif di ffmpeg non funziona troppo bene. Di solito è più facile per decomprimere i frame gif con convert (da ImageMagick) ed elaborare questi con ffmpeg:

convert some.gif some%05d.png 
ffmpeg -i some%05d.png some.avi 
rm some*.png 
+0

Grazie, stavo cercando la tua prima riga di comando: 'convert some.gif% 05d.png' – Dorian

+3

Se alcuni frame sono rotti perché mostrano solo differenze con il frame di base, usa l'opzione' -coalesce' per 'convert'. – Hnatt

+0

quando si usa '-coalesce' potrebbe essere necessario cancellare il primo frame perché non ha lo stesso formato di altri (' PseudoClass' invece di 'DirectClass'). Potrebbe esistere un metodo per convertirlo ... – xiawi

9

Se ti piace avere un certo framerate come input perché il video risultante è quello di digiunare o per rallentare

ffmpeg -r 'xx' -i some%05d.png some.avi 

dove xx è il framerate dell'input.

0

Se ti piace avere un ciclo come uscita

ffmpeg -loop 1 -t x -i some%05d.png some.avi 

dove x è il tempo del video deve essere eseguito in pochi secondi.

Source

0

Se non volete i file temporanei, si può provare mencoder:

mencoder myfile.gif -mf fps=25 -o myfile.avi -ovc lavc -lavcopts vcodec=mpeg4