157 votes

Comment faire pour que ffmpeg convertisse un .mov en .gif ?

J'essaie de convertir un .mov en .gif et je n'y arrive pas.

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. Des idées sur la façon de corriger le problème ?

226voto

PleaseStand Points 4709

L'ordre des arguments de la 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 fréquence d'images et la taille lors de la conversion, ainsi que spécifier une heure de début et une durée. Vous ne souhaitez probablement pas convertir l'intégralité du fichier dans sa résolution et sa fréquence d'images 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 pouvez utiliser ImageMagick L'optimiseur GIF de l'UE permet de réduire la taille des fichiers :

convert -layers Optimize output.gif output_optimized.gif

25voto

Jeff Walker Points 943

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 gifsicle pour effectuer l'optimisation finale :

gifsicle -O2 input_optframe.gif -o optimized.gif

J'ai obtenu un GIF de 6.8mb à partir d'une vidéo de 12.2mb avec presque la même qualité !

17voto

RyanHirsch Points 181
ffmpeg -i <input source> -filter_complex "[0:v] fps=12,scale=<width>:-1,split [a][b];[a] palettegen [p];[b][p] paletteuse" <output file>

Dans cette commande, il y a 3 jetons que vous devez brancher. Le <input source> sera quelque chose comme your-recording.mov El <width> doit être la largeur que vous souhaitez donner au gif final, et <output file> sera quelque chose comme recording.gif .

Cette commande se décompose comme suit :

  • filter_complex nous allons enchaîner quelques filtres ensemble
  • [0:v] fps=12 prendre le premier flux vidéo dans le conteneur à 12 images par seconde
  • scale=1024:-1 redimensionner à la largeur de 1024 et garder le rapport d'aspect pour la hauteur
  • split [a][b] prendre le flux actuel et le diviser en deux (en fait, le cloner)
  • ; nouveau filtre entrant
  • [a] palettegen [p] prenez le flux "a" et générez une palette de couleurs appelée "p".
  • ; nouveau filtre entrant
  • [b][p] paletteuse prenez le flux "b" et appliquez la palette de couleurs "p".

La palette de couleurs n'est pas toujours nécessaire pour les enregistrements d'écran, mais elle l'est certainement pour obtenir de meilleures couleurs pour les vidéos enregistrées.

Vous pouvez également brancher -ss 00:00:00.000 y -t 00:00:00.000 si nécessaire, si vous avez l'intention de l'écrêter également.

11voto

Andalur Points 2411

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

Je recommande à toute personne désireuse de transformer des vidéos en GIF de l'utiliser au lieu d'essayer de passer beaucoup de temps à parcourir 3 sites de documentation pour comprendre comment redimensionner le GIF ou modifier l'heure de début/fin.

7voto

Shuman Points 221
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 pipe puis utiliser imagemagick pour le compresser en gif enfin, l'optimiser avec gifsicle.

Je ne sais pas pourquoi l'utilisation directe de gifscicle ne fonctionne pas.

ou vous pouvez rendre le gif plus petit en faisant ceci

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X