En iyi, standart ZIP sıkıştırmasını nasıl sağlayabilirim?


20

Sıkıştırmanın ne kadar süreceği umurumda değil, elde etmek istediğim tek şey iki şey:

  • Mümkün olan en iyi sıkıştırma oranı
  • Windows ve WinZip gibi standart okuyucularla uyumluluk

Bu nedenle, 7-zip gibi öneriler, 7-zip standart ZIP sıkıştırmasında da biraz daha iyi olmadıkça (çok iyi .7z biçimini kullanmak yerine) biraz daha iyi olmadıkça, fazla kullanılmayacaktır.

İdeal olarak arıyorum:

  • Bir yazılım parçası önerisi
  • Mutlak en iyi sıkıştırmayı sağlayan bu yazılım için özel ayarlar
  • Ücretsiz bir şey

Unutma, sıkıştırmanın ne kadar zaman alacağı bir sorun değil!

Son bir şey - bazı dosyalar "Kelime boyutu" veya "Sözlük boyutu" gibi farklı ayarlarla daha iyi sıkıştırılmış olabilir - dosyaları analiz edebilecek ve en uygun sıkıştırma oranını seçebilecek bir araç var mı, yoksa WinZip, 7-zip vb zaten yaptın mı?

Yanıtlar:


20

Windows XP'de yerleşik olarak bulunan Zip Klasörleri özelliğiyle uyumluluk istiyorsanız, Sıkıştırma sıkıştırması ile sıkışmışsınız. WinZip ve PowerArchiver'ın son sürümlerinde bulunan gelişmiş sıkıştırma yöntemlerinin (LZMA, PPMD, WavPack, Bzip2 vb.) Çok daha az olduğu Deflate64'ü bile kullanabileceğinizi sanmıyorum. PowerArchiver en azından bu dosyalar için .zipx uzantısını kullanmakta varsayılanlar - WinZip'in henüz bunu yaptığını sanmıyorum.

7-Zip'in oluşturabileceği en küçük zip dosyası aşağıdaki komut satırından yapılabilir:

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

Özel not: 7-Zip'in joker ayrıştırıcısı, sistemdeki diğer çoğu ile aynı değildir. *.*uzantıları olan tüm dosyaları ifade eder. tüm dosyalar *anlamına gelir .

.Zip dosyalarını bu şekilde oluşturmak (ve muhtemelen daha küçük "standart" .zip dosyaları yapmaya çalışan diğer araçları kullanmak) gerçekten çok yavaştır. Kendiliğinden açılan arşivler oluşturmak için 7-Zip veya WinRar kullanarak zamandan ve alandan tasarruf edersiniz.


