Größe von GIF viel zu hoch?

1386
nfisher

Ich versuche, ein GIF aus einer MP4-Videodatei zu extrahieren.

Jetzt habe ich zwei Modi, mit denen ich das mache:

1) der regelmäßige:

ffmpeg -t 7.7 -ss 00:22:53 -i video.mp4 -i palette.png -s 320x174 -filter_complex "fps=15" output.gif 

Das gibt eine Datei mit einer Größe von 1,6 MB aus.

und 2)

ffmpeg -t 7.7 -ss 00:22:53 -i video.mp4 -i palette.png -filter_complex "fps=15,scale=320:-1:flags=lanczos[x];[x][1:v]paletteuse" output.gif 

was eine viel bessere aussieht, aber 4,5 MB (181% Steigerung) große Datei. Es verwendet eine 16x16-Palettendatei, die ich mit erstellt habe

ffmpeg -y -t 7.7 -ss 00:22:53 -i video.mp4 -vf fps=15,scale=320:-1:flags=lanczos,palettegen palette.png 

Jetzt kann ich nicht ganz sehen, wie 2 GIFs mit derselben fps, Dauer und Auflösung einen so großen Unterschied in der Größe haben können. Meine Intuition wäre, sie sollten gleich sein. Warum gibt es diesen Unterschied? Und gibt es eine Möglichkeit, die Größe von 2) auf 1 zu reduzieren, ohne an Qualität zu verlieren?

Vielen Dank

3
Ich glaube nicht, dass Ihr erster Befehl die Palettendatei verwendet. Erstellen Sie ein Palettenbild aus der erstellten GIF und vergleichen Sie es mit der Palette des 3. Befehls. Gyan vor 8 Jahren 1
Das ist absichtlich. Der Punkt ist, dass beide 2 verschiedene Paletten mit 256 Farben verwenden (die erste ist die Standardfarbe und die zweite eine generierte), die sich jedoch in der Größe stark unterscheiden. nfisher vor 8 Jahren 0
Ja, es werden weniger Farben aus der Standardpalette verwendet und diese werden wiederholt verwendet, sodass sie durch [LZW] (https://www.cs.cf.ac.uk/Dave/Multimedia/node214.html) effektiver komprimiert werden können. Mit der maßgeschneiderten Palette ist die Verwendung gleichmäßiger auf die 256 verfügbaren Optionen verteilt. Gyan vor 8 Jahren 0
Stellen Sie sich vor, Sie wollten ein GIF aus einem Graustufenbild mit einer 8-Farben-Palette erstellen. Palette A hatte Schwarz, Weiß und 6 Rottöne und Rot. Palette B hatte eine Rampe von Schwarz nach Weiß. Der GIF-Encoder verwendet nur Schwarzweiß von Palette A, sodass der Kompressor das Vorkommen von zwei Einträgen darstellen muss. Von der Palette B werden alle Farbfelder in unterschiedlichem Ausmaß verwendet. Gyan vor 8 Jahren 0
Dies kann hilfreich sein: http://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html slhck vor 8 Jahren 0
Mulvya, oh okay, das macht Sinn, danke. nfisher vor 8 Jahren 0

1 Antwort auf die Frage

3
HydroxCookieHoax

Aufgrund der Funktionsweise von GIFs wird die resultierende GIF umso schneller, je komplizierter die Palette ist.

Ich würde GIMP verwenden, um das resultierende GIF von # 2 zu optimieren - nicht 100% ig sicher, wie es funktioniert, aber es wird davon ausgegangen, dass im Wesentlichen doppelte Informationen von einem Frame zum nächsten gelöscht werden.

GIMP-Screenshot

Nun, die verwendete Palette ist 16x16 Pixel, was 256 Datenpunkte ergibt. Für mich sollten sich die resultierenden GIFs in der Größe nicht unterscheiden, solange beide verwendeten Paletten gleich groß sind (und alles andere gleich ist). nfisher vor 8 Jahren 0
Ich entschuldige mich für mein unvollständiges Wissen zu diesem Thema, aber ich glaube, es hat etwas mit der Funktionsweise des GIF-Kompressionssystems (LZW) zu tun: Zum Beispiel könnte es sein, dass die beiden verschiedenen Paletten unterschiedliche Dithering-Stufen bewirken. Dithering ist Zufall Punktmuster, das sich ergibt, wenn Farben angenähert werden, indem ähnliche und verfügbare Farben aus einer begrenzten Palette gemischt werden. Das Dithering ist für die GIF-Dateigröße relevant, da es die reinen Farbbereiche unterbricht, die für eine effiziente LZW-Komprimierung förderlich sind, und die Dateigröße größer als nötig sein kann. HydroxCookieHoax vor 8 Jahren 2
Sie werden definitiv mehr in der Materie gelesen als ich. Danke für den Kommentar. Ich vermute, dass Dithering die Dateigröße erhöht, wenn mehr Farben einer bestimmten Palette verwendet werden, wie Mulvya vorschlug. nfisher vor 8 Jahren 1