Mein Dateioptimierungstool

Hier könnt ihr euch selbst, eure Homepage, euren Entwicklerstammtisch, Termine oder eure Projekte vorstellen.
Forumsregeln
Bitte Präfixe benutzen. Das Präfix "[Projekt]" bewirkt die Aufnahme von Bildern aus den Beiträgen des Themenerstellers in den Showroom. Alle Bilder aus dem Thema Showroom erscheinen ebenfalls im Showroom auf der Frontpage. Es werden nur Bilder berücksichtigt, die entweder mit dem attachement- oder dem img-BBCode im Beitrag angezeigt werden.

Die Bildersammelfunktion muss manuell ausgeführt werden, die URL dazu und weitere Details zum Showroom sind hier zu finden.

This forum is primarily intended for German-language video game developers. Please don't post promotional information targeted at end users.
Benutzeravatar
Krishty
Establishment
Beiträge: 7852
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Mein Dateioptimierungstool

Beitrag von Krishty »

Ich bin gerade dabei, meine ganzen privaten Projekte öffentlich zu machen, damit die nicht auf meiner Platte verschimmeln …

Darum hier mein Tool, mit dem ich meine Backups und die Bilder auf meiner Website verlustfrei optimiere:

Bild

Download (Windows 64-Bit): https://papas-best.com/downloads/optimi ... timizer.7z

In den Tabs könnt ihr so Sachen einstellen wie: Metadaten wegschmeißen; JPEGs automatischen derotieren; usw. Dann den Pfad mit zu optimierenden Dateien auswählen, Analyze drücken, Optimize drücken.

Achtung:
  • Vorher immer ein Backup anlegen!
  • Alles, was DEFLATE nutzt (PNG, ZIP, …) kann Tage oder Wochen zur Optimierung brauchen. Mir ist’s egal; das läuft dann halt im Hintergrund.
  • Das Änderungsdatum der Dateien wird minimal angepasst um Dateien als optimiert zu markieren, so dass sie beim nächsten Mal nicht erneut durchgekaut werden.
  • Im Fehlerfall könnte im Temp-Verzeichnis ein Ordner mit Log-Datei und Artefakten zurückbleiben.
  • Falls euer Benutzername oder das Verzeichnis erweiterte Unicode-Zeichen nutzt, funktionieren die JPEG-Optimierungen wegen EXIFTools Perl-Runtime nicht.
Das Tool setzt so ziemlich alles um, was ich schon im Thread über verlustfreie Datenoptimierung geschrieben habe; nur besser :) Es kann einen Thread pro Datei zur Optimierung nutzen, damit die CPU auch ordentlich glüht. Die eigentliche Optimierungsarbeit übernehmen die Tools, die dem Download beiliegen.

Da rauscht seit Jahren fast jedes PNG, GIF, und ZIP von mir durch. Letztens habe ich die UI für die Anzeige der Sub-Prozesse von pollend auf Event-basiert umgestellt und es dann auch direkt für ein Release vorbereitet.

Ist hoffentlich dem einen oder anderen nützlich, der ein paar MiB Festplattenspeicher/Downloadgröße/Bandbreite sparen möchte.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: Mein Dateioptimierungstool

Beitrag von Tiles »

Brauchen kann ich es nicht wirklich, wer schert sich heutzutage noch um ein paar Kilobyte. Und ich gehöre auch zu den Banausen ^^

Aber ich finde das Projekt Klasse :)
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Benutzeravatar
Krishty
Establishment
Beiträge: 7852
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Mein Dateioptimierungstool

Beitrag von Krishty »

Tiles hat geschrieben: 24.08.2019, 19:12Brauchen kann ich es nicht wirklich, wer schert sich heutzutage noch um ein paar Kilobyte.
:D Wenn ich demnächst mal wieder ein paar CPU-Kerne frei habe, lasse ich ihn gern über BfA laufen. Kann ja nicht schaden :)

————

Aktualisierte Version: https://papas-best.com/downloads/optimi ... timizer.7z
  • updated ECT to version 0.8.2 from 2018-08-07
  • fixed inadvertent gzip optimization
  • fixed leftover temporary files with recursive optimization
  • fixed a crash with the context menu
  • fixed a crash cancelling failed jobs
  • fixed error message when archive content failed
  • fixed control alignment
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
scheichs
Establishment
Beiträge: 714
Registriert: 28.07.2010, 20:18

Re: Mein Dateioptimierungstool

Beitrag von scheichs »

Also ich hab's mal ausprobiert. Wie lange optimiert der an PNG? Ich hab mal so'ne Stunde an einem 1024x1024er PNG rumrechnen lassen, aber es wurde nicht fertig. War das mit den Tagen und Wochen ernst gemeint (also pro Datei) ?
Die Anwendung selbst funktioniert aber sehr cool. Schönes Tool!
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: Mein Dateioptimierungstool

Beitrag von Tiles »

Sag mal, bei odt, wird die Optimierung nicht beim nächsten Bearbeiten wieder zertrümmert? Dann schreibt Libre / Open Office ja ein neues Zipfile ...
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Benutzeravatar
Krishty
Establishment
Beiträge: 7852
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Mein Dateioptimierungstool

Beitrag von Krishty »

