¿Cómo puedo lograr la mejor compresión ZIP estándar?


20

No me importa cuánto tiempo tome comprimir, todo lo que quiero lograr es dos cosas:

  • La mejor relación de compresión absoluta posible
  • Compatibilidad con lectores estándar, como Windows y WinZip

Por lo tanto, sugerencias como 7-zip no serán de mucha utilidad, a menos que 7-zip también sea un poco mejor en la compresión ZIP estándar (en lugar de usar su muy buen formato .7z).

Idealmente estoy buscando:

  • Una recomendación de un software
  • Las configuraciones particulares para ese software que permiten la mejor compresión absoluta
  • Algo que es gratis

Recuerde, ¡cuánto tiempo toma comprimir no es un problema!

Una última cosa, algunos archivos pueden estar mejor comprimidos con diferentes configuraciones, como "Tamaño de palabra" o "Tamaño de diccionario", ¿hay alguna herramienta que pueda analizar los archivos y elegir la relación de compresión más adecuada, o WinZip, 7-zip etc. ya haces eso?

Respuestas:


20

Si desea compatibilidad con la capacidad de Carpetas Zip integradas en Windows XP, está atascado con la compresión Deflate. No creo que pueda usar Deflate64, mucho menos los métodos de compresión avanzados (como LZMA, PPMD, WavPack, Bzip2, etc.) disponibles en versiones recientes de winZip y PowerArchiver. PowerArchiver al menos usa de manera predeterminada la extensión .zipx para esos archivos; no creo que WinZip lo esté haciendo todavía.

El archivo zip más pequeño posible que 7-Zip puede crear se puede hacer con la siguiente línea de comando:

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

De particular interés: el analizador comodín de 7-Zip no es el mismo que la mayoría de los demás en el sistema. *.*significa todos los archivos que tienen extensiones. *significa todos los archivos.

Crear archivos .zip de esta manera (y, presumiblemente, usar otras herramientas que intentan crear archivos .zip "estándar" más pequeños) es muy, muy lento. Lo más probable es que ahorre tiempo y espacio considerables utilizando 7-Zip o WinRar para crear archivos autoextraíbles.


Mi error 7z en "-m0" pero supongo que "-mm" hace lo mismo con las versiones recientes. También noté que, en mi caso (comprimiendo archivos JPG), usando "-mx9" en lugar de "-mfb = 258 -mpass = 15" el resultado diferirá aleatoriamente en ± 15 bytes en promedio (con excepciones en los ± 50s )
Mark Jeronimus

1
@ Zom-B: Tienes razón, eso debería haber sido en -mm=lugar de -m0=. -m0=se usa en .7zarchivos. Además, el manual de 7-Zip especifica que -mx=9para los archivos Zip es equivalente a -mfb=128 -mpass=10. Lo que he notado es que -mfb=258 -mpass=15siempre es mucho más lento -mx=9y a menudo no ahorra mucho espacio (u ocasionalmente usa algunos bytes más). De vez en cuando ahorra un poco de espacio decente.
Afrazier

"mucho" más lento en el comentario anterior se traduce en algo más de 3 veces más lento. En cuanto al espacio, la opción más lenta da un archivo de aprox. 99.885% de tamaño en comparación con la versión más rápida (es decir, -mx = 9 sin -mpass = 15). Entonces, por 3 veces más tiempo, uno puede ahorrar solo 0.115% de espacio. Entonces, a menos que esa ganancia de 0.115% sea muy importante, elija -mx = 9 en lugar de -mpass = 15.
TV

8

Los mejores compresores desinflados (el formato de compresión utilizado por ZIP estándar) que conozco son:

