Comment créer un fichier GIF animé à partir d'une vidéo MP4 via la ligne de commande?

73

Je veux créer un .gif animé à partir d'une vidéo .mp4 . Je préférerais le faire à partir de la ligne de commande, alors s'il vous plaît ne lister que les outils de ligne de commande.

    
posée Maythux 15.07.2015 - 10:01
la source

3 réponses

88

Deux étapes:

  • Extraire des images de la vidéo

    Créez un répertoire appelé frames dans le même répertoire avec votre fichier .mp4 . Utilisez la commande:

    ffmpeg -i video.mp4  -r 5 'frames/frame-%03d.jpg'
    


    -r 5 stands for FPS value
        for better quality choose bigger number
        adjust the value with the -delay in 2nd step
        to keep the same animation speed
    
    %03d gives sequential filename number in decimal form
    

    source

  • Convertir les images en gif

    cd frames
    convert -delay 20 -loop 0 *.jpg myimage.gif
    


    -delay 20 means the time between each frame is 0.2 seconds
       which match 5 fps above.
       When choosing this value
           1 = 100 fps
           2 = 50 fps
           4 = 25 fps
           5 = 20 fps
           10 = 10 fps
           20 = 5 fps
           25 = 4 fps
           50 = 2 fps
           100 = 1 fps
           in general 100/delay = fps
    
    -loop 0 means repeat forever
    

    Docs: Convertir les options gif

Vous allez vous retrouver avec un fichier assez volumineux, jetez un coup d’œil au guide d’image magick pour optimiser gif sur options que vous pouvez ajouter à la deuxième commande pour obtenir un fichier plus petit.

    
réponse donnée Maythux 15.07.2015 - 10:01
la source
64

ffmpeg + convert one-liner sans fichiers intermédiaires

sudo apt-get install ffmpeg imagemagick
ffmpeg -i input.mp4 -r 10 -f image2pipe -vcodec ppm - | \
  convert -delay 5 -loop 0 - output.gif

produit la sortie rapidement et avec une taille raisonnable par rapport à celle du fichier d'entrée.

Source: lien

Explication de certains arguments:

  • -r 10 : échantillonnage des FPS. Par exemple, si la vidéo d'origine contenait 30 images par seconde, -r 10 signifie que ffmpeg choisira une image sur trois. Le nombre d'images par seconde peut être trouvé avec ffprobe et le nombre total de trames d'entrée peut être trouvé avec mediainfo comme expliqué à: lien Une valeur relativement faible comme 10 signifie moins de trames de sortie, et donc des GIF plus petits. TODO certains

  • -loop 0 : ajoute le champ Nombre de boucles de l'extension Netscape Gif à la sortie. 0 signifie boucle infinie comme décrit à: lien eog , firefox et chrome tous bouclent infiniment par défaut même sans elle, donc je ne suis plus sûr de la nécessité.

  • -delay 5 : le temps d'attente avant l'affichage de l'image suivante, en centièmes de seconde, comme décrit à: lien octet 324. Ainsi, 100 signifie 1 FPS, 5 signifie 1 / 0.5 == 20FPS .

Autres arguments facultatifs que vous souhaiterez probablement:

  • ffmpeg -vf scale=320:-1 : rend la sortie 320 pixels en hauteur. Ceci est un cas d'utilisation courant pour les GIF pour le Web. Si vous supprimez cette option, le fichier GIF de sortie a la même hauteur que la vidéo d'entrée. La hauteur d'origine peut être trouvée par exemple avec ffprobe : lien et la sortie avec identify .

  • ffmpeg -ss 00:02:26 -to 00:02:36 : convertit la vidéo de 02 minutes 26 secondes à 02 minutes 36 secondes. Voir aussi: lien

Même si vous réduisez la hauteur et le framerate, le GIF de sortie peut encore être plus grand que la vidéo, puisque les "vrais" formats vidéo non-GIF compressent les images, tandis que GIF ne compresse que les images individuelles.

Un direct:

convert input.mp4 rpi2-bare-metal-blink.gif

a fonctionné, mais a presque tué mon ordinateur en raison d'un débordement de mémoire, et a produit une sortie 100 fois plus grande pour mon fichier d'entrée 2s 1Mb. Peut-être qu'un jour, ImageMagick va rattraper son retard.

Testé sur Ubuntu 17.10.

    
la source
8

gifify est un utilitaire tout-en-un qui simplifie la conversion. Cela dépend de nodejs , npm , ffmpeg et imagemagick qui sont tous disponibles dans les repos.

Une fois npm installé, vous pouvez installer gifify globalement avec:

    npm install -g gifify

Une vidéo peut être convertie en une .GIF avec:

    gifify video.mp4 -o video.gif

Vous pouvez également définir éventuellement une position de début et de fin dans la vidéo et ajouter une légende de texte:

    gifify clip.mp4 -o clip.gif --from 01:48:23.200 --to 01:48:25.300 --text 'we are the knights who say nip!'

conversion La conversion peut prendre plusieurs minutes, même avec des vidéos plus petites.

  

REMARQUE: ffmpeg et imagemagick devront peut-être être compilés avec des bibliothèques spécifiques (libass et fontconfig en conséquence).

    
réponse donnée ccpizza 03.09.2017 - 21:44
la source

Lire d'autres questions sur les étiquettes