ฉันจะบรรลุการบีบอัดไฟล์ ZIP มาตรฐานที่ดีที่สุดได้อย่างไร


20

ฉันไม่สนใจว่าต้องใช้เวลาในการบีบอัดนานแค่ไหนสิ่งที่ฉันต้องการให้ได้คือสองสิ่ง:

  • อัตราส่วนการบีบอัดที่ดีที่สุดเท่าที่จะเป็นไปได้
  • ความเข้ากันได้กับโปรแกรมอ่านมาตรฐานเช่น Windows และ WinZip

ดังนั้นคำแนะนำเช่น 7-zip จะไม่ใช้งานมากนักนอกจาก 7-zip จะดีกว่าเล็กน้อยที่การบีบอัด ZIP มาตรฐาน (เทียบกับการใช้รูปแบบ. 7z ที่ดีมาก)

เป็นการดีที่ฉันกำลังมองหา:

  • คำแนะนำของซอฟต์แวร์หนึ่งชิ้น
  • การตั้งค่าเฉพาะสำหรับซอฟต์แวร์ที่เปิดใช้งานการบีบอัดที่ดีที่สุด
  • ฟรี

โปรดจำไว้ว่าใช้เวลาในการบีบอัดนานแค่ไหนก็ไม่มีปัญหา!

สิ่งสุดท้ายสิ่งหนึ่ง - ไฟล์บางไฟล์อาจถูกบีบอัดได้ดีขึ้นด้วยการตั้งค่าที่แตกต่างกันเช่น "ขนาด Word" หรือ "ขนาดพจนานุกรม" - มีเครื่องมือที่สามารถวิเคราะห์ไฟล์และเลือกอัตราส่วนการบีบอัดที่เหมาะสมที่สุดหรือ WinZip, 7-zip ฯลฯ ทำเช่นนั้นแล้ว?

คำตอบ:


20

หากคุณต้องการความเข้ากันได้กับความสามารถของ Zip Folders ใน Windows XP แสดงว่าคุณติดขัดกับการบีบอัดแบบยุบ ฉันไม่คิดว่าคุณจะสามารถใช้ Deflate64 ซึ่งเป็นวิธีการบีบอัดขั้นสูงที่น้อยลง (เช่น LZMA, PPMD, WavPack, Bzip2 และอื่น ๆ ) ที่มีให้ใน winZip และ PowerArchiver รุ่นล่าสุด PowerArchiver เป็นค่าเริ่มต้นอย่างน้อยในการใช้ส่วนขยาย. zip สำหรับไฟล์เหล่านั้น - ฉันยังไม่คิดว่า WinZip กำลังทำเช่นนั้น

ไฟล์ zip ที่เล็กที่สุดที่เป็นไปได้ที่ 7-Zip สามารถสร้างสามารถทำได้ด้วยบรรทัดคำสั่งต่อไปนี้:

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

สิ่งที่ควรทราบ: ตัวแยกวิเคราะห์สัญลักษณ์ 7-Zip ไม่เหมือนกับตัวอื่น ๆ ในระบบ *.*หมายถึงไฟล์ทั้งหมดที่มีนามสกุล *หมายถึงไฟล์ทั้งหมด

การสร้างไฟล์. zip ด้วยวิธีนี้ (และสมมุติว่าการใช้เครื่องมืออื่น ๆ ที่พยายามทำให้ไฟล์. zip "มาตรฐาน" มีขนาดเล็กลง) จะช้ามาก ๆ คุณน่าจะประหยัดเวลาและพื้นที่ได้มากโดยใช้ 7-Zip หรือ WinRar เพื่อสร้างคลังข้อมูลแยกไฟล์ด้วยตนเอง


