Wie konvertiere ich ein animiertes GIF in ein mp4- oder mv4-Format in der Befehlszeile?

79

Welchen Befehl würde ich verwenden, um eine mp4- oder mv4-Videodatei in ein animiertes GIF zu konvertieren und umgekehrt. Konvertieren Sie ein animiertes GIF in ein mp4- oder mv4-Format.

Gilles
quelle

Antworten:

108

Folgendes hat bei mir funktioniert:

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

movflags - Diese Option optimiert die Struktur der MP4-Datei, damit der Browser sie so schnell wie möglich laden kann.

pix_fmt - MP4-Videos speichern Pixel in verschiedenen Formaten. Wir fügen diese Option hinzu, um ein bestimmtes Format anzugeben, das über alle Browser hinweg maximale Kompatibilität bietet.

vf - MP4-Videos, die H.264 verwenden, müssen Abmessungen haben, die durch 2 teilbar sind. Diese Option stellt sicher, dass dies der Fall ist.

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

Vico Vault
quelle
4
Danke, dies ist die einzige Version, die für mich unter OSX funktioniert hat.
Pykler
1
Dies funktionierte für mich auf Ubuntu 16.10 mit ffmpeg 3.0.2, wo die beste Antwort nicht war
cat
1
Und anstelle der Skalierung (ersetzen zuschneiden scalemit crop), wie Sie nur maximal 1 Pixel abschneidet gehen werden. Das Skalieren kann die Dinge
verschwimmen
Das hat mir die letzten Sekunden abgeschnitten. Resultierendes mp4 endete früh.
Callum
38

In meinem Fall hat die ffmpegdirekte Verwendung den Trick ausgeführt und das beste Ergebnis geliefert:

$ ffmpeg -f gif -i infile.gif outfile.mp4
BenC
quelle
2
hat ein leeres (beschädigtes) Video auf os x
Pykler 14.07.16 um 23:53
2
@ Pykler Sie sollten wahrscheinlich die Ausführlichkeit erhöhen und / oder die Protokolldatei überprüfen, um zu verstehen, was passiert.
BenC
Ich auch, wahrscheinlich das "durch 2 Dimensionen teilbare", das in der Antwort von Vico Vault vorgeschlagen wurde. (was bei mir funktioniert hat)
Lapo
Diese Methode hat bei mir perfekt funktioniert. (Die beste Antwort führte dazu, dass das Ende um 3 Sekunden gekürzt wurde.) BEARBEITEN: Oh, aber es wird nicht auf iOS
Callum
Eine Webseite sagt, Sie sollten nur -pix_fmt yuv420p
Beefeather
2

Eine andere Möglichkeit, GIF-Animationen in Videos umzuwandeln:

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

-crf-Werte können zwischen 4 und 63 liegen. Niedrigere Werte bedeuten bessere Qualität. -b: v ist die maximal zulässige Bitrate. Höher bedeutet bessere Qualität.

user8547
quelle
2

Wenn Sie die Ausgabe in "n Schleifen" erstellen möchten , sehen Sie sich diese Lösung auf einen Schlag an

Konvertieren wir also ein normal.gif in loop.mp4

Beispiel für einen Film mit 2 Loops:

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

Beispiel für einen Film mit 5 Loops:

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

ACHTUNG: es gibt ein -y [für das Überschreiben]

PYK
quelle
Wenn Sie den ersten ffmpegBefehl ohne ausführen -y, haben Sie viel weniger Chancen, versehentlich etwas zu überschreiben, das Sie nicht möchten. ( Wahrscheinlich gibt es auch eine Möglichkeit, ffmpegVideos in sich selbst umzuleiten und dies in einem Befehl ohne die Zwischendatei und das Überschreiben zu tun.)
FERD