Video-Codec für einfache Animation?

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 :

Geben Sie hier die Bildbeschreibung ein

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.

Benötigen Sie einige Details: Welchen ffmpeg-Befehl haben Sie verwendet, um das schlecht aussehende Video zu generieren? Welche Zielbitrate oder Dateigröße streben Sie an? Benötigen Sie einen Codec, dessen Decoder frei verteilt werden kann, oder ist eine kommerzielle Lösung in Ordnung?
@Mulvya, danke für deinen Kommentar. schlecht aussehendes Video: Ich habe H.264/mp4 ausprobiert, und das Erhöhen der Bitrate hat nur geholfen, wenn das komprimierte Video fast so groß wie die Originaldatei wurde. Dateigröße: Mein unkomprimiertes Video hat eine Größe von 25 GB, was zB nicht bequem über das Internet übertragen werden kann. Als Größe unter 500 MB wäre schön. Decoder: Optimal wäre etwas, das frei verteilt werden kann, zB etwas, das VLC unterstützt. – Abgesehen von dem Problem, mit dem ich gerade konfrontiert bin, würden mich einige allgemeine Hinweise zum Umgang mit dieser Art von Material interessieren.
Ich habe selbst einige Fortschritte gemacht und werde bald eine vorläufige Antwort posten. Ich würde mich sehr über Kommentare freuen, wie man das verbessern kann.

Antworten (2)

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.

Haben Sie sich mit H.265 (alias x265) befasst? Ich habe noch nie damit codiert, aber die Ergebnisse sehen sehr vielversprechend aus. Animiertes Video wird etwa 50 % stärker komprimiert als H.264 (die Ergebnisse können natürlich variieren). Die Qualität ist immer noch phänomenal. Die Wiedergabeunterstützung wird wahrscheinlich schlechter sein, da es sich um einen neueren Codec handelt.
Ich habe gute Ergebnisse mit .flvund Codec On2 VP6in Adobe Media Encoder. Ungefähr 200 MB für 40 Minuten 640x480 1fs Diashow
Wahrscheinlich nicht mehr relevant, aber was ist mit den PNG-basierten Formaten APNG und MNG? Und was ist mit WebP?
Seitdem habe ich mich nicht mehr wirklich damit befasst. Wenn ich mich recht erinnere, habe ich MNG in Betracht gezogen, aber es kam nie wirklich in Gang. Von APNG hatte ich noch nichts gehört. Und ich wusste nicht, dass WebP verlustfreie Animationen unterstützt.
@Christian, diese littlesvr.ca/apng/gif_apng_webp5.html könnte dich interessieren. Wenn Sie sich das genauer ansehen, würde ich mich über eine alternative Antwort freuen!

Wenn 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.