Je suis en train de convertir un FLV
film en GIF
fichier avec ffmpeg.
ffmpeg -i input.flv -ss 00:00:00.000 -pix_fmt rgb24 -r 10 -s 320x240 -t 00:00:10.000 output.gif
Cela fonctionne très bien, mais le fichier gif en sortie a une qualité très basse.
Des idées comment puis-je améliorer la qualité de gif converti?
Sortie de commande:
ffmpeg -i input.flv -ss 00:00:00.000 -pix_fmt rgb24 -r 10 -s 320x240 -t 00:00:10.000 output.gif
ffmpeg version 0.8.5-6:0.8.5-0ubuntu0.12.10.1, Copyright (c) 2000-2012 the Libav developers
built on Jan 24 2013 14:52:53 with gcc 4.7.2
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.flv':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
creation_time : 2013-02-14 04:00:07
Duration: 00:00:18.85, start: 0.000000, bitrate: 3098 kb/s
Stream #0.0(und): Video: h264 (High), yuv420p, 1280x720, 2905 kb/s, 25 fps, 25 tbr, 50 tbn, 50 tbc
Metadata:
creation_time : 1970-01-01 00:00:00
Stream #0.1(und): Audio: aac, 44100 Hz, stereo, s16, 192 kb/s
Metadata:
creation_time : 2013-02-14 04:00:07
[buffer @ 0x92a8ea0] w:1280 h:720 pixfmt:yuv420p
[scale @ 0x9215100] w:1280 h:720 fmt:yuv420p -> w:320 h:240 fmt:rgb24 flags:0x4
Output #0, gif, to 'output.gif':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
creation_time : 2013-02-14 04:00:07
encoder : Lavf53.21.1
Stream #0.0(und): Video: rawvideo, rgb24, 320x240, q=2-31, 200 kb/s, 90k tbn, 10 tbc
Metadata:
creation_time : 1970-01-01 00:00:00
Stream mapping:
Stream #0.0 -> #0.0
Press ctrl-c to stop encoding
frame= 101 fps= 32 q=0.0 Lsize= 8686kB time=10.10 bitrate=7045.0kbits/s dup=0 drop=149
video:22725kB audio:0kB global headers:0kB muxing overhead -61.778676%
Merci.
Réponses:
ffmpeg
exemple183k
ffmpeg
peut produire du GIF de haute qualité. Il est toujours recommandé d'utiliser une version récente: télécharger ou compiler .-ss 30
) de l'entrée et créera une sortie de 3 secondes (-t 3
).-loop
option de sortie. Une valeur de0
est une boucle infinie.Voir GIF haute qualité avec FFmpeg pour de nombreux autres exemples et options.
convert
Exemple Imagemagick227k
Une autre méthode de ligne de commande consiste à diriger de ImageMagick
ffmpeg
versconvert
(oumagick
).Réglage de la cadence
Définissez la fréquence d'images avec une combinaison du
fps
filtre dansffmpeg
et-delay
dansconvert
. Cela peut devenir compliqué, carconvert
un flux d'images brut est généré, de sorte qu'aucun fps n'est préservé. Deuxièmement, la-delay
valeur enconvert
est en ticks (il y a 100 ticks par seconde), pas en images par seconde. Par exemple, avecfps=12.5
= 100 / 12,5 = 8 =-delay 8
.convert
arrondit la-delay
valeur à un nombre entier, ce qui signifie que les résultats 8,4 et 8 correspondent à 9, ce qui signifie que seules certaines fréquences d'images sont prises en charge lors de la définition d'un délai uniforme pour toutes les images (un délai spécifique peut être défini par image mais il est supérieur cette réponse).-delay
semble être ignoré si elle est utilisée comme option de sortie, elle doit donc être utilisée auparavant,-
comme indiqué dans l'exemple.Enfin, les navigateurs et les visualiseurs d'images peuvent implémenter un délai minimum, de sorte que vous
-delay
pouvez être ignoré quand même.Vidéo fournie par le centre national de formation à la conservation du US Fish & Wildlife Service.
la source
-vf scale=320:-1,format=rgb8,format=rgb24
convert
commande de conversion des images PNG que j'ai finalement utiliséesconvert -delay 5 -loop 0 -dither None -colors 80 "frames/ffout*.png" -fuzz "40%" -layers OptimizeFrame "output.gif"
, ce qui réduit un peu la taille globale du fichierscale=0:-1
, donc quand vous réglez l'échelle sur0
, cela prendra l'échelle de la vidéo.Si vous préférez éviter les fichiers image intermédiaires, les commandes fournies par LordNeckBeard peuvent être acheminées entre
ffmpeg
et celles d'ImageMagickconvert
afin qu'aucun fichier intermédiaire ne soit requis:Le
-f image2pipe
dit ffmpeg pour diviser la vidéo en images et le rendre apte à être canalisé sur et-vcodec ppm
spécifie le format de sortie pour être ppm (pour une raison quelconque si le format est .png, soitconvert
ne lit pas toutes les images du tuyau ou ffmpeg - t ne pas les afficher tous). Le-
pour les deux commandes spécifie qu'un tuyau sera utilisé pour la sortie et l'entrée, respectivement.Pour optimiser le résultat sans enregistrer de fichier, vous pouvez diriger la sortie de
convert
vers une secondeconvert
commande:Le
gif:-
ditconvert
de diriger sa sortie sous forme de données au format gif et-layers Optimize
indique à la secondeconvert
à effectueroptimize-frame
etoptimize-transparancy
méthodes (voir Introduction à l'optimisation d'animation ImageMagick ). Notez que la sortie du-layers Optimize
fichier peut ne pas toujours fournir une taille de fichier plus petite, vous pouvez donc essayer de convertir en un gif sans optimisation au préalable pour en être sûr.N'oubliez pas que pendant tout ce processus, tout est en mémoire, vous aurez donc besoin de suffisamment de mémoire si les images sont assez volumineuses.
la source
avconv
convert -delay 5 -loop 0 -layers Optimize - output.gif
split
filtre de ffmpeg. Pas besoin deffmpeg -ss 30 -t 3 -i "input.flv fps=10,scale=320:-1:flags=lanczos,split[x][z];[z]palettegen[y];[x][y]paletteuse" output.gif
A partir de ffmpeg 2.6, nous pouvons faire encore mieux:
HT
la source
J'ai créé ma propre version du script, qui paramètre également la résolution de sortie et la fréquence d'images.
Courir
./gifenc.sh input.mov output.gif 720 10
générera une sortie GIF 720p large 10fps du film que vous lui avez donné. Vous devrez peut-être fairechmod +x gifenc.sh
pour le fichier.Vous pouvez lire les détails sur mon Github
Hypothèses: ffmpeg est installé et le script se trouve dans le même dossier que les autres fichiers.
la source
La réponse de @ Stephane est très bonne. Mais il y aura un avertissement comme
Buffer queue overflow, dropping.
pour certaines vidéos, et l'image généréegif
a été supprimée.Voici une meilleure version avec
fifo
filtre à éviterBuffer queue overflow
lors de l'utilisation dupaletteuse
filtre. En utilisant lesplit
filtre pour éviter la création d'un fichier PNG de palette intermédiaire.la source
fifo
opération de filtrage entreo2
eto3
? Pour éviter l'Buffer queue overflow
avertissement.fait un script, testé et fonctionne.
usage:
AVOIR PHUN :)
vim avi2gif.sh
btw: vokoscreen est un excellent outil ScreenCapturing pour Linux :)
MERCI BEAUCOUP Michael Kohaupt :) Rock stable.
Quelques statistiques de taille de fichier:
5,3 M = vokoscreen-2015-04-28_15-43-17.avi -> vokoscreen-2015-05-28_12-41-56.avi.gif = 1013K
voir les résultats ici.
la source
La méthode
ffmpeg
with palette peut être exécutée en une seule commande, sans fichier intermédiaire ..png
Cela peut être fait grâce au
split
filtre.la source
Linux / Unix / macOS
Après l’ approche de @LordNeckbeard avec
ffmpeg
commande, veuillez trouver la fonction Bash utile suivante qui peut être ajoutée à votre~/.bash_profile
fichier:Une fois la fonction chargée (manuellement ou depuis
. ~/.bash_profile
), vous devriez avoir une nouvellevideo2gif
commande.Exemple d'utilisation:
ou:
Échelle jusqu'à 320 largeur avec 10 images par seconde.
Vous pouvez également spécifier un format vidéo différent (tel que mp4).
macOS
Vous pouvez essayer l' application GIF Brewery qui permet de créer des fichiers GIF à partir de fichiers vidéo.
Alternativement, plusieurs sites Web effectuent une conversion en ligne gratuitement.
la source
La réponse sélectionnée suppose que vous souhaitez redimensionner la vidéo source et modifier ses images par seconde dans le gif généré. Si vous n'avez pas besoin de le faire, les opérations suivantes fonctionnent:
Cela m'a été utile lorsque je voulais un gif reproduisant fidèlement la vidéo source que j'utilisais.
la source
Pour les utilisateurs de Windows:
créez un
video2gif.bat
fichier dans le répertoire Windows avec le contenu suivant:Et puis n'importe où vous pouvez l'utiliser comme ceci:
Ensuite, vous avez
myvideo.gif
dans le répertoire en cours.S'il
myvideo.gif
y en a eu, demandez à vous de l'écrire.MODIFIER:
Je suggère d'utiliser ce script batch: https://github.com/NabiKAZ/video2gif
la source
fps=10
etscale=-1:-1
). La réponse de Sun nous a déjà donné un fichier batch, et celui-ci (comme les scripts shell dans la réponse de pje et la réponse de l'évangéliste ) a l'avantage d'affecter la liste des filtres à une variable ( une fois ),… - (suite)fps=10,scale=-1:-1
)? (Voir la réponse de notable pour un exemple d'explication de parties d'une commande.)Vous trouverez ci-dessous le fichier de commandes pour les utilisateurs Windows:
gifenc.bat:
Source: GIF haute qualité avec FFmpeg: Extraire un échantillon
Si vous voulez seulement utiliser une variable d'entrée et que le nom de sortie ait uniquement l'extension GIF (prononcé JIF), utilisez plutôt ceci:
la source
Comment ajouter une entrée de menu contextuel Windows 7/10 "clic droit" pour convertir votre fichier vidéo en gif
Certaines des autres réponses ont mentionné le script video2gif , que j'ai utilisé. Mais, vous pouvez utiliser n'importe quel script.
Pour créer l'option de menu contextuel, vous devez modifier votre registre. Ouvrez une invite de commande powershell, exécutant w / admin privs. Exécutez ces commandes:
Maintenant, lorsque vous cliquez avec le bouton droit sur un fichier, vous avez l'option "Exécuter Video2Gif"!
Au fait, j'ai installé ffmpeg
C:\dev\ffmpeg\ffmpeg-3.4.2-win64-static\
et mets levideo2gif.bat
script dans le répertoire bin juste à côtéffmpeg.exe
. J'ai également ajoutéC:\dev\ffmpeg\ffmpeg-3.4.2-win64-static\bin
à mes fenêtresPATH
, mais je ne pense pas que vous ayez à le faire.Si vous souhaitez avoir la possibilité de fournir au script des drapeaux / arguments de ligne de commande supplémentaires, créez un nouveau fichier nommé
video2gif-prompt.bat
et faites-le référencer par le registre au lieu devideo2gif.bat
:Vous pouvez toujours appuyer sur Entrée pour obtenir rapidement les valeurs par défaut.
la source