Làm thế nào tôi có thể đạt được nén ZIP tiêu chuẩn, tốt nhất?


20

Tôi không quan tâm mất bao lâu để nén, tất cả những gì tôi muốn đạt được là hai điều:

  • Tỷ lệ nén tuyệt đối tốt nhất có thể
  • Khả năng tương thích với các trình đọc tiêu chuẩn, như Windows và WinZip

Vì vậy, các đề xuất như 7-zip sẽ không được sử dụng nhiều, trừ khi 7-zip cũng tốt hơn một chút khi nén ZIP tiêu chuẩn (trái ngược với việc sử dụng định dạng .7z rất tốt).

Lý tưởng nhất là tôi đang tìm kiếm:

  • Một đề xuất của một phần mềm
  • Các cài đặt cụ thể cho phần mềm đó cho phép nén tuyệt đối tốt nhất
  • Một cái gì đó miễn phí

Hãy nhớ rằng, mất bao lâu để nén không phải là một vấn đề!

Một điều cuối cùng - một số tệp có thể được nén tốt hơn với các cài đặt khác nhau, như "Kích thước từ" hoặc "Kích thước từ điển" - có một công cụ có thể phân tích các tệp và chọn tỷ lệ nén phù hợp nhất hoặc WinZip, 7-zip vv đã làm điều đó?

Câu trả lời:


20

Nếu bạn muốn tương thích với khả năng Zip Folders được tích hợp trong Windows XP, bạn sẽ bị kẹt với tính năng nén Deflate. Tôi không nghĩ rằng bạn thậm chí có thể sử dụng Deflate64, ít hơn nhiều so với các phương thức nén nâng cao (như LZMA, PPMD, WavPack, Bzip2, v.v.) có sẵn trong các phiên bản gần đây của winZip và PowerArchiver. PowerArchiver ít nhất mặc định sử dụng phần mở rộng .zipx cho các tệp đó - Tôi không nghĩ WinZip đang làm điều đó.

Tệp zip nhỏ nhất có thể mà 7-Zip có thể tạo có thể được thực hiện bằng dòng lệnh sau:

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

Đặc biệt lưu ý: Trình phân tích ký tự đại diện của 7-Zip không giống với hầu hết các trình phân tích khác trên hệ thống. *.*có nghĩa là tất cả các tệp có phần mở rộng. *có nghĩa là tất cả các tập tin.

Tạo các tệp .zip theo cách này (và, có lẽ, bằng cách sử dụng các công cụ khác cố gắng tạo các tệp .zip "tiêu chuẩn" nhỏ hơn) thực sự rất chậm. Bạn rất có thể sẽ tiết kiệm đáng kể thời gian và không gian bằng cách sử dụng 7-Zip hoặc WinRar để tạo tài liệu lưu trữ tự giải nén.


Lỗi 7z của tôi trên "-m0" nhưng tôi đoán "-mm" cũng tương tự với các phiên bản gần đây. Tôi cũng nhận thấy rằng, trong trường hợp của tôi (nén các tệp JPG), sử dụng "-mx9" thay vì "-mfb = 258 -mpass = 15", kết quả sẽ khác nhau trung bình là ± 15 byte (với các ngoại lệ sẽ diễn ra trong khoảng 50 giây )
Mark Jeronimus

1
@ Zom-B: Bạn nói đúng, điều đó đáng lẽ phải -mm=thay thế -m0=. -m0=được sử dụng trên .7ztài liệu lưu trữ. Ngoài ra, hướng dẫn 7-Zip chỉ định rằng -mx=9đối với tài liệu lưu trữ Zip tương đương với -mfb=128 -mpass=10. Điều tôi nhận thấy là -mfb=258 -mpass=15luôn chậm hơn rất nhiều-mx=9 và thường không tiết kiệm được nhiều dung lượng (hoặc đôi khi sử dụng thêm một vài byte). Mỗi lần nó tiết kiệm một chút không gian.
afrazier

