Wie kann ich die beste Standard-ZIP-Komprimierung erzielen?

20

Es ist mir egal, wie lange das Komprimieren dauert, ich möchte nur zwei Dinge erreichen:

  • Das absolut bestmögliche Kompressionsverhältnis
  • Kompatibilität mit Standardlesern wie Windows und WinZip

Vorschläge wie 7-zip sind daher nicht besonders nützlich, es sei denn, 7-zip ist bei der Standard-ZIP-Komprimierung ebenfalls etwas besser (im Gegensatz zur Verwendung des sehr guten .7z-Formats).

Idealerweise suche ich:

  • Eine Empfehlung für eine Software
  • Die speziellen Einstellungen für diese Software, die die absolut beste Komprimierung ermöglichen
  • Etwas, das kostenlos ist

Denken Sie daran, wie lange es dauert, um zu komprimieren, ist kein Problem!

Eine letzte Sache - einige Dateien könnten besser mit unterschiedlichen Einstellungen komprimiert werden, wie der "Wortgröße" oder "Wörterbuchgröße" - gibt es ein Tool, das die Dateien analysieren und das am besten geeignete Komprimierungsverhältnis auswählen kann, oder WinZip, 7-zip usw. schon machen?

Josh Comley
quelle

Antworten:

20

Wenn Sie Kompatibilität mit den in Windows XP integrierten Funktionen für Zip-Ordner wünschen, bleibt die Deflate-Komprimierung erhalten. Ich glaube nicht, dass Sie Deflate64 verwenden können, geschweige denn die erweiterten Komprimierungsmethoden (wie LZMA, PPMD, WavPack, Bzip2 usw.), die in neueren Versionen von winZip und PowerArchiver verfügbar sind. PowerArchiver verwendet zumindest standardmäßig die Erweiterung .zipx für diese Dateien - ich glaube, WinZip macht das noch nicht.

Die kleinstmögliche Zip-Datei, die 7-Zip erstellen kann, kann mit der folgenden Befehlszeile erstellt werden:

7za a -mm=Deflate -mfb=258 -mpass=15 -r C:\Path\To\Archive.zip C:\Path\To\Files\*

Besonderer Hinweis: Der Wildcard-Parser von 7-Zip ist nicht mit den meisten anderen im System identisch. *.*bedeutet alle Dateien, die Erweiterungen haben. *bedeutet alle Dateien.

Das Erstellen von .zip-Dateien auf diese Weise (und vermutlich mit anderen Tools, die versuchen, kleinere "Standard" -Zip-Dateien zu erstellen) ist sehr, sehr langsam. Sie würden höchstwahrscheinlich viel Zeit und Platz sparen, wenn Sie mit 7-Zip oder WinRar selbstextrahierende Archive erstellen würden.

afrazier
quelle
Meine 7z error'd auf "-m0", aber ich denke, "-mm" macht das gleiche mit den neuesten Versionen. Mir ist auch aufgefallen, dass in meinem Fall (beim Komprimieren von JPG-Dateien) die Verwendung von "-mx9" anstelle von "-mfb = 258 -mpass = 15" zu einer zufälligen Abweichung von durchschnittlich ± 15 Byte führt (mit Ausnahmen in den ± 50er Jahren) )
Mark Jeronimus
1
@ Zom-B: Du hast recht, das hätte -mm=statt sein sollen -m0=. -m0=wird für .7zArchive verwendet. Das 7-Zip-Handbuch gibt außerdem an, dass -mx=9für Zip-Archive dasselbe gilt wie -mfb=128 -mpass=10. Was mir aufgefallen ist, ist, dass -mfb=258 -mpass=15es immer viel langsamer ist als -mx=9und oft nicht viel Platz spart (oder gelegentlich ein paar Bytes mehr benötigt). Hin und wieder spart es ein gutes Stück Platz.
afrazier
"viel" langsamer im vorherigen Kommentar bedeutet etwas mehr als dreimal langsamer. Was den Platz betrifft, ergibt die langsamere Option ein Archiv von rd. 99,885% Größe im Vergleich zur schnelleren (dh -mx = 9 ohne -mpass = 15) Version. So kann man für dreimal mehr Zeit nur 0,115% des Platzes einsparen. Also, wenn diese 0,115% Verstärkung nicht sehr wichtig ist, wählen Sie -mx = 9 anstelle von -mpass = 15.
TV
8

