Je veux faire une animation à .gif
partir d'une .mp4
vidéo. Je préférerais le faire à partir de la ligne de commande, veuillez donc ne lister que les outils en ligne de commande.
command-line
mp4
gif
Maythux
la source
la source
Réponses:
ffmpeg
3.4.4 peut le faire directement sur Ubuntu 18.04Vous voudrez probablement utiliser quelque chose comme:
Procédure de génération de données de test décrite sur ce post .
Un plus direct:
fonctionne également, mais le format de sortie GIF serait bien plus grand que la vidéo en entrée, car les formats vidéo se compressent intelligemment entre les images.
Rupture d'argument:
ulimit -Sv 1000000
: définissez une taille de mémoire maximale de 1 Go pour le programme.Généralement, je m'assure que la commande n'utilise pas de mémoire illimitée, contrairement à certaines tentatives précédentes.
500Mo empêche ffmpeg de charger les bibliothèques partagées ... il est temps de mettre à niveau votre RAM?
-ss 00:00:03 -to 00:00:06
: heure de début et de fin pour couper la vidéo.Non, les GIF ne sont pas le meilleur moyen de
piraterdes vidéos en ligne.Voir aussi: https://stackoverflow.com/questions/18444194/cutting-the-videos-based-on-start-and-end-time-using-ffmpeg
-vf scale=512:-1
: crée les512
pixels de sortie en hauteur et ajuste la largeur pour conserver le rapport hauteur / largeur.Il s'agit d'un cas d'utilisation courant pour les images Web, qui ont tendance à avoir une résolution beaucoup plus petite que la vidéo.
Si vous supprimez cette option, le fichier GIF de sortie a la même hauteur que la vidéo d'entrée.
La hauteur vidéo initiale peut être trouvée par exemple avec
ffprobe
: https://superuser.com/questions/595177/how-to-retrieve-video-file-information-from-command-line-under-linux/1035178#1035178 et est 1024 x 1024 dans notre cas.-r 15
: échantillonnage FPS.Par exemple, la vidéo originale faisait 30 images par seconde, ce
-r 15
qui signifie qu’elleffmpeg
choisira une image sur 2 (= 30 / 15
).Le FPS de sortie perçu est ajusté pour correspondre à l'entrée, de sorte que vous ne remarquerez pas d'accélération, mais seulement une plus grande granularité.
Le FPS d'entrée peut être trouvé avec
ffprobe
, et le nombre total de trames d'entrée peut être trouvémediainfo
comme expliqué à l' adresse suivante : https://superuser.com/questions/84631/how-do-i-get-the-number-of-frames -in-une-video-sur-la-ligne-de-linux-commande / 1044894 # 1044894Je recommande cette option car les formats vidéo ont généralement un framerate plus élevé en raison de la résolution plus grande. Avec des GIF plus petits, le framerate plus bas est moins visible, nous pouvons donc ignorer certaines images et créer des GIF plus petits.
Avant le 18.04:
ffmpeg
+convert
one-liner sans fichiers intermédiairesffmpeg
ne pouvait pas gérer le format GIF auparavant. Le meilleur que j'avais était quelque chose de long:Explication de certains des arguments:
-loop 0
: ajoutez le champ Nombre de boucles d’extension Netscape Gif à la sortie. 0 signifie boucle infinie, comme décrit à l' adresse suivante : http://www.vurdalakov.net/misc/gif/netscape-looping-application-extensioneog
,firefox
et chrome tout en boucle infiniment par défaut, même sans elle, aussi je ne suis pas sûr de la nécessité est plus.-delay 5
: le temps attendu avant d'afficher la trame suivante, en centièmes de seconde, comme décrit à l' adresse suivante : https://en.wikipedia.org/wiki/GIF#Animated_GIF octet 324. Cela100
signifie 1 FPS,5
signifie1 / 0.5 == 20FPS
.Même si vous réduisez la hauteur et le nombre d'images par seconde, il se peut que le fichier GIF en sortie soit plus volumineux que la vidéo, car les formats vidéo "réels" non GIF se compressent sur toutes les images, tandis que le format GIF ne compresse que des images individuelles.
Un direct:
travaillé, mais a presque tué mon ordinateur en raison d’un débordement de mémoire et a généré une sortie supérieure 100 fois plus grande pour mon fichier d’entrée 2s 1Mb. Peut-être qu'un jour ImageMagick va se rattraper.
Voir aussi: https://superuser.com/questions/556029/how-do-i-convert-a-video-to-gif-using-ffmpeg-with-reasonable-quality
Testé sur Ubuntu 17.10.
la source
scale=320:-1
-r 10
ramènera le GIF à une vitesse normale.Deux étapes:
Extraire des images de la vidéo
Créez un répertoire appelé frames dans le même répertoire avec votre
.mp4
fichier. Utilisez la commande:la source
Convertir les images en gif
Docs: options de conversion gif
Vous obtiendrez un fichier assez volumineux. Consultez le guide des images magiques pour optimiser les options de gif on que vous pouvez ajouter à la commande de la deuxième étape pour obtenir un fichier plus petit.
la source
frames
dossier doit exister pour que la première commande fonctionne.-layers Optimize
à la dernièreconvert
commande, avant*.jpg
. Vérifiez la sortie si, il pourrait être affecté. Pour moi, il a réduit la taille de gif de 5 Mo à 700 Ko sans perte perceptible de qualité :)ffmpeg -i video.mp4 -r 5 'frames/frame-%03d.png'
.gifify est un utilitaire tout-en-un basé sur les nœuds qui simplifie la conversion. Cela dépend
nodejs
,npm
,ffmpeg
etimagemagick
qui sont tous disponibles dans les prises en pension.Une fois que vous avez
npm
installé, vous pouvez installergifify
globalement avec:Une vidéo peut être convertie en .GIF avec:
Vous pouvez également éventuellement définir une position de début et de fin dans la vidéo et ajouter une légende de texte:
❗️ La conversion peut prendre plusieurs minutes, même avec des vidéos plus petites.
la source
gifsicle
, mais un autre problème se produit: github.com/vvo/gifify/issues/95 De plus, cela vous dérangerait-il de nous dire à npm novices dans quel répertoire doit être exécuténpm install
et s'il faut l'exécuter en tant que root ou pas? Merci!