"nhiều" chậm hơn trong bình luận trước đó dịch chậm hơn một chút 3 lần. đối với không gian, tùy chọn chậm hơn cung cấp lưu trữ khoảng. Kích thước 99.885% so với phiên bản nhanh hơn (tức là -mx = 9 không có -mpass = 15). Vì vậy, trong 3 lần nữa, người ta chỉ có thể tiết kiệm 0,125% dung lượng. Vì vậy, trừ khi mức tăng 0,15% đó rất quan trọng, hãy chọn -mx = 9 thay vì -mpass = 15.
TV

8

Các máy nén khử mỡ tốt nhất (định dạng nén được sử dụng bởi các máy nén ZIP tiêu chuẩn) mà tôi biết là:

Xóa tệp so sánh kích thước tệp nén khỏi Nén dữ liệu bằng Zopfli (được lưu trữ từ bản gốc ):

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

Ngay cả trên các PNG ngẫu nhiên, Zopfli cũng có thể tốt hơn 0,5% so với pngout . Zopfli làm cho nhỏ nhất trong số họ.


Làm cách nào tôi có thể sử dụng Zopfli để nén một tập hợp các tệp, như với lệnh zip gốc?
Panayotis

1
@Panayotis Một tìm kiếm của Google cho zopfli zip dẫn đến github.com/google/zopfli/issues/29 nói về cách dự án zopfli sẽ không thực hiện trực tiếp các tệp Zip nhưng bao gồm thảo luận về các công cụ như advzipP có thể sử dụng zopfli .
Anon

5

Giả sử bạn đang ở trên Windows: nếu bạn vẫn muốn sử dụng định dạng ZIP, tôi khuyên bạn nên sử dụng tiện ích dòng lệnh KZIP miễn phí của Ken Silverman, được tìm thấy ở đây . Sao chép nó vào trong thư mục chứa tất cả các tệp bạn cần nén, chuyển đến thư mục đó bằng CMD và chạy lệnh sau:

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

Như Roald gợi ý, tốt nhất là bao gồm thư mục kzip.exenằm trong biến PATH của hệ thống của bạn để ngăn không cho nó được đưa vào tệp lưu trữ / Zip.

Cho đến nay, tôi đã tìm thấy các tệp ZIP được tạo bằng KZIP nhỏ hơn khoảng 10-20% so với các tệp được tạo bởi các chương trình nén ZIP khác. Chúng cũng có thể mở hoàn toàn bằng phần mềm lưu trữ khác (Winzip, WinRAR, 7-zip, v.v.) và bằng Windows.


5
Điều gì về việc không đặt nó trong thư mục đó nhưng ở đâu đó trên PATH của hệ thống của bạn?
RD

1
Tôi có cùng yêu cầu - phải được hỗ trợ bởi chức năng ZIP tiêu chuẩn của Windows. KZIP là những gì tôi đã sử dụng vì nó hoạt động như một nhà vô địch. Hãy chắc chắn chơi với các tùy chọn / s / b / n để có ý tưởng tốt về những gì hoạt động tốt nhất trong môi trường của bạn.
Goyuix

Tất nhiên! Biến PATH. Tôi đã chỉnh sửa câu trả lời của mình. Cảm ơn Roald!
Isxek

hoặc chỉ tiền tố lệnh với đường dẫn của tệp thực thi
micsthepick

1

Kịch bản siêu đơn giản để nén tất cả các thư mục trong một thư mục thành các tệp zip riêng lẻ bằng cách sử dụng tệp .zip và phương thức né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

Đó là giới hạn về số lượng bộ nhớ bạn phải cung cấp cho máy nén trong khi nó hoạt động. Sử dụng 7-Zip, tôi sẽ đóng gói một kho lưu trữ với định dạng .Zip, siêu nén, phương pháp nén LZMA và kích thước từ điển 64 MB mặc định. Nếu bạn có sẵn bộ nhớ, thì hãy tăng kích thước từ điển, mặc dù lưu ý rằng bạn sẽ cần gần 3 GB bộ nhớ khả dụng để nén với từ điển 64 MB. Sử dụng một từ điển lớn hơn sẽ cho phép 7-zip để tìm kiếm nhiều kết quả khớp hơn và cung cấp khả năng nén tốt hơn nếu bạn có đủ khả năng cho bộ nhớ. LZMA đánh bại cả gzip (deflate / deflate64, tôi nghĩ vậy) và bzip2 trung bình 5% tốt, tối đa 10-12% tùy thuộc vào nội dung.

