2013-06-20 23 views
11

Devo processare un numero molto alto (200.000+) di mp4 brevi (meno di 10 secondi) in gif animate. Penso di aver provato ogni possibile linea di comando per farlo, ma ci vuole ancora troppo tempo per produrre gif di qualità. Attualmente utilizzo ffmpeg per decomprimere i frame immagine (jpg) e le immagini magick convertite per assemblarle. Produce gif di alta qualità, ma richiede troppo tempo e utilizza troppa memoria e CPU, anche con il tweaking con i limiti della memoria e della mappa.Il modo più veloce per creare gif animate da mp4

Ho anche provato a creare gif animate direttamente usando ffmpeg, ma la qualità è terribile al meglio. Inoltre, ho provato a usare gifsicle, che sembra veloce, ma prende solo gif come input e l'uso di ffmpeg per generarli produce gif di scarsa qualità.

Qualcuno ha alcune ricette da riga di comando per la creazione rapida di gif di alta qualità?

+0

Ho avuto un po 'di esposizione ad alcuni di questi strumenti.È possibile passare l'output via pipe ai vari stadi. Ciò può migliorare notevolmente i tempi di elaborazione (a volte!). Inoltre, negli studi sulla gestione dei progetti, imparerai che c'è quasi sempre un compromesso tra tempo, risorse e qualità. ; - /. In bocca al lupo. – shellter

+1

Vedere anche [ffmpeg converte i video .flv in .gif con una qualità pessima] (http://superuser.com/a/556031/110524). – LordNeckbeard

risposta

0

Potrebbe migliorare passando da immagini non compresse, come .ppm, per esempio con mplayer la riga di comando sarebbe:

mplayer -benchmark -noframedrop -nosound -vf format=rgb24 -vo pnm *.avi -osdlevel 0 

Questi salverà il ciclo jpg comprimere/decomprimere.

Aiuta anche a lavorare con un Solid State Drive.

17

Per prima cosa è necessario creare un set di immagini jpg con la massima qualità utilizzando le opzioni mplayer e jpeg su 100 (jpeg: quality = 100).

mplayer -ao null -ss 0:00:00 -endpos 10 mts.flv -vo jpeg:outdir=jpeg_dir:quality=100 

Successivamente, è necessario convertire JPG generati a gif utilizzando convert, basta digitare:

for i in ./jpeg_dir/*.jpg; do convert "$i" "${i%.jpg}.gif"; done 

E infine utilizzando gifsicle creare gif animate:

gifsicle --delay=10 --loop ./jpeg_dir/*.gif > anim.gif 

Inoltre, è possibile utilizzare indicatore del livello di ottimizzazione --optimize=03. Può essere utile per ridurre le dimensioni del file:

gifsicle --delay=10 --optimize=03 --loop *.gif > anim.gif 

Inoltre, è possibile manipolare con il numero di colori --colors num della tavolozza corrente e --color-method method per determinare tavolozza più appropriato.

Per quanto mi riguarda il metodo più appropriato è median-cut

median-cut is the median cut algorithm described by Heckbert 

Inoltre, cerco di manipolare con le bandiere descritte e ha trovato le opzioni più utili per ottenere migliore qualità di immagine gif generata:

gifsicle --delay=3 --optimize=03 --color-method median-cut --loop *.gif > anim.gif 

Essere precisi con --delay=NUM per corrispondere alla velocità di animazione. Questo parametro dipende dall'FPS del video originale.

+0

Come menzionato nel mio commento originale, ho provato quella via. Le singole gif di ffmpeg sono di qualità molto bassa. Questi portano a gif animate di bassa qualità alla fine. – stinkypyper

+0

Ho aggiornato la mia risposta aggiungendo un paio di passaggi aggiuntivi per ottenere un set di immagini con una qualità più alta di quella che può fornire ffmpeg: mplayer -ao null -ss 0:00:00 -endpos 10 video.flv -vo jpeg: outdir = jpeg_dir; e per i in * .jpg; converti "$ i" "$ {i% .jpg} .gif"; fatto –

0

Utilizzare il programma "animato" dal pacchetto imagemagick dopo aver diviso il video in immagini. Ti piace questo animato ./*.jpg. Quindi basta salvare aperto fuso nelle immagini del programma ImageMagick come gif. Ma potrebbe essere grande/Allora necessario per ottimizzare e ridimensionare (meglio farlo con mplayer prima scala = 240: 180).

Problemi correlati