Ich erzeuge eine Animation in Matlab, die aus einfachen Diagrammen besteht. Die Bilder zeichnen sich durch feine Strukturen, starke Kontraste und meist diskrete Farben aus, z. B. wenige Pixel breite schwarze Linien, Punkte oder kleine Flecken einheitlicher Farbe, wenige Pixel hoher geglätteter Text usw. Hier ist ein Screenshot eines typischen Rahmens :
Was sich von Bild zu Bild ändert, sind die farbigen Flecken auf der linken Seite, die Zeit ("t = ") und die Position des schwarzen Punktes auf der rechten Seite.
Die Verwendung eines Standard-Video-Codecs, der für Vollbild-Bewegtbilder entwickelt wurde, erzeugt selbst bei schwacher Komprimierung starke Artefakte. Ohne Komprimierung wird die Videodatei jedoch unüberschaubar groß.
Meine Frage: Gibt es einen Videocodec, der für diese Art von Material optimiert ist? Optimal wäre es, wenn möglich, ein Encoder in ffmpeg enthalten ist und ein Decoder (Codec-Implementierung) für Windows verfügbar ist.
Ich habe mich ein wenig eingelesen und einige Experimente mit verlustfreien Codecs gemacht, um anständige Ergebnisse zu erzielen. Ich wäre an Kommentaren dazu interessiert, insbesondere wenn es verlustfreie oder verlustbehaftete Alternativen gibt, die ich übersehen habe.
Folgende Codecs/Formate habe ich in ffmpeg ausprobiert:
Verlustfreies Motion JPEG2000 / AVI
ffmpeg -i test.avi -vcodec jpeg2000 -strict -2 -pred 1 test_jpeg2000.avi
Verdichtungsverhältnis 19,59 %
Verlustfreies VP9 / WebM
ffmpeg -i test.avi -vcodec vp9 -lossless 1 test_vp9.webm
Komprimierungsverhältnis 0,52 %
HuffYUV / AVI
ffmpeg -i test.avi -vcodec huffyuv test_huffyuv.avi
Verdichtungsverhältnis 37,42 %
Verlustfreies H.264 / MP4
ffmpeg -i test.avi -vcodec h264 -qp 0 -preset veryslow test_h264.mp4
Komprimierungsverhältnis 0,53 %
Da HuffYUV nicht gut abgeschnitten hat, habe ich es von weiteren Tests ausgeschlossen.
Ich habe dann die Wiedergabeunterstützung unter Linux und Windows getestet, indem ich mplayer, xine, vlc, chrome und firefox unter Linux (Debian-Test) und vlc, Windows Media Player, chrome und firefox unter Windows (8.1) ausprobiert habe. Ich habe Browser eingefügt, da WebM speziell für Webvideos entwickelt wurde. Ergebnisse:
Verlustfreies Motion JPEG2000 / AVI
spielt unter Linux mit mplayer
Verlustfreies VP9 / WebM
spielt unter Linux mit vlc und Chrome und unter Windows mit Chrome und Firefox
Verlustfreies H.264 / MP4
spielt unter Linux mit mplayer, vlc und chrome und unter Windows mit vlc und chrome
Dass ein Video „abgespielt“ wird, bedeutet, dass es vom Player standardmäßig unterstützt wird und die Wiedergabe korrekt ist. Ich habe mehrere Fälle gefunden, in denen das Video "unterstützt" wurde, die Wiedergabe jedoch fehlerhaft war.
Obwohl Lossless VP9 das beste Komprimierungsverhältnis hat (mit einem winzigen Vorsprung), habe ich mich vorerst für Lossless H.264 entschieden, da es eine bessere Wiedergabeunterstützung bietet.
.flv
und Codec On2 VP6
in Adobe Media Encoder. Ungefähr 200 MB für 40 Minuten 640x480 1fs DiashowWenn Sie mit Formaten einverstanden sind, die proprietäre Encoder erfordern, empfehle ich Ihnen, sich RealVideo anzusehen . Ich habe dieses Format schon eine Weile nicht mehr verwendet, aber ich erinnere mich, dass ich vor 10 Jahren DVD-Cartoons mit sehr geringem Qualitätsverlust in <500 MB RMVB-Dateien komprimieren konnte, während XviD-Dateien mit ähnlicher Bitrate extrem blockig waren.
Ein weiterer zumindest theoretisch geeigneter Codec ist QuickTime RLE .
Obwohl es anscheinend moderne Forschung zu Zeichentrick-ähnlichen Video-Codecs gibt, kam überraschenderweise keine der Bemühungen über das Stadium des "Proof of Concept" hinaus.
Ich nehme an, Ihre MATLAB-Animation wird Cartoons ähneln: wenige Farben verwendet, scharfe Grenzen zwischen den Farben, nur ein kleiner Teil des Rahmens ändert sich aktiv usw.
Gyan
A. Donda
A. Donda