scheichs hat geschrieben: 01.09.2019, 11:19 Also ich hab's mal ausprobiert. Wie lange optimiert der an PNG? Ich hab mal so'ne Stunde an einem 1024x1024er PNG rumrechnen lassen, aber es wurde nicht fertig. War das mit den Tagen und Wochen ernst gemeint (also pro Datei) ?
Ja; bei 1024×1024 musst du schon mit einem Tag rechnen. Wenn 256 oder weniger Farben drin sind, dauert es nochmal länger weil die Palettenreihenfolge genetisch permutiert wird.
Tiles hat geschrieben: 01.09.2019, 13:33 Sag mal, bei odt, wird die Optimierung nicht beim nächsten Bearbeiten wieder zertrümmert? Dann schreibt Libre / Open Office ja ein neues Zipfile ...
Ja, das ist bei allen Formaten so. Darum ist’s vor allem für Dinge gedacht, die einmal geschrieben und oft gelesen werden – z. B. Downloads.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Jonathan
Establishment
Beiträge: 1963
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Mein Dateioptimierungstool

Beitrag von Jonathan »

Die Frage ist nur, warum?

Ich meine, ich verstehe ja, dass es nett ist maximal Effizient zu sein. Aber ich habe mal eben versucht, es zu überschlagen, und die Rechnung geht für mich einfach nicht auf:

Der Rechner mag zwar den ganzen Tag eh an sein, aber sagen wir mal eine CPU verbraucht unter Volllast 80 Watt mehr Energie als im Ruhezustand. Wenn das Ding jetzt einen Tag läuft, sagen wir gut 12 Stunden, dann landet man ganz grob bei 1 kW/h (kostet aktuell ca. 30 Cent). Und so riesig ist eine 1024^2 png jetzt auch nicht, sagen wir, durch die Optimierung wird sie grob 10 Mb kleiner.

Schaut man sich jetzt aktuelle Festplatten an, bekommt man für 120€ schon 4 TB. Das sind dann 1 GB für 30 Cent. Das ist einhundertmal kosteneffizienter als irgendetwas neu zu komprimieren.

Und selbst wenn ich mich in meiner Rechnung vertan habe und um zwei Größernordnungen daneben liege, wäre es immer noch weniger Arbeit, jedes Jahr mal eine neue Festplatte einzubauen und Daten rüber zu kopieren, anstatt jede Woche neue Dateien komprimieren zu müssen.

Wie gesagt, akademisch interessant, aber ich sehe den Echtweltnutzen nicht so recht.
Lieber dumm fragen, als dumm bleiben!
Benutzeravatar
Jonathan
Establishment
Beiträge: 1963
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Mein Dateioptimierungstool

Beitrag von Jonathan »

Oh, mir ist gerade aufgefallen, dass es vielleicht eher für Webseitenbetreiber statt für Heimanwender gedacht ist. Da skaliert der Traffic natürlich mit der Anzahl der Nutzer und man muss nochmal ganz anders rechnen. Aber mit Hosting kenn ich mich zu wenig aus um das jetzt halbwegs sinnvoll machen zu können.
Lieber dumm fragen, als dumm bleiben!
Benutzeravatar
Krishty
Establishment
Beiträge: 7852
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Mein Dateioptimierungstool

Beitrag von Krishty »

Also erst einmal ist PNG wirklich mit großem Abstand das am kniffligsten zu optimierende Format (wegen der Paletten- und Filterpermutationen). JPEGs sind meist in <2 Sekunden fertig; ZIP/gz dauert deutlich länger, ist aber immer noch viiiel schneller als PNG. Da geht die Rechnung schon eher auf.

Zweitens darfst du Speicherplatz nicht mit Bandbreite verwechseln. Meine Internetverbindung ist in den letzten Jahren bei weitem nicht so viel schneller geworden wie meine Festplatten größer. Das gilt übrigens auch für Anwendungen, die du täglich startest, die dann z. B. gezippte Ressourcen oder PNGs laden. Ich hatte hier mal einen Benchmark, dass Spiele mit PNG-Ressourcen sehr viel schneller laden, wenn die PNGs optimiert sind.

Drittens – wie gesagt – der Multiplikator. Teile der GIF-Optimierung wurden aktiv von tumblr ins Leben gerufen weil sich auch sehr CPU-intensive Optimierung lohnt, wenn das GIF auf einem Blog läuft, der täglich hunderttausend Mal abgerufen wird.

Ich bin hier sicher nicht um euch zu sagen, dass ihr jetzt täglich die ganze Platte in Grund und Boden optimieren sollt. Aber falls bei euch der Bedarf aufkommt, habt ihr nun das richtige Werkzeug dafür ;)
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Jonathan
Establishment
Beiträge: 1963
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Mein Dateioptimierungstool

Beitrag von Jonathan »

Joah, da sind ein paar gute Argumente dabei. Dankeschön.
Lieber dumm fragen, als dumm bleiben!
Benutzeravatar
Zudomon
Establishment
Beiträge: 2231
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: Mein Dateioptimierungstool

Beitrag von Zudomon »

Krishty hat geschrieben: 24.08.2019, 17:59 [*]Falls euer Benutzername oder das Verzeichnis erweiterte Unicode-Zeichen nutzt, funktionieren die JPEG-Optimierungen wegen EXIFTools Perl-Runtime nicht.
Wäre da nicht eine einfache Lösung, den Dateinamen zu ändern, das Tool drüber laufen zu lassen und dann den Dateinamen zurückzusetzen?
Benutzeravatar
Krishty
Establishment
Beiträge: 7852
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Mein Dateioptimierungstool

Beitrag von Krishty »

