Come posso ottenere ffmpeg per convertire un .mov in un .gif?


99

Sto cercando di convertire un .mov in un .gif e non sto avendo successo.

Ecco l'errore:

ffmpeg -pix_fmt rgb24 -i yesbuddy.mov output.gif
ffmpeg version 0.11.1 Copyright (c) 2000-2012 the FFmpeg developers
  built on Jun 12 2012 17:47:34 with clang 2.1 (tags/Apple/clang-163.7.1)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/0.11.1 --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-libfreetype --cc=/usr/bin/clang --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-librtmp --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libxvid --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libass --enable-libvo-aacenc --disable-ffplay
  libavutil      51. 54.100 / 51. 54.100
  libavcodec     54. 23.100 / 54. 23.100
  libavformat    54.  6.100 / 54.  6.100
  libavdevice    54.  0.100 / 54.  0.100
  libavfilter     2. 77.100 /  2. 77.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
Option pixel_format not found.

Se lascio fuori la parte -pix_fmt rgb24 si lamenta. Pensi su come risolvere?


3
Cordiali saluti, C'è una soluzione eccellente per conversioni di alta qualità fornite qui .
ryanjdillon,

Risposte:


161

L'ordine degli argomenti della riga di comando è importante. Questa riga di comando dovrebbe funzionare ma genererà un file gigante:

ffmpeg -i yesbuddy.mov -pix_fmt rgb24 output.gif

Si noti che probabilmente si desidera ridurre la frequenza dei fotogrammi e le dimensioni durante la conversione, nonché specificare un'ora e la durata di inizio. Probabilmente non vuoi convertire l'intero file alla sua risoluzione e frequenza di fotogrammi originali.

ffmpeg -ss 00:00:00.000 -i yesbuddy.mov -pix_fmt rgb24 -r 10 -s 320x240 -t 00:00:10.000 output.gif

La dimensione del file sarà comunque enorme. Potresti essere in grado di utilizzare l' ottimizzatore GIF di ImageMagick per ridurre le dimensioni:

convert -layers Optimize output.gif output_optimized.gif

3
Risposta eccezionale, grazie :) GIF è un formato folle ... l'originale .mov era di 250k, il convertito .gif da ffmpeg era di 8mb e la convertversione ottimizzata era un sorprendente 10k! Degno di nota!
TooTallNate

19
ffmpeg si lamenta del formato dei pixel e passa da rgb24 a pal8; il comando nella risposta deve essere aggiornato?
user1071136

7
Formato incompatibile pixel 'RGB24' per 'gif' codec
highmaintenance

1
@Andy riparato automaticamente su rgb8 nella mia versione di ffmpeg.
James Campbell,

come fare in Android?
Ajay Shrestha,

12

Dopo la conversione:

ffmpeg -i input.mp4 input.gif 

Prova a ottimizzare i frame:

convert input.gif -verbose -coalesce -layers OptimizeFrame input_optframe.gif

E utilizzare gifsicleper effettuare l'ottimizzazione finale:

gifsicle -O2 input_optframe.gif -o optimized.gif

Ottenuto GIF da 6,8 MB da video da 12,2 MB con quasi la stessa qualità!


3
Ti dispiace spiegare come funzionano questi passaggi e cosa stanno facendo?
Raystafarian,

10

Ho creato uno strumento che raggruppa FFmpeg, ImageMagick e giflossy in un unico programma da riga di comando facile da usare che puoi installare in una riga: https://github.com/vvo/gifify

Consiglio a chiunque voglia girare video => GIF per usarlo invece di provare a passare molto tempo a navigare in 3 siti Web di documentazione per capire come ridimensionare il GIF o modificare l'ora di inizio / fine.


1
E se hai Docker in esecuzione sulla tua macchina, fai un alias in questo modo: alias gifify='docker run -it --rm -v $(pwd):/data maxogden/gifify'poi gifify screencast.mkv -o screencast.gif --resize 800:-1
usalo

2
ffmpeg -y -i input.mp4 -f image2pipe -vcodec ppm - | convert -delay 2 -loop 0 -layers Optimize - gif:- | gifsicle -d 3 -O3 -o optimized.gif

prima usa ffmpeg per convertire il file mp4 in immagini tramite pipe, poi usa imagemagick per comprimerlo in gif alla fine l'ottimizza con gifsicle

Non so perché usare direttamente gifscicle non funzionerà.

oppure puoi ridurre le gif in questo modo

convert -dither none -matte -depth 8 -deconstruct -layers optimizePlus -colors 32 in.gif out.gif
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.