ข้อผิดพลาด 7z ของฉันบน "-m0" แต่ฉันเดาว่า "-mm" ทำเช่นเดียวกันกับรุ่นล่าสุด ฉันยังสังเกตเห็นว่าในกรณีของฉัน (บีบอัดไฟล์ JPG) โดยใช้ "-mx9" แทน "-mfb = 258 -mpass = 15" ผลลัพธ์จะแตกต่างกันแบบสุ่มโดยเฉลี่ย± 15 ไบต์ (ยกเว้นในกรณี± 50 วินาที )
Mark Jeronimus

1
@ Zom-B: คุณสิทธิที่ควรจะได้รับแทน -mm= ถูกใช้ในคลังเก็บ นอกจากนี้ 7-Zip ระบุคู่มือที่สำหรับ Zip จดหมายเหตุเทียบเท่ากับ สิ่งที่ฉันได้สังเกตเห็นก็คือว่าอยู่เสมอมากช้ากว่าและมักจะไม่ประหยัดพื้นที่มากที่ทุกคน (หรือบางครั้งใช้ไม่กี่ไบต์เพิ่มเติม) ทุกครั้งที่มันช่วยประหยัดพื้นที่ที่เหมาะสม -m0=-m0=.7z-mx=9-mfb=128 -mpass=10-mfb=258 -mpass=15-mx=9
afrazier

"มาก" ช้าลงในความคิดเห็นก่อนหน้านี้แปลช้ากว่า 3 เท่าเล็กน้อย สำหรับพื้นที่ตัวเลือกที่ช้าลงจะช่วยให้การเก็บถาวรประมาณ ขนาด 99.885% เมื่อเทียบกับรุ่นที่เร็วกว่า (เช่น -mx = 9 ที่ไม่มี -mpass = 15) ดังนั้นอีก 3 ครั้งเราสามารถประหยัดพื้นที่ได้เพียง 0.115% ดังนั้นหากการได้รับ 0.115% นั้นสำคัญมากไปที่ -mx = 9 แทน -mpass = 15
ทีวี

8

คอมเพรสเซอร์ที่ดีที่สุด (รูปแบบการบีบอัดที่ใช้โดย ZIP มาตรฐาน) ที่ฉันรู้คือ:

ย่อขนาดไฟล์ที่บีบอัดเปรียบเทียบไฟล์จากการบีบอัดข้อมูลโดยใช้ Zopfli (เก็บถาวรจากต้นฉบับ ):

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

แม้ใน PNGs สุ่ม Zopfli ก็สามารถที่จะเป็น0.5% ดีกว่า pngout Zopfli ทำให้เล็กที่สุดของพวกเขาทั้งหมด


ฉันจะใช้ Zopfli เพื่อบีบอัดชุดไฟล์เช่นเดียวกับคำสั่ง zip ดั้งเดิมได้อย่างไร
Panayotis

1
@Panayotis การค้นหาของ Google สำหรับ zopfli zipนำไปสู่github.com/google/zopfli/issues/29ซึ่งพูดถึงว่าโครงการ zopfli จะไม่ทำไฟล์ซิปโดยตรง แต่รวมถึงการอภิปรายเกี่ยวกับเครื่องมือเช่น advzip ของ AdvanceCOMP ซึ่งสามารถใช้ zopfli เป็นแบ็กเอนด์ .
Anon

5

สมมติว่าคุณอยู่ใน Windows: ถ้าคุณยังต้องการที่จะใช้รูปแบบ ZIP ผมจะแนะนำให้ใช้ยูทิลิตี้ฟรี KZIP บรรทัดคำสั่งเคน Silverman ของพบที่นี่ คัดลอกภายในโฟลเดอร์ที่มีไฟล์ทั้งหมดที่คุณต้องการบีบอัดไปที่โฟลเดอร์นั้นโดยใช้ CMD และเรียกใช้คำสั่งต่อไปนี้:

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

ตามที่ Roald แนะนำให้ดีที่สุดคือการรวมไดเรกทอรีที่kzip.exeอยู่ในตัวแปร PATH ในระบบของคุณเพื่อป้องกันไม่ให้รวมอยู่ในไฟล์เก็บถาวร / ไฟล์ซิป