Mache ich schon – das Problem ist, dass ExifTool Perl-basiert ist, und ein Klick auf die EXE startet die Perl-Laufzeitbibliothek. Die legt ihre Dateien im Temp-Verzeichnis an (in diesem Falle C:\Users\BÖSE-UNICODE-ZEICHEN\AppData\Local\Temp), oder versucht es zumindest, und dabei geht etwas kaputt.

8.3-Dateinamen sind keine Lösung da nicht mehr überall unterstützt. Und bevor ich da drumherum arbeite, suche ich mir lieber ein neues Tool. Megabytes an Code ausschließlich für EXIF-Metadaten ist ja an sich schon verkehrt.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 7852
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Mein Dateioptimierungstool

Beitrag von Krishty »

Kurzes Update (vor allem mit Bezug auf die wochenlange Optimierung von PNGs) und Zusammenfassung meiner Posts auf encode.su:

PNG-Optimierungs-Tools haben üblicherweise einen Parameter, mit dem man steuern kann, wie viel Rechenleistung man in die Optimierung stecken will.

Den braucht man, weil die Optimierung nicht effizient berechenbar ist, und Brute Force würde die gesamte Rechenleistung der Welt nicht reichen um die perfekte Kompression für ein kleines PNG zu berechnen.

Das ist wiederum so, weil die Kompressionsmethode – Deflate – häufigen Zeichen kürzere Bitfolgen zuordnet als seltenen (Huffman). Wenn wir nun vor der Entscheidung stehen, ob wir „Banana“ in Ban-an-a zerstückeln oder in Ba-na-na oder in B-a-n-a-n-a spielt es eine große Rolle, wie häufig B, a, n, Ba, na, Ban, und na in der gesamten Umgebung vorkommen. Aber noch kniffliger: Wenn wir uns für eine Möglichkeit entscheiden, steigt die Häufigkeit der gewählten Symbole, und das ändert möglicherweise wieder ihre Längen in Bits. Jede Entscheidung ändert also alles. Und das kriegt man n ur via Heuristik unter Kontrolle.

Okay. Man würde nun erwarten, dass die Datei umso kleiner wird, je länger man rechnet. Mit der Zeit auf X und der Größe auf Y sollten wiederholte Optimierungen – mit immer längerer Laufzeit – also so aussehen:

Bild

Da ist Rauschen drin weil a) Heuristik oft richtig liegt aber manchmal eben auch daneben und b) Zeitmessung auf Computern mindestens so schwierig ist wie perfekte Kompression.

Nun habe ich ECT (das Arbeitspferd hinter meiner PNG-Optimierung) über Lenna laufen lassen, und bekam stattdessen das hier:

Bild

Okaaaaaay. Also habe ich beschlossen, mehr Messwerte hinzuzufügen. Bis rauf zu 200 Iterationen und mehr (Papa’s Best Optimizer nutzt 600). Außerdem mehrere Block-Split-Iterationen im Vergleich (Block Splits sind Stellen, an denen man die Kompression bewusst unterbricht und den Kompressor leert – bspw. wenn Text von Englisch zu Chinesisch wechselt – damit die Wahrscheinlichkeiten und Vorhersagen des alten Modells keine teuren Fehlvorhersagen für die neuen, kontextuell unterschiedlichen Daten verursachen).

Bild

Fuck! Die Kurve sollte nie, nie, nie nach oben gehen! Das sagt uns quasi: Wenn wir ECT für 0,5 s laufen lassen (nämlich mit drei Iterationen), bekommen wir bessere Kompression hin als mit allen anderen Kompressionsstufen danach; egal, wie lange sie laufen.

Vielleicht war Lenna auch nur eine schlechte Wahl, denn PNG ist ja eher für Grafik als für Fotos. Also habe ich mir das Wikipedia-Logo geschnappt, und … gleicher Mist:

Bild

Okay. Quelltext angeschaut, aber … nichts kapiert. Gehen wir systematisch ran.

Die PNG-Kompression geschieht in zwei Stufen: Erst laufen Filter über das Bild, die die darüberliegende Zeile und alle Pixel links einbeziehen (oft eine einfache Subtraktion). Dadurch wird das zweidimensionale Problem zu einem eindimensionalen reduziert, und regelmäßige Farbverläufe produzieren bspw. nur noch einen konstanten Zahlenstrom, der sich dann super komprimieren lässt.

Danach erst kommt die Deflate-Kompression, die ich oben erwähnte.

Also habe ich die PNGs synthetisch verändert, so dass sie ungefiltert sind – wie normale Bitmaps (war ganz einfach via lodepng) – und ECTs Filterung abgeschaltet (--reuse). Falls es ein Filterproblem ist, sollten wir die Delle nun wieder sehen. Falls es ein Deflate-Problem ist, nicht.

Und wenn ich eh schon diesen riesen Aufwand betreibe, kann ich ja direkt alle anderen PNG-Tools hinzufügen und deren Leistung mit messen.

Und damit das fair ist, kompiliere ich sie alle selber für’s selbe Ziel (64-Bit-Windows) mit dem selben Compiler (Visual Studio 2019) aus dem aktuellen Trunk und packe sie in DLLs (um Namenskollisionen zwischen den Quelldateien zu vermeiden, sind ja alle unter einander gebrancht) und starte sie aus dem selben Prozess. Das wären:
  • ZopfliPNG, Googles PNG-Optimizer aus ihrem Zopfli-Projekt.
  • advpng, das PNGs sowohl mit 7-Zips Deflate-Kompressor optimieren kann als auch mit Zopfli.
  • Leanify, das ZoplfiPNG um eigene Optimierungen ergänzt.
  • … und eben ECT.
