Konvertieren von RGB-Bildern in verlustfreies Video mit avconv / ffmpeg
5745
despens
Ich versuche, eine Serie von PNG24-Bildern, die eine Bildschirmanimation enthalten, in ein verlustfreies Video zu konvertieren, so dass jedes Pixel genau so wiedergegeben wird, wie es im Original war. Avconv (und ffmpeg) liefern jedoch dieselben, unbefriedigenden Ergebnisse, die auf eine fehlerhafte Kolonialisierung zurückzuführen sind.
Dies ist die Version von avconv, die ich verwende:
avconv version 0.8.6-4:0.8.6-0ubuntu0.12.04.1, Copyright (c) 2000-2013 the Libav developers built on Apr 2 2013 17:02:36 with gcc 4.6.3
Jedes der Bilder ist 1280 × 800 Pixel groß. Sie enthalten keine fotografischen Motive, sondern speziell gewürfelte Muster.
Ich habe den qtrleCodec verwendet, da es sich anscheinend um einen verlustfreien Codec handelt, der wie animierte GIFs oder animierte PNGs funktioniert. Bei der Konvertierung in Video scheint es jedoch zu einer Farbraumkonvertierung ("Filter") zu kommen, die die Pixel durcheinander bringt.
Dies ist ein Screenshot des Videos, das abgespielt wird:
Bitte beachten Sie, dass Sie diese Bilder in ihrer ursprünglichen Auflösung von 1280 × 800 sehen müssen, um die Unterschiede zu erkennen.
Hier ist ein Vergleich nebeneinander, wobei das linke Bild das Original und das rechte das Ergebnis nach der Videocodierung ist:
Gibt es eine Möglichkeit, aus einer Reihe von PNGs eine wirklich verlustfreie, pixelgenaue Videodatei zu erstellen?
Interessant. Ihre Eingabedatei wird als "bgra" angezeigt, während sie für mich (in "ffmpeg") als "rgba" angezeigt wird. Können Sie trotzdem versuchen, die Ausgabe auf `-pix_fmt argb` zu setzen?
slhck vor 10 Jahren
0
Ich habe argb ausprobiert, das Ergebnis sieht genauso aus wie zuvor.
vor 10 Jahren
0
Hallo @slhck, ausgehend von Ihrem Kommentar habe ich versucht, das Format der PNGs so zu ändern, dass kein automatischer Filter erforderlich ist. Ich habe in ImageMagick die Option -flatten + matte verwendet, um echte RGB24-Png-Dateien zu erhalten. Das Ergebnis war, dass ** kein Filter 'automatisch eingefügt' wurde **, aber das Ergebnis war immer noch falsch. Jetzt frage ich mich, wie man den 'Encoder' ändert: 'Lavf53.21.1'?
vor 10 Jahren
0
Der Encoder ist im Wesentlichen das, was in `avconv` (oder` ffmpeg`, wenn Sie FFmpeg verwenden) eingebaut ist. Sie können es nur ändern, indem Sie eine neuere Version verwenden. Meines Wissens bietet Libav keine Builds von `avconv` an, also müsstest du dich selbst bauen. Oder laden Sie eine statische Version von `ffmpeg` von der Download-Seite (http://ffmpeg.org/download.html) herunter. Bitte beachten Sie den Unterschied zwischen Libav und FFmpeg: [Wer kann mir den Unterschied und die Beziehung zwischen ffmpeg, libav und avconv mitteilen?] (Http://stackoverflow.com/questions/9477115/who-can-tell-me-the-difference -and-beziehung-zwischen-ffmpeg-libav-und-avconv)
slhck vor 10 Jahren
0
Wenn Sie dies jedoch mit einem kürzlich erstellten Build reproduzieren können, sollten Sie einen Fehlerbericht mit FFmpeg oder Libav erstellen, wenn Sie das Gefühl haben, dass die Farbkonvertierung nicht exakt ist (obwohl dies der Fall sein sollte).
slhck vor 10 Jahren
0
2 Antworten auf die Frage
2
despens
Mit Hilfe eines ffmpeg-Teilnehmers wurde festgestellt, dass sowohl ffmpeg als auch libav fehlerfreie, verlustfreie Quicktime-Dateien erstellen. Das Problem scheint der Grafikkartentreiber zu sein, der die Videos falsch darstellt (da GStream-basierte Player und VLC beide falsch anzeigen, VLC jedoch perfekte PNGs von Videoframes exportiert). Wenn Sie überprüfen möchten, ob ein Video die Frames wirklich Pixel für Pixel enthält, versuchen Sie es mit
Konvertieren Sie das verlustfreie Video für einen visuellen Vergleich wieder in Einzelbilder und vergleichen Sie diese.
Abhängig von den Codecs müssen Sie möglicherweise `-pix_fmt` verwenden, um dieselbe Anordnung verlustfrei dekodierter Daten zu erstellen. Der RGB-h.264-Decoder von ffmpeg gibt beispielsweise planares RGB aus. ffmpeg ruft "gbrp" auf.
Peter Cordes vor 9 Jahren
0