Defla la comparación del tamaño de archivo comprimido del archivo de compresión de datos usando Zopfli (archivado del 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║
╚══════════════╩═══════════╩═════════╩═════════╩═════════╩═════════╝

Incluso en PNG aleatorios, Zopfli pudo ser 0.5% mejor que pngout . Zopfli hace el más pequeño de todos.


¿Cómo puedo usar Zopfli para comprimir un conjunto de archivos, como con el comando zip original?
Panayotis

1
@Panayotis Una búsqueda en Google de zopfli zip lleva a github.com/google/zopfli/issues/29 que habla sobre cómo el proyecto zopfli no hará archivos Zip directamente, pero incluye la discusión de herramientas como el advzip de AdvanceCOMP que puede usar zopfli como backend .
Anon

5

Suponiendo que está en Windows: si aún desea usar el formato ZIP, recomendaría usar la utilidad de línea de comandos KZIP gratuita de Ken Silverman, que se encuentra aquí . Cópielo dentro de la carpeta que contiene todos los archivos que necesita comprimir, vaya a esa carpeta con CMD y ejecute el siguiente comando:

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

Como sugiere Roald, es mejor incluir el directorio donde kzip.exereside en la variable PATH de su sistema para evitar que se incluya en el archivo / archivo Zip.

Hasta ahora, he encontrado que los archivos ZIP creados con KZIP son alrededor de 10-20% más pequeños que los creados por otros programas de compresión ZIP. También se pueden abrir completamente con otro software de archivo (Winzip, WinRAR, 7-zip, etc.) y con Windows.


55
¿Qué pasa con no ponerlo en ese directorio sino en algún lugar de la RUTA de su sistema?
RD

1
Tenía el mismo requisito: debe ser compatible con la funcionalidad ZIP estándar de Windows. KZIP es lo que terminé usando, ya que funcionó como un campeón. Asegúrese de jugar con las opciones / s / b / n para tener una buena idea de lo que funciona mejor en su entorno.
Goyuix

¡Por supuesto! La variable PATH. He editado mi respuesta. Gracias Roald!
Isxek

o simplemente prefija el comando con la ruta del ejecutable
micsthepick

1

Script súper simple para comprimir todas las carpetas de una carpeta en archivos zip individuales usando el tipo de archivo .zip y un método de compresión Deflate64.

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

-1

Es más un límite de la cantidad de memoria que tiene que poner a disposición del compresor mientras hace su trabajo. Usando 7-Zip, empacaría un archivo con formato .Zip, Ultra compresión, método de compresión LZMA y el tamaño de diccionario predeterminado de 64 MB. Si tiene la memoria disponible, aumente el tamaño del diccionario, aunque tenga en cuenta que necesitará casi 3 GB de memoria disponible para comprimir con un diccionario de 64 MB. El uso de un diccionario más grande debería permitir que 7-zip busque más coincidencias y proporcionar una mejor compresión si puede permitirse el lujo de la memoria. LZMA supera a gzip (deflate / deflate64, creo) y bzip2 en un buen 5% en promedio, hasta 10-12% dependiendo del contenido.

No conozco una herramienta para encontrar el mejor tamaño de palabra / diccionario, aunque creo que encontrará que el método de compresión tiene una correlación más fuerte con los datos de entrada, y el promedio / valores predeterminados debería ser bueno de lo contrario.


3
Tengo algunos problemas con LZMA; por ejemplo, no importa qué configuración intente en 7zip, el archivo de texto en este zip ( joshz.com/Bad.zip ) no se descomprimirá usando el descompresor incorporado de Windows (estoy usando Windows 7)
Josh Comley

(el archivo zip al que
enlacé

@joshcomley No pude encontrar una lista de esquemas de compresión compatibles con la herramienta integrada de compresión de carpetas de Windows. De acuerdo con Wikipedia para LZMA, es compatible con WinZip y muchas otras herramientas de compresión en varias plataformas, por lo que elegí seguirlo. * .zip es solo un formato contenedor, por lo que no sé si hay una compresión "oficial" que admitirán las herramientas, o simplemente las comunes (similar a cómo * .avi puede contener casi cualquier tipo de video). Si necesita asegurarse de que siempre funciona, empaquételo como autoextraíble.
Darth Android

-3

Si está buscando el mejor compresor para entornos Windows , le recomiendo que pruebe el formato * .zip con el 'Método de compresión' LZMA de 7-zip O use los archivos SFX de 7-Zip * .7z. Los archivos SFX tienen una sobrecarga de aproximadamente 130 kb sobre archivos comprimidos de .7z y vale la pena usarlos cuando la diferencia de tamaño entre .7z y .zip es grande.

Otro competidor bueno pero poco común es el NSIS, que puede usar el modo de compresión LZMA para crear exes altamente personalizables. Sé que NSIS no es un compresor, sino un lenguaje de secuencias de comandos, pero me impresionó que funcionó mejor que 7-zip SFX.

Una prueba que hice con 2 archivos :

  • AutoHotkey-H.exe (946 kb)
  • AutoHotkey.dll (1003 kb)
  • Tamaño total - 1955 kb

  • Cremallera 7-Zip - 794 kb
  • 7-Zip .7z SFX - 594 kb
  • Compresión sólida NSIS LZMA - 552 kb
  • 7-Zip .7z - 461 kb

Como # 4 no es lo que quieres, el claro ganador es NSIS, pero por razones prácticas, sugiero que ir con .zip es un tamaño comprimido de menos de 500 kbs y, si es más grande, usa una herramienta de creación de exe como 7-Zip SFX o NSIS (7-zip en particular, ya que es fácil de configurar).


2
Los requisitos en la pregunta excluyen específicamente 7z y otros formatos.
Bob

@Bob Dijo que un compresor que es compatible con Windows y exe (mi # 2 y # 3) es. El 7z es solo el # 4 que he señalado.
Avi
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.