Ich wollte auch gern pngout ausprobieren, aber das ist closed source. OptiPNG nutzt die normale Zlib und ist deshalb nicht gut genug für den Vergleich.

Ergebnis:

Bild

Wir sehen ungefähr ein Promille der Größe im Graph; die Größenunterschiede sind also für Normal-User nicht dramatisch. Für Kompressionsanalyse jedoch schon.

7-Zip war so schlecht, dass es nicht sichtbar ist. Ich kann mir nicht erklären, warum – möglicherweise eine veraltete Version oder ein Bug.

ZopfliPNG und advpng schneiden ungefähr gleich ab, abgesehen von unterschiedlicher Anlaufzeit.

Leanify schlägt ZopfliPNG bei kurzer Laufzeit; danach ist es mal besser und mal schlechter.

Und ECT … rockt alles. ECT ist *viel* schneller als alle anderen. ECT komprimiert *viel* besser als alle anderen. In jedem Einzelnen Lauf.

Wir sehen auch keine Delle – der Bug mit der Delle lag also in der Filterung. Wir sehen aber ebenso, dass ECT sich unberechenbar verhält.

Wir sehen aber auch, dass wir nach tagelanger Laufzeit keine Verbesserung erwarten können, sondern dass ECT recht schnell am Limit ist. Das ist ein Signal an meinen Optimizer.

Nun habe ich die Benchmarks auf anderen Bildern wiederholt, und ECT rockt sie jedes Mal in Grund und Boden. Jedoch … bei einem Comic:

Bild

WTF. WHAT THE ACTUAL FUCK. Bei 61 Iterationen ist ECT plötzlich 10× langsamer als bei 60. Dann probierte ich die Transparenz-Demo von Wikipedia aus und … 61 Iterationen waren ZWEITAUSEND MAL LANGSAMER als 60. Kein Witz. Ich kann auch keinen Graph zeigen, weil sich alles im Pixel ganz links abspielt und die Kurve dann nach ganz rechts springt weil ECT statt zehn Sekunden plötzlich einen halben Tag läuft.

Ich spreche gerade mit den Entwicklern der Tools. Sobald sich das alles klärt, wird es im Optimizer nachgebessert …
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
scheichs
Establishment
Beiträge: 714
Registriert: 28.07.2010, 20:18

Re: Mein Dateioptimierungstool

Beitrag von scheichs »

Wieder mal super Lektüre. Danke für den Aufwand das so toll hier niederzuschreiben und super, dass Du dem ganzen "nachgegangen" bist!
Benutzeravatar
Tiles
Establishment
Beiträge: 1990
Registriert: 11.01.2003, 13:21
Kontaktdaten:

Re: Mein Dateioptimierungstool

Beitrag von Tiles »

Bin mal gespannt was dabei rauskommt :)
Free Gamegraphics, Freeware Games https://www.reinerstilesets.de
Die deutsche 3D Community: https://www.3d-ring.de
Benutzeravatar
Krishty
Establishment
Beiträge: 7852
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Mein Dateioptimierungstool

Beitrag von Krishty »

Neue Version: https://papas-best.com/optimizer_de#download

Bild

Changelog gegenüber dem letzten Post hier:
  • 2019-10-20
    • options are now disabled during optimization
    • fixed possible deadlock with Leanify
    • fixed possible deadlock with damaged archives
    • fixed missing 7z.dll
    • fixed launch error message
    • fixed tab glitches
    • fixed keyboard navigation
  • 2019-10-14
    • major UI overhaul (now supporting drag’n’drop)
    • moved options to new General tab
    • fixed 7-Zip settings
    • fixed crashes with analysis
    • fixed a typo
    • fixed tab flickering
  • 2019-09-30
    • improved Office optimization
      • added XML optimization via Leanify
      • automatic settings for PNG, JPEG, … inside of Office documents
      • fixed JPEG derotation
      • removed Recursive option
    • updated ECT to version 0.8.2 from 2018-08-07 (bugfix for ZIP compression)
    • jobs can now be canceled
    • numbers now display localized
    • improved layout of archive tabs
    • added icon
    • fixed JPEG optimization failure if derotation would be lossy
    • fixed recursive gzip optimization
    • fixed initial value of Compound checkbox
    • fixed exit code message on tool errors
  • 2019-09-21
    • improved ECT PNG speed: three blocksplitting passes (six before); 60 iterations (500 before)
    • added version information to EXE
    • fixed memory leak with huge log files (e.g. during GIF optimization)
    • fixed glitch in ECT command line
Die UI ist komplett überarbeitet. Jetzt könnt ihr endlich auch Ordner/Dateien via Drag & Drop hinzufügen! Die Tabs zeigen auch endlich richtig an, wie hier beschrieben.

PNGs optimieren deutlich schneller (aber wahrscheinlich immer noch zu langsam für den Durchschnittsgeschmack). Das ist aber schon länger drin.

Ich habe erstmals ausgiebig auf Windows 10 getestet, und interessanterweise ging dort einiges kaputt. Ich rufe ja einen Satz Dritt-Tools auf, via CreateProcess() mit Pipes als stdin/stdout/stderr, so dass sie ohne Konsole laufen und alle Ein- und Ausgaben in meinem Optimizer landen.

Nun haben zwei Tools auf Windows 10 nach Eingaben gefragt, die auf Windows 7 nicht fragen: Leanify wollte plötzlich Press any key to continue . . . von mir und 7-Zip fragt bei beschädigten ZIP-Dateien plötzlich nach, ob man weitermachen möchte. Beide hingen natürlich, weil ich auf sowas nicht vorbereitet war.