ฉันพบว่าไฟล์ ZIP ที่สร้างด้วย KZIP นั้นมีขนาดเล็กกว่าไฟล์ที่สร้างโดยโปรแกรมบีบอัด ZIP อื่น ๆ ประมาณ 10-20% พวกเขายังสามารถเปิดได้อย่างเต็มที่โดยซอฟต์แวร์เก็บถาวรอื่น ๆ (Winzip, WinRAR, 7-zip, ฯลฯ ) และโดย Windows


5
สิ่งที่เกี่ยวกับการไม่ใส่ไว้ในไดเรกทอรีนั้น แต่อยู่ที่ไหนสักแห่งบนเส้นทางของระบบของคุณ?
RD

1
ฉันมีข้อกำหนดเดียวกัน - ต้องได้รับการสนับสนุนโดยฟังก์ชันการทำงานมาตรฐาน ZIP ของ Windows KZIP เป็นสิ่งที่ฉันได้ใช้เพราะมันทำงานได้ดีเหมือนแชมป์ ต้องแน่ใจว่าได้เล่นกับตัวเลือก / s / b / n เพื่อให้ได้แนวคิดที่ดีที่สุดในสภาพแวดล้อมของคุณ
Goyuix

แน่นอน! ตัวแปร PATH ฉันแก้ไขคำตอบของฉันแล้ว ขอบคุณ Roald!
Isxek

หรือเพียงนำหน้าคำสั่งด้วยพา ธ ของไฟล์เรียกทำงาน
micsthepick

1

สุดยอดสคริปต์อย่างง่าย ๆ ในการบีบอัดโฟลเดอร์ทั้งหมดในโฟลเดอร์ไปยังไฟล์ซิปแต่ละไฟล์โดยใช้ไฟล์ซิป. และวิธีการบีบอัด Deflate64

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

-1

มัน จำกัด จำนวนของหน่วยความจำที่คุณต้องใช้กับคอมเพรสเซอร์ในขณะที่ทำงานอยู่ ใช้ 7-Zip ฉันจะแพ็คไฟล์เก็บถาวรด้วยรูปแบบ. zip, การบีบอัดแบบอัลตร้า, วิธีบีบอัด LZMA และขนาดพจนานุกรม 64MB เริ่มต้น หากคุณมีหน่วยความจำที่มีอยู่ให้เพิ่มขนาดพจนานุกรมขึ้น แต่โปรดทราบว่าคุณจะต้องมีหน่วยความจำเกือบ 3GB ในการบีบอัดด้วยพจนานุกรม 64MB การใช้พจนานุกรมขนาดใหญ่ควรอนุญาตให้มี 7-zip เพื่อค้นหาการแข่งขันที่มากขึ้นและให้การบีบอัดที่ดีกว่าหากคุณสามารถซื้อหน่วยความจำได้ LZMA ชนะทั้ง gzip (ฉันคิด / deflate64 ฉันคิดว่า) และ bzip2 ประมาณ 5% โดยเฉลี่ยสูงถึง 10-12% ขึ้นอยู่กับเนื้อหา

ฉันไม่รู้เครื่องมือในการค้นหาคำ / ขนาดพจนานุกรมที่ดีที่สุดถึงแม้ว่าฉันคิดว่าคุณจะพบว่าวิธีการบีบอัดมีความสัมพันธ์กับข้อมูลอินพุตมากขึ้นและค่าเฉลี่ย / ค่าเริ่มต้นน่าจะดี


3
ฉันมีปัญหากับ LZMA - ตัวอย่างเช่นไม่ว่าฉันจะลองตั้งค่าแบบใดใน 7zip ไฟล์ข้อความในไฟล์ zip นี้ ( joshz.com/Bad.zip ) จะไม่ทำการแตกไฟล์โดยใช้ตัวขยายการบีบอัดของ Windows (ฉันใช้ Windows 7)
Josh Comley

