Comment puis-je obtenir ffmpeg pour convertir un .mov en un .gif?

98

J'essaye de convertir un .mov en un .gif et je n'ai pas de succès.

Voici l'erreur:

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.

Si je laisse de côté la partie -pix_fmt rgb24, il se plaint. Pensées sur la façon de réparer?

Daniel Fischer
la source
3
FYI, Il existe une excellente solution pour les conversions de haute qualité donnée ici .
ryanjdillon

Réponses:

161

L'ordre des arguments en ligne de commande est important. Cette ligne de commande devrait fonctionner mais générera un fichier géant:

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

Notez que vous souhaitez probablement réduire la cadence et la taille des images lors de la conversion, ainsi que spécifier une heure de début et une durée. Vous ne souhaiterez probablement pas convertir le fichier entier à sa résolution et à sa cadence d'origine.

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

La taille du fichier sera toujours énorme. Vous pourrez peut-être utiliser l' optimiseur GIF d' ImageMagick pour réduire la taille:

convert -layers Optimize output.gif output_optimized.gif
Veuillez vous lever
la source
3
Réponse géniale, merci :) Le format GIF est dingue ... le format .mov original était de 250 Ko, le convertfichier .gif converti de ffmpeg de 8 Mo et la version optimisée de 10k! Impressionnant!
TooTallNate
19
ffmpeg se plaint du format de pixel et passe de rgb24 à pal8; la commande dans la réponse doit-elle être mise à jour?
user1071136
7
Format de pixel incompatible 'rgb24' pour le codec 'gif'
maintenance élevée le
1
@Andy corrigé automatiquement à rgb8 dans ma version de ffmpeg.
James Campbell
comment faire dans Android?
Ajay Shrestha
12

Après la conversion:

ffmpeg -i input.mp4 input.gif 

Essayez d'optimiser les cadres:

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

Et utiliser gifsiclepour faire l'optimisation finale:

gifsicle -O2 input_optframe.gif -o optimized.gif

Vous avez 6,8 Mo GIF de 12,2 Mo vidéo avec presque la même qualité!

Aleksey Kozhevnikov
la source
3
Vous voulez expliquer comment ces étapes fonctionnent et ce qu’elles font?
Raystafarian
10

J'ai créé un outil qui regroupe FFmpeg, ImageMagick et giflossy dans un programme de ligne de commande simple à utiliser que vous pouvez installer sur une seule ligne: https://github.com/vvo/gifify

Je recommande à tous ceux qui souhaitent transformer des vidéos => GIF de l’utiliser au lieu de passer beaucoup de temps à parcourir 3 sites Web de documentation pour comprendre comment redimensionner le GIF ou modifier l’heure de début / de fin.

vvo
la source
1
Et si vous avez Docker en marche sur votre machine, faites un pseudonyme comme celui-ci: alias gifify='docker run -it --rm -v $(pwd):/data maxogden/gifify'utilisez-legifify screencast.mkv -o screencast.gif --resize 800:-1
sabbour
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

utilisez d'abord ffmpeg pour convertir le fichier mp4 en images via un tuyau, puis utilisez imagemagick pour le compresser en gif, optimisé pour la dernière fois avec gifsicle

Je ne sais pas pourquoi utiliser directement gifscicle ne fonctionnera pas.

ou vous pouvez faire le gif plus petit par cette

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