Ziemlich merkwürdig, sowas. Aber nun sollte es gehen.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 7852
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Mein Dateioptimierungstool

Beitrag von Krishty »

Ich habe mich in letzter Zeit zurückgehalten, weil die Updates immer recht klein waren, aber nun hat sich doch ordentlich was angestaut:

https://papas-best.com/optimizer_de

Erstmal gibt es nun ein Setup. Ist bequemer.

Die UI ist noch weiter verfeinert worden und läuft nur noch über Drag & Drop. Beim Beenden des Optimizers werden nun die Einstellungen gespeichert, so dass ihr die Haken nicht immer neu setzen müsst.

Intern nutze ich nun Condition Variables, um nebenläufige Arbeit mit der UI zu synchronisieren. Dadurch könnt ihr die Thread-Zahl während der Optimierung hoch- und runterdrehen – allerdings wird die Änderung träge übernommen, um keine Jobs abzubrechen. Nützlich, wenn man mal auf Energiesparmodus gehen muss oder so.

Die PNG-Optimierung wurde minimal verbessert. Da war ein Bug im Code, der defluff und deflopt nicht korrekt im Wechsel aufgerufen hat. Die TGA-zu-PNG-Konvertierung habe ich rausgeschmissen, da die wohl eh niemand genutzt hat.

Die ZIP- und gzip-Optimierung überprüft ihre Ergebnisse nun über Prüfsummen. War eigentlich überfällig. Dabei habe ich auch direkt ein Problem in 7-Zip entdeckt: Die Prüfsumme unterscheidet sich, wenn man die Daten in ZIP überprüft und wenn man sie extrahiert.

Ursache dafür ist, dass ZIP-Dateien zwei Wege kennen, Ordner zu speichern. ZIPs haben ein Central Directory, in dem alle Objekte verzeichnet sind. Ordner können dort entweder als separates Ordner-Element abgelegt werden – so macht es 7-Zip – oder ohne separates Ordner-Element direkt in den Dateinamen einer Datei geschrieben werden, à foo/bar.txt. Das tun Optimierungstools wenn sie erkennen, dass sich der Platzverbrauch eines separaten Ordnerelements nicht lohnt. 7-Zip zeigt in solchen ZIPs zwar die Ordner korrekt an, berücksichtigt sie aber nicht bei der Prüfsummenberechnung, wodurch die Prüfsummen der Dateinamen von dem abweichen, was man beim Betrachten des Archivs erwarten würde. Ich finde, dass es ein Bug ist; Igor Pavlov wohl nicht.

Das nächste große Ding wird EPUB-Optimierung, also für Ebooks. EPUB ist im Grunde ein ZIP-Archiv, stellt aber exotische Anforderungen: Die erste Datei im Archiv muss immer mimetype heißen und darf nicht komprimiert sein. Das ist mit Optimierungs-Tools knifflig, denn die sortieren halt nach Belieben um und komprimieren.

Ich bin schon recht weit und erreiche auf übliche EPUBs 5–15 %; wer es ausprobieren möchte, kann sich bei encode.su einen Prototypen herunterladen. Offiziell freigegeben wird’s erst, wenn ich die Validierungsbibliothek ans Laufen gekriegt habe (braucht Java, und das kommt mir nicht auf den PC).
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 7852
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Mein Dateioptimierungstool

Beitrag von Krishty »

Noch ein Grund, fleißig den Optimizer zu nutzen: Facebook bettet Tracking-Cookies in jedes JPG ein, das hoch- oder runtergeladen wird.

Ich kann nicht genau herauslesen, ob sich die Cookies pro Download unterscheiden oder pro Upload. Aber nach einer Runde Optimizer mit einem anderen Metadaten-Modus als keep all ist der Spuk weg.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 7852
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Mein Dateioptimierungstool

Beitrag von Krishty »

PDF-Optimierung ist in Arbeit, aber noch nicht fertig. Ich habe über das letzte Jahr fleißig Fehler korrigiert.
  • 2021-02-04
    • fixed some JPGs failing to derotate (by updating mozjpegtran to version 4.0.1-rc2)
  • 2021-01-22
    • fixed deletion of rotation metadata from non-rotatable JPGs
  • 2020-12-07
    • fixed some TIFFs being destroyed during optimization
  • 2020-11-09
    • added a button to change the temp directory
    • fixed temp directory not being saved correctly
    • fixed Adobe metadata option not being saved correctly
    • minor performance improvements
    • minor setup improvements
  • 2020-08-04
    • added JPEG thumbnail optimization
    • added option to remove Adobe metadata from JPEG
    • improved launch speed
    • improved performance during resizing
    • updated ECT to 0.8.3
    • updated ExifTool to 12.03
    • fixed genetic PNG optimization appearing frozen
    • fixed wrong status messages
    • minor performance improvements
Und es gibt nun einen RSS-Feed für Updates.

Zuletzt konnte ich an die 30k Bilder ohne ein einziges Problem optimieren. Wer sich also eine stabile Version für langfristige Nutzung schnappen möchte, sollte nun zugreifen, bevor irgendeines der Drittprogramme mit dem nächsten Update wieder kaputtgeht :) (Ich fahre natürlich jede Menge Tests, aber manche Konstellationen sind schwer prüfbar.)
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 7852
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Mein Dateioptimierungstool

Beitrag von Krishty »