7z hatam "-m0" da oldu ama sanırım "-mm" son sürümlerle aynı. Ayrıca, benim durumumda (JPG dosyalarını sıkıştırarak), "-mfb = 258 -mpass = 15" yerine "-mx9" kullanarak sonucun ortalama olarak ± 15 bayt ile rasgele değişeceğini fark ettim (± 50'lerde )
Mark Jeronimus

1
@ Zom-B: Haklısın, bunun -mm=yerine olması gerekirdi -m0=. arşivlerde -m0=kullanılır .7z. Ayrıca, 7-Zip kılavuzu -mx=9, Zip arşivlerinin eşdeğer olduğunu belirtir -mfb=128 -mpass=10. Fark ettim ki -mfb=258 -mpass=15, her zaman çok daha yavaştır -mx=9ve çoğu zaman çok fazla alan kazanmaz (veya bazen birkaç byte daha fazla kullanır). Arada bir, düzenli bir alan tasarrufu sağlar.
afrazier

Önceki yorumdaki "çok" yavaştır, 3 kat daha yavaş olandan biraz daha fazlasına çevrilir. uzaya gelince, yavaş seçenek yakl. 99.885, daha hızlı (yani -mpx = 15 olmayan) versiyona kıyasla% 99 boyutta. Böylece, 3 kat daha fazla zaman için alanın yalnızca% 0.115 oranında tasarruf edilebilir. Bu yüzden,% 0.115'lik kazanç çok önemli değilse, -mpass = 15 yerine -mx = 9 değerini seçin.
TV,

8

Bildiğim en iyi deflate (standart ZIP tarafından kullanılan sıkıştırma formatı) kompresörleri:

Sıkıştırılmış dosya boyutu karşılaştırmasını Zopfli ( orijinalinden arşivlenmiş ) kullanarak Veri sıkıştırmasından deflate :

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

Rastgele PNG'lerde bile, Zopfli, pngout'tan % 0.5 daha iyi olabildi . Zopfli en küçüğünü yapar.


Zopfli'yi orijinal zip komutunda olduğu gibi bir dizi dosyayı sıkıştırmak için nasıl kullanabilirim?
Panayotis

1
@Panayotis Bir Google zopfli zip için arama yol açar github.com/google/zopfli/issues/29 zopfli proje Zip dosyaları doğrudan yapmayacağım nasıl bahsediyor ama bir arka uç olarak zopfli kullanabilirsiniz AdvanceCOMP en advzip gibi araçlar tartışma içerir .
Anon,

5

Windows'da olduğunuzu varsayarak: hala ZIP biçimini kullanmak istiyorsanız, burada bulunan Ken Silverman'ın ücretsiz KZIP komut satırı yardımcı programını kullanmanızı öneririm . Sıkıştırmanız gereken tüm dosyaları içeren klasöre kopyalayın, CMD kullanarak bu klasöre gidin ve aşağıdaki komutu çalıştırın:

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

Roald'ın önerdiği gibi, kzip.exearşiv / Zip dosyasına eklenmesini önlemek için sisteminizin PATH değişkeninde bulunan dizini eklemek en iyisidir .

Şimdiye kadar KZIP ile oluşturulan ZIP dosyalarının, diğer ZIP sıkıştırma programları tarafından oluşturulanlardan yaklaşık% 10-20 daha küçük olduğunu gördüm. Ayrıca diğer arşiv yazılımları (Winzip, WinRAR, 7-zip, vb.) Ve Windows tarafından da tamamen açılabilirler.


5
Bu dizinde değil, sisteminizin PATH'sinde bir yere koymaktan ne haber?
RD

1
Aynı gereksinim vardı - Windows standart ZIP işlevi tarafından desteklenmesi gerekir. KZIP, şampiyon gibi çalıştığımda kullandığım şeydi. Ortamınızda en iyi hangisi olduğu hakkında iyi bir fikir edinmek için / s / b / n seçenekleriyle oynadığınızdan emin olun.
Goyuix,

Tabii ki! PATH değişkeni. Cevabımı düzenledim. Sağol Roald!
Isxek,

ya da sadece komutu çalıştırılabilirin
yoluyla önekleyin

1

Bir klasördeki tüm klasörleri .zip filetype ve bir Deflate64 sıkıştırma yöntemi kullanarak tek tek zip dosyalarına sıkıştırmak için süper basit komut dosyası.

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

-1

Bu, işini yaparken kompresöre ne kadar bellek ayırmanız gerektiğinin bir sınırı. 7-Zip kullanarak .Zip formatı, Ultra sıkıştırma, LZMA sıkıştırma yöntemi ve varsayılan 64 MB sözlük boyutunda bir arşivi paketlerdim. Kullanılabilir belleği varsa, sözlük boyutunu yükseltin, ancak 64 MB'lık bir sözlüğü sıkıştırmak için yaklaşık 3 GB'lık belleğe ihtiyacınız olacağını unutmayın. Daha büyük bir sözlük kullanmak, 7-zip'in daha fazla eşleşme avlamasına ve hafızayı karşılayabiliyorsanız daha iyi sıkıştırma sağlamasına izin vermelidir. LZMA, hem gzip (deflate / deflate64, bence) hem de bzip2'yi içeriğe bağlı olarak% 10-12'ye kadar ortalama% 5 oranında yener.

En iyi kelime / sözlük boyutunu bulmak için bir araç bilmiyorum, ancak sıkıştırma yönteminin girdi verileriyle daha güçlü bir korelasyonu olduğunu göreceksiniz, ancak ortalama / varsayılanların aksi durumda iyi olması gerektiğini düşünüyorum.


3
Örneğin, ne ayarları olursa olsun ben, 7zip bu zip (metin dosyasını deneyin - Ben LZMA ile bazı sorunlar yaşıyorum joshz.com/Bad.zip olacaktır) değil serbest kalır (Windows kullanıyorum ediyorum décompresser inşa Windows kullanırken 7).
Josh Comley,

(Bağlandığım zip dosyası referans için hatalı dosya içeriyor, ancak LZMA ile sıkıştırılmadı)
Josh Comley

@joshcomley Yerleşik windows klasör sıkıştırma aracı için desteklenen sıkıştırma şemalarının bir listesini bulamadım. LZMA için Wikipedia göre, bir onunla gitmek seçildi yüzden, WinZip ve çeşitli platformlarda birçok sıkıştırma araçları tarafından desteklenen. * .zip yalnızca bir kapsayıcı formattır, bu nedenle araçların destekleyeceği bir "resmi" sıkıştırma olup olmadığını veya basitçe yaygın olanları (* .avi'nin neredeyse her tür videoyu nasıl tutabildiğine benzer şekilde) olup olmadığını bilmiyorum. Her zaman çalıştığından emin olmanız gerekiyorsa, kendiliğinden açılan paket olarak paketleyin.
Darth Android,

-3

Windows ortamları için en iyi kompresörü arıyorsanız , 7-zip LZMA 'Sıkıştırma Yöntemi' ile ya da * .zip biçimini denemenizi ya da 7-Zip * .7z SFX arşivlerini kullanmanızı öneririm. SFX arşivleri .7z sıkıştırılmış dosyalar üzerinde yaklaşık 130 kb ek yüke sahiptir ve .7z ve .zip arasındaki boyut farkı büyük olduğunda kullanılmaya değerdir.

Diğer iyi ama nadir bir rakip, yüksek oranda özelleştirilebilir exes oluşturmak için LZMA sıkıştırma modunu kullanabilen NSIS'dir. NSIS'in bir kompresör değil, bir Scripting dili olduğunu biliyorum ama 7-zip SFX'ten daha iyi performans gösterdiğine etkilendim.

2 dosya ile yaptığım bir test -

  • AutoHotkey-H.exe (946 kb)
  • AutoHotkey.dll (1003 kb)
  • Toplam Boyut - 1955 kb

  • 7-Zip .zip - 794 kb
  • 7-Zip .7z SFX - 594 kb
  • NSIS LZMA Katı Sıkıştırma - 552 kb
  • 7-Zip .7z - 461 kb

# 4, istediğin gibi olmadığından, açık kazanan NSIS'dir ancak pratik nedenlerden ötürü .zip ile gitmenin sıkıştırılmış boyutun 500 kbs'den az olduğunu ve daha büyükse, 7-Zip SFX veya NSIS (kurulumu kolay olduğu için özellikle 7 fermuarlı).


2
Sorudaki şartlar özellikle 7z ve diğer formatları içermez.
Bob

@Bob Windows ve exe ile uyumlu bir kompresör olduğunu söyledi (benim # 2 ve # 3). 7z işaret ettiğim sadece 4.
Avi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.