Wie konvertiere ich ein einzelnes Bild in eine 10-Sekunden-AVI-Datei mit ffmpeg mit hoher Qualität und kleiner Dateigröße?

496
GuyWithDogs

Ich habe versucht, mit FFMPEG ein einzelnes 640x480-Bild (in meinem Fall ein 8bpp-PNG-Bild, obwohl ich dies wahrscheinlich mit anderen Bildtypen und -qualitäten tun muss) in eine 10-Sekunden-XVID-AVI-Datei ohne Audiospur zu konvertieren. Ich führe dies auf einem älteren Spezial-Video-Looper aus, für den die XVID AVI erforderlich ist. Auf dem VGA-Display (640 x 480) wird eine Farbtiefe von 16 Bpp angegeben. Ja, wir reden nicht von High Tech oder neuer Technologie. Dies ist ein "Oh, wissen Sie über Computer?" Projekt für einen Freund.

Ich bin kein FFMPEG-Experte oder gar regelmäßiger Benutzer. Ich breche es alle 6-9 Monate aus, um ein komisches Problem wie dieses anzugreifen, das mir in den Weg kommt.

Idealerweise erstelle ich eine Video-Diashow. Die verschiedenen Versuche, die ich ausprobiert habe, führen dazu, dass AVI-Dateien entweder "blockiert" werden oder am Ende "blinken", wo einige kleine Abschnitte ihre Farbe ändern, während das Video abgespielt wird.

Ich habe versucht, in 1-fps-Ausgabedateien zu konvertieren, und ich habe versucht, 10 Kopien der Eingabedatei mit fortlaufenden Namen zu erstellen und 1 fps (und 3 bis 5 fps als Experiment) aus der Liste der sequentiellen Dateien zu erstellen.

Ich habe versucht, die Videodatenrate -b: v 1000K zu erhöhen, und das hilft. Ich habe -b: v 2000k ausprobiert und das hilft einigen, aber nicht viel.

Ich versuche, die Ausgabe-Framerate einzuschränken, denn wenn das Bild einmal angezeigt wird, sollte es sich kaum ändern. Wenn ich FFMPEGs Standardeinstellungen zulasse, bekomme ich ein 25-fps-Video, das ziemlich groß ist, und ehrlich gesagt ist die Qualität nicht viel besser - ich bekomme immer noch die "blinkenden" Abschnitte.

Ich habe One-Pass- und Two-Pass-Kodierungen anhand einiger Beispiele ausprobiert, die ich über Google und diese Website gefunden habe. Zwei Durchgänge scheinen etwas besser zu sein, aber es ist subjektiv.

Gibt es eine Möglichkeit, FFMPEG dazu zu bringen, zunächst eine sehr hochwertige Kopie des Eingabebildes zu erstellen und dann eine Art "Küste" zu erstellen, da sich das Bild nicht ändert?

Pro Anfrage für Befehlszeilen versucht:

So konvertieren Sie ein 640x480-73-KB-JPG-Bild (pro Irfanview, 24bpp, 34849 eindeutige Farben)

ffmpeg.exe -f image2 -loop 1 -t 10 -i lion3.jpg -s 640x480 -aspect 4:3 -r 1 -vcodec libxvid -b:v 1000k lion3_jpg_dr1000k_r01.avi 

Die Qualität ist dabei ziemlich gut und die Dateigröße liegt bei 100 KB.

Wenn ich die Datei als GIF-Datei (8 Bpp, 254 eindeutige Farben, 214 KB Dateigröße) und nur einen einzelnen Frame speichere, habe ich die folgende Konvertierung versucht:

ffmpeg.exe -r 1/10 -i lion3.gif -s 640x480 -aspect 4:3 -r 1 -vcodec libxvid -b:v 1000k -vsync cfr lion3_gif_dr1000k_r01.avi 

Der JPG-Befehl funktionierte auf der GIF nicht (ich denke, das ist keine Überraschung), und die Parameter in den obigen Abschnitten wurden aus einer Reihe von Beispielen zusammengestellt, die online gefunden wurden.

Das resultierende AVI der GIF-Konvertierung weist in Teilen des Hintergrunds eine Reihe von "blinkenden" Blöcken auf. In den 10 Sekunden, die das Video auf dem Bildschirm anzeigt, gibt es offensichtliche Änderungen.

Ich fand dann Beispiele für das Zusammenfügen mehrerer Bilder, um ein Video zu erstellen, also machte ich zehn Kopien des Bildes, wobei 01 bis 10 hinzugefügt wurden, und führte dieses aus

ffmpeg.exe -f image2 -framerate 1 -i image_%02d.png -c:v libxvid -vtag xvid -bf 0 -pix_fmt yuv420p -vf "fps=1" -b:v 2000K image_img_fps01_2000k_yuv420p_img2_bf0.avi 

Das Ergebnis waren einige Bereiche, die anfangs sehr blockig waren und sich im Laufe der Zeit irgendwie auflösten. Im Originalbild ist derselbe Bereich jedoch ein Satz kleiner schwarzer und dunkler Graubereiche, möglicherweise 2 x 2 Pixel. Das resultierende AVI hat Blöcke, die wie 8x8 oder größer aussehen.

Ich hoffe, das hilft beim Verständnis dessen, was ich versucht habe.

0
Teilen Sie den vollständigen Befehl. Gyan vor 5 Jahren 0
Originalpost mit einigen Beispielbefehlen, die ich ausprobiert habe, mit Beschreibung der Ergebnisse aktualisiert. GuyWithDogs vor 5 Jahren 1

0 Antworten auf die Frage