Neues Jahr, neue Version: Papa’s Best Optimizer 2022.08.30
  • updated ECT to version 0.9.3 from 2022-08-26 (improved JPEG/PNG compression)
  • fixed Office ’97 optimization breaking some files
  • fixed JPEG optimization breaking CMYK images
  • removed option to strip Adobe metadata during JPEG optimization (now handled automatically)
  • fixed Windows 10 support
  • minor performance improvements
Erstmal ist es mein erstes Release mit komplett neuem Build- und Deployment-System. Lief relativ gut, muss ich sagen :)

ECT wurde dieses Jahr zu Glück wieder weiterentwickelt, und das äußert sich durch minimal verbesserte PNG-Optimierung und deutlich verbesserte JPEG-Optimierung. Fuck yea! Push the limits! Ich habe auch ein Bisschen was zurückgegeben, indem ich immer geduldig den Windows-Build repariere.

Das mit den JPEG-Dateien war ein heikles Ding.

Aaaalso, JPEG ist ja ein Moloch von Dateiformat. Und JPEG gibt es nicht nur mit RGB-Farbraum, sondern auch in CMYK und YCbCr. Allerdings nicht nativ, sondern durch Dranklemmen von einem bekloppten APP0-Metadaten-Chunk, der Adobe-spezifisch ist. Uff.

Die Präsenz dieses Chunks und eines entsprechenden Eintrags darin sagt einem JPEG-Anzeigeprogramm also, dass die Farben CMYK/YCbCr sind. Wer würde sowas machen, fragt ihr? Nun … hier gibt’s sowas. Firefox hatte deswegen auch schon einige Bugs.

Wenn mein Optimizer über so ein JPEG rutschte, und fröhlich die Metadaten entfernte, wurde daraus unbeabsichtigt ein RGB-JPEG. Wobei dieses RGB nur Datenmüll aus den CMYK-Kanälen war.

Falls ihr mal in der unglücklichen Lage seid, solche Dateien identifizieren zu müssen:

  ExifTool -Adobe:ColorTransform -n foo.jpg

gibt aus

  ColorTransform : N

wobei als N eine 1 bedeutet, dass es YCbCr ist; und 2 CMYK. Kommt 0 oder überhaupt nichts, darf man RGB annehmen.

Jedenfalls hat mir dieser Automatismus erlaubt, die Experten-Option Remove Adobe metadata (may break some images) aus der GUI zu entfernen: Jetzt kann das Programm selber entscheiden, ob es sinnvoll ist, den Chunk rauszuschmeißen oder nicht.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 7852
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Mein Dateioptimierungstool

Beitrag von Krishty »

Das Problem mit ExifTool

Mein Optimizer nutzt ExifTool, um überflüssige Metadaten aus JPEGs zu löschen, Thumbnails zu extrahieren, und beschädigte Dateien zu reparieren. ExifTool ist großartig und wahnsinnig vielseitig – es unterstützt neben JPEG auch Metadaten von so ziemlich jedem anderen Format, von PDF über FLAC bis MP4.

Allerdings ist es auch langsam, und das kommt überraschend.

Unerwartet langsam

Mein Optimizer ruft ExifTool pro JPEG bis zu acht Mal auf (je nach Einstellung und Dateiinhalt) – für Metadaten-Bereinigung, Derotation, Thumbnail-Extrahierung, und so weiter. Ich erwarte nicht, dass das Lesen von Metadaten aus einem JPEG die am besten optimierte Operation der Welt ist – aber in meinem Fall verbringt der Optimizer fast so viel Zeit in ExifTool wie in der kompletten Optimierung der Bilddaten (Trellis-Quantisierung; Optimierung der Huffman-Tabellen; Rotation; und so weiter). Das überrascht dann schon.

Perl

ExifTool ist in Perl geschrieben – und für Windows als vorkompilierte EXE verfügbar. Hier wurde ich stutzig: Seit wann kann man Perl kompilieren?

Es stellt sich heraus, dass ExifTool.exe eben kein kompiliertes ExifTool ist. Stattdessen ist es eine komprimierte Perl-Laufzeitumgebung plus ExifTools Quelltext! Wir sehen, worauf ein Aufruf von ExifTool hinausläuft:
  1. Eine portable Perl-Runtime ins Temp-Verzeichnis des Benutzers extrahieren (über ein Dutzend Megabyte).
  2. Den Quelltext von ExifTool ins Temp-Verzeichnis des Benutzers extrahieren (hier sprechen wir von über 200 Dateien).
  3. Die Perl-Runtime ExifTool interpretieren lassen, und dabei alle Parameter und Ein-/Ausgaben weiterleiten.
Dass das überhaupt erst bei achtmaligem Aufruf verdächtig langsam wird, ist ein Testament an moderne CPU-Leistung und Perls Schlichtheit!

Offensichtliche Bugs

Ich hatte in der Vergangenheit immer wieder Probleme mit ExifTool – Abbrüche mit nichtssagenden Fehlermeldungen und große Probleme in Umgebungen mit vielen nicht-ASCII-Pfaden. Rückblickend ist es nun offensichtlich: Obwohl ExifTool und Perl selber Unicode-tauglich sind, ist es höchstwahrscheinlich die selbst-extrahierende Executable nicht. Und der ganze Prozess birgt viel Potential für Datenwettläufe, wenn man ihn auf zwölf CPU-Cores 100 Mal pro Sekunde durchführt!

Perl direkt