Die besten Deflate-Kompressoren (das von Standard-ZIP-Kompressoren verwendete Komprimierungsformat), die ich kenne, sind:

Vergleich der Dateigröße mit komprimierter Datei aus der Datenkomprimierung mit Zopfli (vom Original archiviert ) entfernen :

╔══════════════╦═══════════╦═════════╦═════════╦═════════╦═════════╗
║              ║Corpus size║gzip ­-9  ║7-­zip    ║kzip     ║Zopfli   ║
╠══════════════╬═══════════╬═════════╬═════════╬═════════╬═════════╣
║Alexa-top-10k ║  693108837║128498665║125599259║125163521║123755118║
║Calgary       ║    3141622║  1017624║   980674║   978993║   974579║
║Canterbury    ║    2818976║   730732║   675163║   674321║   669933║
║enwik8        ║  100000000║ 36445248║ 35102976║ 35025767║ 34995756║
╚══════════════╩═══════════╩═════════╩═════════╩═════════╩═════════╝

Selbst bei zufälligen PNGs konnte Zopfli 0,5% besser sein als pngout . Zopfli macht das kleinste von allen.

Anon
quelle
Wie kann ich Zopfli verwenden, um eine Reihe von Dateien wie mit dem ursprünglichen zip-Befehl zu komprimieren?
Panayotis
1
@Panayotis Eine Google- Suche nach zopfli zip führt zu github.com/google/zopfli/issues/29 , in dem erläutert wird, wie das zopfli-Projekt Zip-Dateien nicht direkt verarbeitet, sondern Tools wie AdvanceCOMPs advzip erläutert werden, die zopfli als Backend verwenden können .
Anon
5

Angenommen, Sie arbeiten unter Windows: Wenn Sie weiterhin das ZIP-Format verwenden möchten, würde ich die Verwendung des kostenlosen KZIP-Befehlszeilendienstprogramms von Ken Silverman empfehlen, das Sie hier finden . Kopieren Sie es in den Ordner, der alle zu komprimierenden Dateien enthält, wechseln Sie mit CMD in diesen Ordner und führen Sie den folgenden Befehl aus:

kzip /r <filename of ZIP file> *.*

Wie Roald vorschlägt, ist es am besten, das Verzeichnis kzip.exein die PATH-Variable Ihres Systems aufzunehmen, um zu verhindern, dass es in die Datei archive / zip aufgenommen wird.

Bisher habe ich festgestellt, dass die mit KZIP erstellten ZIP-Dateien etwa 10-20% kleiner sind als die, die mit anderen ZIP-Komprimierungsprogrammen erstellt wurden. Sie können auch von anderen Archivsoftware (Winzip, WinRAR, 7-zip usw.) und von Windows vollständig geöffnet werden.

Isxek
quelle
5
Was ist, wenn Sie es nicht in dieses Verzeichnis, sondern irgendwo auf dem Pfad Ihres Systems ablegen?
RD
1
Ich hatte die gleiche Anforderung - muss von Windows-Standard-ZIP-Funktionalität unterstützt werden. KZIP habe ich letztendlich benutzt, weil es wie ein Champion funktioniert hat. Spielen Sie unbedingt mit den Optionen / s / b / n, um eine gute Vorstellung davon zu bekommen, was in Ihrer Umgebung am besten funktioniert.
Goyuix
Na sicher! Die PATH-Variable. Ich habe meine Antwort bearbeitet. Vielen Dank, Roald!
Isxek
oder stellen Sie dem Befehl einfach den Pfad der ausführbaren Datei
voran
1

Super einfaches Skript zum Komprimieren aller Ordner in einem Ordner in einzelne ZIP-Dateien mithilfe des Dateityps .zip und einer Deflate64-Komprimierungsmethode.

@echo off
for /d %%X in (*) do "c:\Program Files\7-Zip\7z.exe" a "%%X.zip" "%%X\" -tzip -mx9 -mm=Deflate64
SuperMar1o
quelle
-1

