Comment obtenir la meilleure compression ZIP standard?

20

Peu m'importe le temps qu'il faut pour compresser, tout ce que je veux réaliser, c'est deux choses:

  • Le meilleur taux de compression possible
  • Compatibilité avec les lecteurs standard, tels que Windows et WinZip

Ainsi, des suggestions telles que 7-zip ne seront pas très utiles, à moins que 7-zip soit également légèrement meilleur à la compression ZIP standard (par opposition à l'utilisation de son très bon format .7z).

Idéalement, je recherche:

  • Une recommandation d'un logiciel
  • Les paramètres particuliers de ce logiciel qui permettent la meilleure compression absolue
  • Quelque chose de gratuit

N'oubliez pas que le temps de compression n'est pas un problème!

Une dernière chose - certains fichiers pourraient être mieux compressés avec des paramètres différents, comme la "taille du mot" ou la "taille du dictionnaire" - existe-t-il un outil qui peut analyser les fichiers et choisir le taux de compression le plus approprié, ou WinZip, 7-zip etc. déjà faire ça?

Josh Comley
la source

Réponses:

20

Si vous souhaitez une compatibilité avec la fonction Zip Folders intégrée à Windows XP, vous êtes bloqué avec la compression Deflate. Je ne pense pas que vous puissiez même utiliser Deflate64, encore moins les méthodes de compression avancées (comme LZMA, PPMD, WavPack, Bzip2, etc.) disponibles dans les versions récentes de winZip et PowerArchiver. PowerArchiver utilise au moins par défaut l'extension .zipx pour ces fichiers - je ne pense pas que WinZip le fasse encore.

Le plus petit fichier zip possible que 7-Zip peut créer peut être fait avec la ligne de commande suivante:

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

À noter: l'analyseur générique de 7-Zip n'est pas le même que la plupart des autres sur le système. *.*signifie tous les fichiers qui ont des extensions. *signifie tous les fichiers.

La création de fichiers .zip de cette façon (et, vraisemblablement, en utilisant d'autres outils qui tentent de créer des fichiers .zip "standard" plus petits) est vraiment très lente. Vous économiserez probablement beaucoup de temps et d'espace en utilisant 7-Zip ou WinRar pour créer des archives auto-extractibles.

afrazier
la source
Mon erreur 7z sur "-m0" mais je suppose que "-mm" fait de même avec les versions récentes. J'ai également remarqué que, dans mon cas (compression de fichiers JPG), en utilisant "-mx9" au lieu de "-mfb = 258 -mpass = 15" le résultat différera aléatoirement de ± 15 octets en moyenne (avec des exceptions allant dans les ± 50s )
Mark Jeronimus
1
@ Zom-B: Vous avez raison, qui aurait dû être au -mm=lieu de -m0=. -m0=est utilisé sur les .7zarchives. De plus, le manuel 7-Zip spécifie que -mx=9pour les archives Zip est équivalent à -mfb=128 -mpass=10. Ce que j'ai remarqué, c'est que -mfb=258 -mpass=15c'est toujours beaucoup plus lent que -mx=9et souvent ne économise pas beaucoup d'espace du tout (ou utilise parfois quelques octets de plus). De temps en temps, il économise un peu d'espace décent.
afrazier
"beaucoup" plus lent dans le commentaire précédent se traduit par un peu plus de 3 fois plus lent. quant à l'espace, l'option plus lente donne des archives d'env. Taille de 99,885% par rapport à la version plus rapide (ie -mx = 9 sans -mpass = 15). Ainsi, pendant 3 fois plus de temps, on ne peut économiser que 0,115% d'espace. Donc, à moins que ce gain de 0,115% ne soit très important, optez pour -mx = 9 au lieu de -mpass = 15.
TV
8

Les meilleurs compresseurs de dégonflage (le format de compression utilisé par les ZIP standard) que je connais sont:

Dégonflez la comparaison de taille de fichier compressé à partir de la compression de données à l'aide de Zopfli (archivé de l' original ):

╔══════════════╦═══════════╦═════════╦═════════╦═════════╦═════════╗
║              ║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║
╚══════════════╩═══════════╩═════════╩═════════╩═════════╩═════════╝

Même sur des PNG aléatoires, Zopfli a pu être 0,5% meilleur que pngout . Zopfli fait le plus petit de tous.

Anon
la source
Comment puis-je utiliser Zopfli pour compresser un ensemble de fichiers, comme avec la commande zip d'origine?
Panayotis
1
@Panayotis Une recherche Google pour zopfli zip mène à github.com/google/zopfli/issues/29 qui explique comment le projet zopfli ne fera pas directement les fichiers Zip mais inclut une discussion sur des outils comme advzip d'AdvanceCOMP qui peut utiliser zopfli comme backend .
Anon
5

En supposant que vous êtes sous Windows: si vous souhaitez toujours utiliser le format ZIP, je vous recommande d'utiliser l'utilitaire de ligne de commande KZIP gratuit de Ken Silverman, que vous trouverez ici . Copiez-le dans le dossier contenant tous les fichiers que vous devez compresser, accédez à ce dossier à l'aide de CMD et exécutez la commande suivante:

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

Comme le suggère Roald, il est préférable d'inclure le répertoire où kzip.exeréside la variable PATH de votre système pour éviter qu'il ne soit inclus dans le fichier archive / Zip.

Jusqu'à présent, j'ai trouvé que les fichiers ZIP créés avec KZIP étaient environ 10 à 20% plus petits que ceux créés par d'autres programmes de compression ZIP. Ils sont également entièrement ouverts par d'autres logiciels d'archivage (Winzip, WinRAR, 7-zip, etc.) et par Windows.

Isxek
la source
5
Que diriez-vous de ne pas le mettre dans ce répertoire mais quelque part sur le CHEMIN de votre système?
RD
1
J'avais la même exigence - doit être pris en charge par la fonctionnalité ZIP standard de Windows. KZIP est ce que j'ai fini par utiliser car il fonctionnait comme un champion. Assurez-vous de jouer avec les options / s / b / n pour avoir une bonne idée de ce qui fonctionne le mieux dans votre environnement.
Goyuix
Bien sûr! La variable PATH. J'ai édité ma réponse. Merci Roald!
Isxek
ou
préfixez
1

Script très simple pour compresser tous les dossiers d'un dossier en fichiers zip individuels à l'aide du type de fichier .zip et d'une méthode de compression Deflate64.

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

C'est plus une limite de la quantité de mémoire que vous devez mettre à la disposition du compresseur pendant qu'il fait son travail. En utilisant 7-Zip, j'emballerais une archive au format .Zip, Ultra compression, méthode de compression LZMA et la taille de dictionnaire par défaut de 64 Mo. Si vous avez la mémoire disponible, augmentez la taille du dictionnaire, mais notez que vous aurez besoin de près de 3 Go de mémoire disponible pour compresser avec un dictionnaire de 64 Mo. L'utilisation d'un dictionnaire plus grand devrait permettre à 7-zip de rechercher plus de correspondances et de fournir une meilleure compression si vous pouvez vous permettre la mémoire. LZMA bat à la fois gzip (deflate / deflate64, je pense) et bzip2 par un bon 5% en moyenne, jusqu'à 10-12% selon le contenu.

Je ne connais pas d'outil pour trouver la meilleure taille de mot / dictionnaire, bien que je pense que vous trouverez que la méthode de compression a une corrélation plus forte avec les données d'entrée, et la moyenne / valeurs par défaut devrait être bonne sinon.

Dark Android
la source
3
J'ai des problèmes avec LZMA - par exemple, quels que soient les paramètres que j'essaie dans 7zip, le fichier texte dans ce zip ( joshz.com/Bad.zip ) ne décompressera pas en utilisant le décompresseur intégré de Windows (j'utilise Windows sept).
Josh Comley
(le fichier zip auquel j'ai lié contient le fichier erroné pour référence, mais n'a pas été compressé avec LZMA)
Josh Comley
@joshcomley Je n'ai pas pu trouver une liste des schémas de compression pris en charge pour l'outil de compression de dossier Windows intégré. Selon Wikipedia pour LZMA, il est pris en charge par WinZip et de nombreux autres outils de compression sur différentes plates-formes, j'ai donc choisi de l'accompagner. * .zip n'est qu'un format de conteneur, donc je ne sais pas s'il existe une compression «officielle» que les outils prendront en charge, ou tout simplement commune (similaire à la façon dont * .avi peut contenir presque n'importe quel type de vidéo). Si vous devez vous assurer qu'il fonctionne toujours, emballez-le comme auto-extractible.
Dark Android
-3

Si vous recherchez le meilleur compresseur pour les environnements Windows , je vous recommande d'essayer le format * .zip avec la méthode de compression LZMA 7-zip OU utilisez les archives SFX 7-Zip * .7z. Les archives SFX ont une surcharge d'environ 130 ko sur des fichiers compressés .7z et valent la peine d'être utilisées lorsque la différence de taille entre .7z et .zip est importante.

Un autre concurrent bon mais rare est le NSIS qui peut utiliser le mode de compression LZMA pour créer des exes hautement personnalisables. Je sais que NSIS n'est pas un compresseur mais un langage de script mais j'ai été impressionné qu'il fonctionnait mieux que SFX 7-zip.

Un test que j'ai fait avec 2 fichiers -

  • AutoHotkey-H.exe (946 ko)
  • AutoHotkey.dll (1003 ko)
  • Taille totale - 1955 kb

  • 7-Zip .zip - 794 ko
  • 7-Zip .7z SFX - 594 ko
  • Compression solide NSIS LZMA - 552 ko
  • 7-Zip .7z - 461 ko

Comme le n ° 4 n'est pas ce que vous voulez, le gagnant est clairement NSIS, mais pour des raisons pratiques, je suggère d'utiliser le .zip si la taille compressée est inférieure à 500 kbs et s'il est plus grand, optez pour un outil de création d'exe tel que SFX 7-Zip ou NSIS (7-zip en particulier car il est facile à installer).

Avi
la source
2
Les exigences de la question excluent spécifiquement le 7z et les autres formats.
Bob
@Bob Il a dit qu'un compresseur compatible avec Windows et exe (mes # 2 et # 3) l'est. Le 7z n'est que le # 4 que j'ai souligné.
Avi