In die Entwicklungsversion meines Optimizers habe ich nun Strawberry Perl als portable Perl-Laufzeitumgebung eingebunden. Anstelle der „vorkompilierten“ ExifTool-Executable liegt nun direkt der Perl-Quelltext bei. Die Aufrufe ExifTool -foo -bar habe ich durch perl.exe exiftool -foo -bar ersetzt (plus die nötigen Absicherungen gegen Directory Planting Attacks).

Damit entfällt das Extrahieren der Perl-Laufzeitumgebung etliche Mal pro Sekunde, und die JPEG-Optimierung ist spürbar schneller. Die Setups sind deutlich kleiner, weil ich Strawberry Perl auf das für ExifTool nötige zurechtstutzen konnte. (Aus irgendeinem Grund ist die 32-Bit-Version von Strawberry Perl größer als die 64-Bit-Version. Wetten, dass sie ihre Compiler-Flags verkackt haben?)

Ein Manko ist die Wartung der Setups – statt 15 Dateien muss ich nun über 200 installieren. Bei regelmäßigen Aktualisierungen von ExifTool werden sicher noch mehr dazukommen. Vielleicht lässt sich da auch noch was reduzieren …

Ausblick

Ich bin recht optimistisch, dass es die Verbesserung ins nächste Release schafft. Ihr seht: Wer den Dingen auf den Grund geht, findet immer irgendwo eine Schaufel Bloat!

Edit: ExifTool hat vor kurzem angefangen, aus ganz genau diesem Grund auf einen alternativen Installer zu verweisen.
exiftool.org hat geschrieben:Note: Oliver Betz provides an alternate ExifTool Windows installer that avoids some problems of the self-extracting archive version above.
Hier gibt es eine Liste der bekannten Probleme mit ExifTools Perl-Packer.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
udok
Beiträge: 18
Registriert: 01.02.2022, 17:34

Re: Mein Dateioptimierungstool

Beitrag von udok »

Danke für das super Tool! Ich habe es natürlich ohne das Help zu lesen einfach mal gestartet, den Pfad zu meinen Fotos (blöd, ich weiß) angegeben, und ziemlich geschaut, als das Tool einfach so anfing alles zu komprimieren. Ich bin da zumindest einen Button "Leg los" gewohnt.
Aber abgesehen von der Überraschung hat er die Bilder zwischen 50 und 5% komprimiert. Alle Achtung!
udok
Beiträge: 18
Registriert: 01.02.2022, 17:34

Re: Mein Dateioptimierungstool

Beitrag von udok »

Noch was: Ich bekomme ziemlich viele Fehler von ExifTool: "Error: cannot optimize thumbnail".
Keine Ahnung was der meint, das File ist sicher kein Thumbnail... sondern kommt vom Smartphone. Irfanview macht es auch ohne Probleme auf.
Im Log File steht:

Code: Alles auswählen

==== launching: ====
ExifTool.exe -all= -adobe:all= -exif:all= -charset filename=UTF8 -@ "C:\Users\Udo\AppData\Local\Temp\papa3ED23778\thumbnail\exif2.args"
Error while attempting to call Image::ExifTool::SetNewValue
Can't find string terminator "'" anywhere before EOF at Image/ExifTool/TagLookup.pm line 2217.
Compilation failed in require at C:\Users\Udo\AppData\Local\Temp\par-55646f\cache-exiftool-12.03\inc\lib/Image/ExifTool/Writer.pl line 17.
BEGIN failed--compilation aborted at C:\Users\Udo\AppData\Local\Temp\par-55646f\cache-exiftool-12.03\inc\lib/Image/ExifTool/Writer.pl line 17.
Compilation failed in require at Image/ExifTool.pm line 4558.
udok
Beiträge: 18
Registriert: 01.02.2022, 17:34

Re: Mein Dateioptimierungstool

Beitrag von udok »

Ich habe das Tool laufen lassen, und bin nach >1 Stunde wiedergekommen. Das Tool optimiert seit über 5300 Sekunden an einem 37kByte grossem Gif File... und braucht laut Anzeige noch mal 5800 Sekunden bis es fertig wird... ich habe das gif angehängt.
6130244258f180cad77b8b.gif
Im Log steht:

Code: Alles auswählen

launching …

==== launching: ====
Gifsicle.exe --optimize=3 --no-comments --no-extensions -o "C:\Users\Udo\AppData\Local\Temp\papa8488EE4B\b.gif" "C:\Users\Udo\AppData\Local\Temp\papa8488EE4B\a.gif"

exit code 00000000

==== launching: ====
flexiGIF.exe -f -p -a=1 -y "C:\Users\Udo\AppData\Local\Temp\papa8488EE4B\b.gif" "C:\Users\Udo\AppData\Local\Temp\papa8488EE4B\a.gif"
...
...
...
udok
Beiträge: 18
Registriert: 01.02.2022, 17:34

Re: Mein Dateioptimierungstool

Beitrag von udok »

Dann habe ich noch einen Exit Code C0000005 im Bildchen:
cloud_64.png
cloud_64.png (8 KiB) 367 mal betrachtet
Log sagt:

Code: Alles auswählen

launching …

==== launching: ====
ECT_x64.exe -30060 --allfilters-b --pal_sort=120 --strict "C:\Users\Udo\AppData\Local\Temp\papa8605AEEF\x.png"

exit code C0000005
Benutzeravatar
Krishty
Establishment
Beiträge: 7852
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Mein Dateioptimierungstool

Beitrag von Krishty »