Es ist eher eine Begrenzung, wie viel Speicher Sie dem Kompressor zur Verfügung stellen müssen, während er seine Arbeit erledigt. Mit 7-Zip packe ich ein Archiv mit dem ZIP-Format, der Ultra-Komprimierung, der LZMA-Komprimierungsmethode und der Standardgröße von 64 MB. Wenn Sie über den verfügbaren Speicher verfügen, erhöhen Sie die Größe des Wörterbuchs. Beachten Sie jedoch, dass für die Komprimierung mit einem 64-MB-Wörterbuch fast 3 GB Speicher erforderlich sind. Die Verwendung eines größeren Wörterbuchs sollte es 7-zip ermöglichen, nach mehr Übereinstimmungen zu suchen und eine bessere Komprimierung zu erzielen, wenn Sie sich den Speicher leisten können. LZMA schlägt sowohl gzip (deflate / deflate64, glaube ich) als auch bzip2 im Durchschnitt um gut 5%, je nach Inhalt bis zu 10-12%.

Ich kenne kein Werkzeug, um die beste Wort- / Wörterbuchgröße zu finden, obwohl ich denke, dass die Komprimierungsmethode eine stärkere Korrelation mit den Eingabedaten aufweist und der Durchschnitt / die Standardwerte ansonsten gut sein sollten.

Darth Android
quelle
3
Ich habe einige Probleme mit LZMA - zum Beispiel, egal welche Einstellungen ich in 7zip versuche, wird die Textdatei in dieser ZIP-Datei ( joshz.com/Bad.zip ) nicht mit dem in Windows integrierten Dekomprimierer dekomprimiert (ich verwende Windows) 7).
Josh Comley
(Die Zip-Datei, mit der ich verlinkt habe, enthält die fehlerhafte Datei als Referenz, wurde jedoch nicht mit LZMA komprimiert)
Josh Comley
@ Joshcomley Ich konnte keine Liste der unterstützten Komprimierungsschemata für das integrierte Windows-Ordnerkomprimierungsprogramm finden. Nach Angaben der Wikipedia für LZMA, es wird durch WinZip und viele andere Komprimierungstools über verschiedene Plattformen unterstützt, so dass ich mit ihm zu gehen gewählt. * .zip ist nur ein Containerformat, daher weiß ich nicht, ob es eine "offizielle" Komprimierung gibt, die von den Tools unterstützt wird. Wenn Sie sicherstellen möchten, dass es immer funktioniert, packen Sie es als selbstextrahierend.
Darth Android
-3

Wenn Sie nach dem besten Kompressor für Windows-Umgebungen suchen , empfehle ich Ihnen, entweder das * .zip-Format mit der LZMA -Komprimierungsmethode 7-zip oder die SFX-Archive 7-zip * .7z zu verwenden. SFX-Archive haben einen Overhead von ca. 130 KB bei komprimierten .7z-Dateien und sollten verwendet werden, wenn der Größenunterschied zwischen .7z und .zip groß ist.

Ein anderer guter, aber ungewöhnlicher Konkurrent ist das NSIS, das den LZMA-Komprimierungsmodus verwenden kann, um hochgradig anpassbare Exes zu erstellen. Ich weiß, dass NSIS kein Kompressor, sondern eine Skriptsprache ist, aber ich war beeindruckt, dass es eine bessere Leistung als 7-Zip-SFX bietet.

Ein Test, den ich mit 2 Dateien gemacht habe -

  • AutoHotkey-H.exe (946 kb)
  • AutoHotkey.dll (1003 kb)
  • Gesamtgröße - 1955 kb

  • 7-Zip .zip - 794 kb
  • 7-Zip .7z SFX - 594 kb
  • NSIS LZMA Solid Compression - 552 kb
  • 7-Zip .7z - 461 kb

Da # 4 nicht das ist, was Sie wollen, ist NSIS der klare Gewinner, aber aus praktischen Gründen schlage ich vor, dass die komprimierte Größe von .zip weniger als 500 kbs beträgt NSIS (insbesondere 7-Zip, da einfach einzurichten).

Avi
quelle
2
Die Anforderungen in der Frage schließen speziell 7z und andere Formate aus.
Bob
@ Bob Er sagte, ein Kompressor, der mit Windows und Exe kompatibel ist (meine # 2 und # 3) ist. Die 7z ist nur die Nummer 4, auf die ich hingewiesen habe.
Avi