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.
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.
Réponses:
ffmpeg
3.4.4 peut le faire directement sur Ubuntu 18.04
Vous voudrez probablement utiliser quelque chose comme:
sudo apt-get install ffmpeg
wget -O opengl-rotating-triangle.mp4 https://github.com/cirosantilli/media/blob/master/opengl-rotating-triangle.mp4?raw=true
ulimit -Sv 1000000
ffmpeg \
-i opengl-rotating-triangle.mp4 \
-r 15 \
-vf scale=512:-1 \
-ss 00:00:03 -to 00:00:06 \
opengl-rotating-triangle.gif
Procédure de génération de données de test décrite sur ce post .
Un plus direct:
sudo apt-get install ffmpeg
ffmpeg -i in.mp4 out.gif
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 pirater des 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 les 512
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’elle ffmpeg
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 # 1044894
Je 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édiaires
ffmpeg
ne pouvait pas gérer le format GIF auparavant. Le meilleur que j'avais était quelque chose de long:
sudo apt-get install ffmpeg imagemagick
ffmpeg -i input.mp4 -r 10 -f image2pipe -vcodec ppm - | \
convert -delay 5 -loop 0 - output.gif
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. Cela 100
signifie 1 FPS, 5
signifie 1 / 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:
convert input.mp4 rpi2-bare-metal-blink.gif
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.
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:
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
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
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.
frames
dossier doit exister pour que la première commande fonctionne.
-layers Optimize
à la dernière convert
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
et imagemagick
qui sont tous disponibles dans les prises en pension.
Une fois que vous avez npm
installé, vous pouvez installer gifify
globalement avec:
npm install -g gifify
Une vidéo peut être convertie en .GIF avec:
gifify video.mp4 -o video.gif
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:
gifify clip.mp4 -o clip.gif --from 01:48:23.200 --to 01:48:25.300 --text 'we are the knights who say nip!'
❗️ La conversion peut prendre plusieurs minutes, même avec des vidéos plus petites.
NOTE:
ffmpeg
etimagemagick
devra peut-être être compilé avec certaines bibliothèques spécifiques (ie libass et fontconfig en conséquence).
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!