Comment faire pour convertir un gif animé en mp4 ou mv4 en ligne de commande?

79

Quelle commande utiliserais-je pour convertir un fichier vidéo mp4 ou mv4 en un gif animé, et inversement. C’est-à-dire convertir un gif animé en mp4 ou mv4.

Gilles, arrête de faire le mal
la source

Réponses:

109

Voici ce qui a fonctionné pour moi:

ffmpeg -i animated.gif -movflags faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" video.mp4

movflags - Cette option optimise la structure du fichier MP4 afin que le navigateur puisse le charger le plus rapidement possible.

pix_fmt - Les vidéos MP4 stockent des pixels dans différents formats. Nous incluons cette option pour spécifier un format spécifique offrant une compatibilité maximale entre tous les navigateurs.

vf - Les vidéos MP4 utilisant H.264 doivent avoir une dimension divisible par 2. Cette option garantit que c'est le cas.

Source: http://rigor.com/blog/2015/12/optimizing-animated-gifs-with-html5-video

Vico Vault
la source
4
Merci c'est la seule version qui a fonctionné pour moi sur osx.
Pykler
1
Cela a fonctionné pour moi sur Ubuntu 16.10 avec ffmpeg 3.0.2, là où la réponse n’est pas
cat
1
Vous pouvez aussi rogner au lieu de mettre à l’échelle (remplacer scalepar crop), car vous ne couperez qu’au plus 1 pixel. La mise à l'échelle peut rendre les choses floues
Jezzamon
Cela a coupé les dernières secondes pour moi. La mp4 résultante s'est terminée tôt.
callum
38

Dans mon cas, utiliser ffmpegdirectement a fait l'affaire et a fourni le meilleur résultat:

$ ffmpeg -f gif -i infile.gif outfile.mp4
BenC
la source
2
a produit une vidéo vierge (corrompue) sur os x
Pykler
2
@Pykler, vous devriez probablement augmenter la verbosité et / ou consulter le fichier journal pour comprendre ce qui se passe.
BenC
Moi aussi, probablement le "divisible par 2 dimensions" suggéré dans la réponse de vico Vault. (qui a fonctionné pour moi)
lapo
Cette méthode a parfaitement fonctionné pour moi. (La réponse la plus haute a provoqué l'interruption de 3 secondes de la fin.) EDIT: oh mais ça ne joue pas sur iOS :(
callum
Une page Web indique que vous devriez simplement ajouter -pix_fmt yuv420p
beefeather
2

Une autre façon de convertir une animation GIF en vidéo:

ffmpeg -i your_gif.gif -c:v libvpx -crf 12 -b:v 500K output.mp4

Les valeurs -crf peuvent aller de 4 à 63. Des valeurs inférieures signifient une meilleure qualité. -b: v est le débit maximum autorisé. Plus haut signifie meilleure qualité.

utilisateur8547
la source
2

Si vous voulez faire la sortie en "n boucles" , regardez cette solution en un coup

Convertissons donc un fichier normal.gif en boucle.mp4

pour exemple de film 2 boucles:

ffmpeg -stream_loop 2 -i normal.gif loop.gif -y;ffmpeg -i loop.gif -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" loop.mp4 -y

pour un exemple de film de 5 boucles:

ffmpeg -stream_loop 5 -i normal.gif loop.gif -y;ffmpeg -i loop.gif -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" loop.mp4 -y

ATTENTION: il y a un -y [pour l'écrasement]

PYK
la source
Si vous exécutez la première ffmpegcommande sans -y , vous aurez beaucoup moins de chances d'écraser accidentellement quelque chose que vous ne voudriez pas. (Il existe probablement aussi un moyen de ffmpegcanaliser la vidéo en elle-même et de le faire en une seule commande, sans le fichier intermédiaire ni l'écrasement.)
FeRD le