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

Sto cercando di convertire un .mov in un .gif e non ho 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 la parte -pix_fmt rgb24 si lamenta. Pensieri su come risolvere?

L'ordine degli argomenti della row di command è importnte. Questa linea di command dovrebbe funzionare ma genererà un file gigante:

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

Si noti che probabilmente si desidera ridurre il frame rate e la dimensione quando si converte, nonché specificare un'ora di inizio e una durata. Probabilmente non si desidera convertire l'integer file alla sua risoluzione originale e alla velocità di frame.

 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à ancora enorme. Potrebbe essere ansible utilizzare l'ottimizzatore GIF di ImageMagick per ridurre le size:

 convert -layers Optimize output.gif output_optimized.gif 

Dopo la conversione:

 ffmpeg -i input.mp4 input.gif 

Prova a ottimizzare i fotogrammi:

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

E usa gifsicle per fare l'ottimizzazione finale:

 gifsicle -O2 input_optframe.gif -o optimized.gif 

Ha ottenuto il GIF da 6,8MB da video di 12,2 MB con quasi la stessa qualità!

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

Raccommand a chiunque voglia girare video => GIF per utilizzarlo invece di cercare di spendere molto tempo navigando su 3 siti web della documentazione per capire come ridimensionare il GIF o cambiare l'ora di inizio / fine.

 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 utilizzare ffmpeg per convertire file mp4 in immagini via pipe quindi utilizzare imagemagick per comprimerlo a gif finalmente ottimizzato con gifsicle

Non so perché usare direttamente gifscicle non funziona.

o puoi fare il gif più piccolo da questo

 convert -dither none -matte -depth 8 -deconstruct -layers optimizePlus -colors 32 in.gif out.gif