Si vous préférez éviter les fichiers images intermédiaires, les commandes fournies par LordNeckBeard peuvent être passées entre ffmpeg
et de ImageMagick convert
de sorte qu'aucun fichier intermédiaire n'est nécessaire :
ffmpeg -i input.flv -vf scale=320:-1 -r 10 -f image2pipe -vcodec ppm - | convert -delay 10 -loop 0 - output.gif
El -f image2pipe
indique à ffmpeg de diviser la vidéo en images et de la rendre apte à être diffusée, et -vcodec ppm
spécifie le format de sortie à utiliser pour les ppm (pour une raison quelconque, si le format est png, soit convert
ne lit pas toutes les images du pipe, ou ffmpeg ne les sort pas toutes). Le site -
pour les deux commandes spécifie qu'un tube sera utilisé pour la sortie et l'entrée respectivement.
Pour optimiser le résultat sans sauvegarder un fichier, vous pouvez faire passer la sortie de convert
à un deuxième convert
comando:
ffmpeg -i input.flv -vf scale=320:-1 -r 10 -f image2pipe -vcodec ppm - | convert -delay 10 -loop 0 - gif:- | convert -layers Optimize - output.gif
El gif:-
dit à convert
pour acheminer sa sortie sous forme de données au format gif et -layers Optimize
indique au second convert
d'effectuer optimize-frame
y optimize-transparancy
(voir les méthodes d'ImageMagick Introduction à l'optimisation de l'animation ). Notez que la sortie de la fonction -layers Optimize
ne permet pas toujours d'obtenir une taille de fichier plus petite. Vous pouvez donc essayer de convertir en gif sans optimisation pour être sûr.
N'oubliez pas que, pendant tout ce processus, tout se passe en mémoire. Vous aurez donc besoin de suffisamment de mémoire si les images sont assez grandes.
5 votes
Excellent billet des ingénieurs de giphy engineering.giphy.com/how-to-make-gifs-with-ffmpeg