(ไฟล์ zip ที่ฉันลิงก์ไว้มีไฟล์ที่ผิดพลาดเพื่อการอ้างอิง แต่ไม่ได้บีบอัดด้วย LZMA)
Josh Comley

@ joshcomley ฉันไม่พบรายการของรูปแบบการบีบอัดที่รองรับสำหรับเครื่องมือการบีบอัดโฟลเดอร์ windows ในตัว ตามที่วิกิพีเดีย LZMA ก็จะได้รับการสนับสนุนโดย WinZip และหลายเครื่องมือบีบอัดอื่น ๆ ทั่วแพลตฟอร์มต่างๆดังนั้นผมจึงเลือกที่จะไปกับมัน * .zip เป็นเพียงรูปแบบคอนเทนเนอร์ดังนั้นฉันไม่ทราบว่ามีการบีบอัด "อย่างเป็นทางการ" ซึ่งเครื่องมือจะสนับสนุนหรือเป็นรายการที่พบบ่อย (คล้ายกับ * .avi สามารถเก็บวิดีโอได้เกือบทุกประเภท) หากคุณต้องการตรวจสอบให้แน่ใจว่ามันใช้งานได้เสมอให้แพ็คมันเป็นการคลายตัวเอง
Darth Android

-3

หากคุณกำลังมองหาคอมเพรสเซอร์ที่ดีที่สุดสำหรับสภาพแวดล้อม Windowsฉันขอแนะนำให้คุณลองใช้รูปแบบ * .zip ด้วย 7-zip LZMA 'วิธีการบีบอัด' หรือใช้ไฟล์เก็บถาวร SFX 7-Zip * .7z ไฟล์เก็บถาวรของ SFX มีค่าใช้จ่ายประมาณ 130 kb มากกว่าไฟล์บีบอัด. 7z และคุ้มค่าที่จะใช้เมื่อขนาดแตกต่างระหว่าง. 7z และ. zip มีขนาดใหญ่

คู่แข่งที่ดี แต่ไม่ธรรมดาคือ NSIS ซึ่งสามารถใช้โหมดการบีบอัด LZMA เพื่อสร้างอดีตที่ปรับแต่งได้สูง ฉันรู้ว่า NSIS ไม่ใช่คอมเพรสเซอร์ แต่เป็นภาษาสคริปต์ แต่ฉันประทับใจที่มันทำงานได้ดีกว่า 7-zip SFX

การทดสอบที่ฉันทำกับ 2 ไฟล์ -

  • AutoHotkey-H.exe (946 kb)
  • AutoHotkey.dll (1003 kb)
  • ขนาดโดยรวม - 1955 kb

  • 7-Zip .zip - 794 kb
  • 7-Zip .7z SFX - 594 kb
  • การบีบอัดแบบแข็ง NSIS LZMA - 552 kb
  • 7-Zip .7z - 461 kb

เนื่องจาก # 4 ไม่ใช่สิ่งที่คุณต้องการผู้ชนะที่ชัดเจนคือ NSIS แต่สำหรับเหตุผลในทางปฏิบัติฉันขอแนะนำให้ใช้. zip ขนาดที่บีบอัดน้อยกว่า 500 kbs และถ้าใหญ่กว่าให้ใช้เครื่องมือสร้าง exe เช่น 7-Zip SFX หรือ NSIS (7-zip โดยเฉพาะเนื่องจากติดตั้งง่าย)


2
ข้อกำหนดในคำถามโดยเฉพาะไม่รวม 7z และรูปแบบอื่น ๆ
Bob

@Bob เขากล่าวว่าคอมเพรสเซอร์ที่เข้ากันได้กับ Windows และ exe (# 2 และ # 3) ของฉันคือ 7z เป็นเพียง # 4 ซึ่งฉันได้ชี้ให้เห็น
Avi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.