Tôi không biết công cụ nào để tìm kích thước từ / từ điển tốt nhất, mặc dù tôi nghĩ rằng bạn sẽ thấy phương pháp nén đó có mối tương quan mạnh hơn với dữ liệu đầu vào và trung bình / mặc định sẽ tốt hơn.


3
Tôi gặp một số rắc rối với LZMA - ví dụ: bất kể tôi cài đặt cài đặt nào trong 7zip, tệp văn bản trong zip này ( joshz.com/Bad.zip ) sẽ không giải nén bằng trình giải nén tích hợp của Windows (Tôi đang sử dụng Windows 7).
Josh Comley

(tệp zip tôi liên kết để chứa tệp lỗi để tham khảo, nhưng không được nén bằng LZMA)
Josh Comley

@joshcomley Tôi không thể tìm thấy danh sách các lược đồ nén được hỗ trợ cho công cụ nén thư mục windows tích hợp. Theo Wikipedia cho LZMA, nó được WinZip và nhiều công cụ nén khác hỗ trợ trên nhiều nền tảng khác nhau, vì vậy tôi đã chọn đi cùng với nó. * .zip chỉ là định dạng chứa, vì vậy tôi không biết có nén "chính thức" nào mà công cụ sẽ hỗ trợ hay đơn giản là những công cụ phổ biến (tương tự như cách * .avi có thể chứa hầu hết mọi loại video). Nếu bạn cần đảm bảo nó luôn hoạt động, hãy đóng gói nó dưới dạng tự giải nén.
Darth Android

-3

Nếu bạn đang tìm kiếm máy nén tốt nhất cho môi trường Windows , tôi khuyên bạn nên thử định dạng * .zip với 7-zip LZMA 'Phương pháp nén' HOẶC sử dụng kho lưu trữ SFX 7-Zip * .7z. Lưu trữ SFX có tổng chi phí khoảng 130 kb trên các tệp nén .7z và có giá trị sử dụng khi chênh lệch kích thước giữa .7z và .zip lớn.

Một đối thủ cạnh tranh tốt nhưng không phổ biến khác là NSIS có thể sử dụng chế độ nén LZMA để tạo ra các exes có khả năng tùy biến cao. Tôi biết NSIS không phải là máy nén mà là ngôn ngữ Scripting nhưng tôi rất ấn tượng vì nó hoạt động tốt hơn SFX 7-zip.

Một bài kiểm tra tôi đã làm với 2 tệp -

  • AutoHotkey-H.exe (946 kb)
  • AutoHotkey.dll (1003 kb)
  • Tổng kích thước - 1955 kb

  • 7-Zip .zip - 794 kb
  • 7-Zip .7z SFX - 594 kb
  • NSIS LZMA Nén nén - 552 kb
  • 7-Zip .7z - 461 kb

Vì số 4 không phải là điều bạn muốn, người chiến thắng rõ ràng là NSIS nhưng vì lý do thực tế, tôi khuyên bạn nên sử dụng .zip có kích thước nén nhỏ hơn 500 kbs và nếu lớn hơn, hãy sử dụng công cụ tạo exe như 7-Zip SFX hoặc NSIS (đặc biệt là 7-zip vì rất dễ thiết lập).


2
Các yêu cầu trong câu hỏi đặc biệt loại trừ 7z và các định dạng khác.
Bob

@Bob Ông cho biết một máy nén tương thích với Windows và exe (số 2 và số 3 của tôi) là. 7z chỉ là số 4 mà tôi đã chỉ ra.
Avi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.