udok hat geschrieben: 03.09.2022, 16:45und ziemlich geschaut, als das Tool einfach so anfing alles zu komprimieren. Ich bin da zumindest einen Button "Leg los" gewohnt.
Hehe, ja. Rechts unten kannst du die Anzahl paralleler Jobs auswählen – bei 0 tut er nix und legt erst los, wenn du was Höheres auswählst. Ist ganz praktisch, wenn man erstmal einen Überblick bekommen will, bevor was optimiert wird.
udok hat geschrieben: 03.09.2022, 17:00 Noch was: Ich bekomme ziemlich viele Fehler von ExifTool: "Error: cannot optimize thumbnail".
Keine Ahnung was der meint, das File ist sicher kein Thumbnail... sondern kommt vom Smartphone. Irfanview macht es auch ohne Probleme auf.
Im Log File steht:

Code: Alles auswählen

==== launching: ====
ExifTool.exe -all= -adobe:all= -exif:all= -charset filename=UTF8 -@ "C:\Users\Udo\AppData\Local\Temp\papa3ED23778\thumbnail\exif2.args"
Error while attempting to call Image::ExifTool::SetNewValue
Can't find string terminator "'" anywhere before EOF at Image/ExifTool/TagLookup.pm line 2217.
Compilation failed in require at C:\Users\Udo\AppData\Local\Temp\par-55646f\cache-exiftool-12.03\inc\lib/Image/ExifTool/Writer.pl line 17.
BEGIN failed--compilation aborted at C:\Users\Udo\AppData\Local\Temp\par-55646f\cache-exiftool-12.03\inc\lib/Image/ExifTool/Writer.pl line 17.
Compilation failed in require at Image/ExifTool.pm line 4558.
Sehr interessant! Mit Thumbnail ist das Vorschaubild gemeint, das im Bild steckt – ein JPG im JPG. Machen viele Smartphones. Das wird ebenfalls optimiert. Offensichtlich geht dabei etwas schief, und es scheint an ExifTool selber zu liegen?! Falls das Bild nix Privates ist, kannst du es an krishty@krishty.com mailen, dann prüfe ich, ob das Problem in meiner neuen Version behoben ist (oder zumindest genauer analysiert werden kann).
Das Tool optimiert seit über 5300 Sekunden an einem 37kByte grossem Gif File... und braucht laut Anzeige noch mal 5800 Sekunden bis es fertig wird...
Ja; GIF-Optimierung ist quälend langsam. Es gibt schnellere Programme, aber die quetschen halt nicht das Optimum raus. Tipp: Falls dir für dieses Bild egal ist, ob es als GIF oder PNG vorliegt, kannst du in den GIF-Optionen die automatische Konvertierung zu PNG aktivieren. Damit dürfte die Datei kleiner werden und sogar ein Bisschen schneller optimieren (wenngleich immernoch quälend langsam). Die Dateierweiterung wird allerdings GIF bleiben, um solche Fälle abzudecken wie, dass das Bild von einer HTML-Seite referenziert wird usw.
udok hat geschrieben: 03.09.2022, 18:48Dann habe ich noch einen Exit Code C0000005 im Bildchen:
Großartig! Du hast einen Absturz in ECT gefunden. Ich melde das direkt.

Du kannst ihn umgehen, indem du in den PNG-Optionen Delete metadata aktivierst.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
udok
Beiträge: 18
Registriert: 01.02.2022, 17:34

Re: Mein Dateioptimierungstool

Beitrag von udok »

Die Erklärungen leuchten ein...

Ich würde eine Abfrage einbauen, wenn das Tool > 10 Minuten an einem Bild werkelt wird der Prozess gekillt.

Ich habe zwei Bilder wo die Probleme auftreten hier gepostet. Der Schaltplan und die Wolke, ich hoffe die Foren SW verändert die nicht... sonst schicke ich sie dir per Email.
Benutzeravatar
Krishty
Establishment
Beiträge: 7852
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Mein Dateioptimierungstool

Beitrag von Krishty »

udok hat geschrieben: 04.09.2022, 19:14Ich würde eine Abfrage einbauen, wenn das Tool > 10 Minuten an einem Bild werkelt wird der Prozess gekillt.
Nee, es ist schon beabsichtigt, dass man es länger im Hintergrund laufen lässt. Wenn’s zeitkritisch ist, setzt man eh was anderes ein :P
Ich habe zwei Bilder wo die Probleme auftreten hier gepostet. Der Schaltplan und die Wolke, ich hoffe die Foren SW verändert die nicht... sonst schicke ich sie dir per Email.
Neinein, das JPEG mit den Thumbnail-Problemen fehlt!
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
udok
Beiträge: 18
Registriert: 01.02.2022, 17:34

Re: Mein Dateioptimierungstool

Beitrag von udok »

Ich habe es dir per Email geschickt.
Was mir jetzt noch aufgefallen ist: Wenn ich das Tool zumache, laufen die Prozesse im Hintergrund weiter (stundenlang). Ich muss sie händisch killen,
am Laptop nervt der Lüfter schon ziemlich.
Benutzeravatar
Krishty
Establishment
Beiträge: 7852
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Mein Dateioptimierungstool

Beitrag von Krishty »

Danke!
udok hat geschrieben: 07.09.2022, 08:31Was mir jetzt noch aufgefallen ist: Wenn ich das Tool zumache, laufen die Prozesse im Hintergrund weiter (stundenlang). Ich muss sie händisch killen, am Laptop nervt der Lüfter schon ziemlich.
Das darf nicht sein; ich schau’s mir an!
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Antworten