最高の標準ZIP圧縮を実現するにはどうすればよいですか?


20

圧縮にかかる時間は気にしません。達成したいのは次の2つだけです。

  • 可能な限り最高の圧縮率
  • WindowsやWinZipなどの標準リーダーとの互換性

そのため、7-zipも標準のZIP圧縮でわずかに優れていない限り、7-zipなどの提案はあまり役に立ちません(非常に優れた.7z形式を使用するのではなく)。

理想的には私が探しています:

  • ソフトウェアの推奨事項
  • 絶対最良の圧縮を可能にするそのソフトウェアの特定の設定
  • 無料のもの

圧縮に要する時間は問題ではないことを忘れないでください!

最後に、「Wordサイズ」や「辞書サイズ」など、さまざまな設定で圧縮されるファイルもあります。ファイルを分析して最適な圧縮率を選択できるツールがありますか、WinZip、7-zip等はすでにそれをしますか?

回答:


20

Windows XPに組み込まれているZipフォルダー機能との互換性が必要な場合は、Deflate圧縮に固執しています。Deflate64を使用することもできないと思います。最近のバージョンのwinZipとPowerArchiverで利用できる高度な圧縮方法(LZMA、PPMD、WavPack、Bzip2など)は使用できません。PowerArchiverは、少なくともデフォルトでそれらのファイルに.zipx拡張子を使用します-WinZipがまだそれをしているとは思いません。

7-Zipで作成できる最小の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を使用して自己解凍アーカイブを作成することで、かなりの時間とスペースを節約できます。


「-m0」で7zエラーが発生しましたが、「-mm」は最近のバージョンでも同じことをしていると思います。私の場合(JPGファイルの圧縮)、「-mfb = 258 -mpass = 15」の代わりに「-mx9」を使用すると、結果が平均±15バイトでランダムに異なることに気付きました(例外は±50s )
マークジェロニムス

1
@ ZOM-B:あなたされているはずだ右、-mm=代わりに-m0=。 アーカイブ-m0=で使用され.7zます。また、7-Zipマニュアルでは-mx=9、Zipアーカイブの場合はと同等であると指定されています-mfb=128 -mpass=10。私が気づいたのは、それ-mfb=258 -mpass=15が常に非常に遅く-mx=9、多くの場合、まったくスペースを節約しないことです(または時々数バイトをさらに使用します)。時々、それはかなりのスペースを節約します。
フレイジャー

前のコメントの「非常に」遅いことは、3倍以上遅いことを意味します。スペースに関しては、遅いオプションは約のアーカイブを提供します。高速バージョン(つまり、-mpass = 15なしの-mx = 9)と比較した99.885%サイズ。したがって、さらに3倍の時間を節約できるのは、スペースの0.115%だけです。そのため、0.115%のゲインが非常に重要でない限り、-mpass = 15ではなく-mx = 9を使用してください。
テレビ

8

私が知っている最高のdeflate(標準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║
╚══════════════╩═══════════╩═════════╩═════════╩═════════╩═════════╝

ランダムなPNGでも、Zopfliはpngoutよりも0.5%優れています。Zopfliは、それらすべてを最小にします。


元のzipコマンドのように、Zopfliを使用して一連のファイルを圧縮するにはどうすればよいですか?
パナヨティス

1
@Panayotis AのGoogle zopfliのzipの検索にリードgithub.com/google/zopfli/issues/29 zopfliプロジェクトが直接ジップファイルを行うことはありませんどのように語るが、バックエンドとして使用することができますzopfli AdvanceCOMPのadvzipのようなツールの議論を含んでいます。
アノン

5

Windowsを使用している場合:ZIP形式を引き続き使用する場合は、こちらにある Ken Silvermanの無料のKZIPコマンドラインユーティリティを使用することをお勧めします。圧縮する必要があるすべてのファイルを含むフォルダー内にコピーし、CMDを使用してそのフォルダーに移動し、次のコマンドを実行します。

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

Roaldが示唆しているように、kzip.exeシステムのPATH変数にあるディレクトリを含めて、アーカイブ/ Zipファイルに含まれないようにするのが最善です。

これまでのところ、KZIPで作成されたZIPファイルは、他のZIP圧縮プログラムで作成されたものよりも約10〜20%小さいことがわかりました。他のアーカイブソフトウェア(Winzip、WinRAR、7-zipなど)およびWindowsでも完全に開くことができます。


5
そのディレクトリにではなく、システムのPATHのどこかに置いてはどうですか?
RD

1
同じ要件がありました-Windows標準のZIP機能でサポートされている必要があります。KZIPは、チャンピオンのように機能するため、最終的に使用したものです。/ s / b / nオプションを使用して、環境で最適に機能するものを確認してください。
Goyuix

もちろん!PATH変数。回答を編集しました。ありがとう、ロアルド!
-Isxek

または単にコマンドの前に実行可能ファイルのパスを
追加

1

.zipファイルタイプとDeflate64圧縮方式を使用して、フォルダー内のすべてのフォルダーを個々のzipファイルに圧縮する非常にシンプルなスクリプト。

@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形式、Ultra圧縮、LZMA圧縮方式、およびデフォルトの64MB辞書サイズで圧縮します。使用可能なメモリがある場合は、辞書サイズを増やしますが、64MBの辞書で圧縮するには、ほぼ3GBのメモリが必要です。より大きな辞書を使用すると、7-zipでより多くの一致を検索でき、メモリに余裕があれば圧縮率が向上します。LZMAは、gzip(deflate / deflate64、私は思う)とbzip2の両方を平均5%で、コンテンツに応じて最大10-12%で打ちます。

最適な単語/辞書サイズを見つけるためのツールは知りませんが、圧縮方法は入力データとより強い相関関係があり、それ以外の場合は平均/デフォルトが適切であることがわかります。


3
LZMAに問題があります-たとえば、7zipでどの設定を試しても、このzip(joshz.com/Bad.zip)のテキストファイルは、Windowsに組み込まれている解凍プログラムを使用して解凍されません(Windowsを使用しています) 7)。
ジョシュコムリー

(リンクしたzipファイルには、参照用の誤ったファイルが含まれていますが、LZMAで圧縮されていませんでした)
ジョシュコムリー

@joshcomley組み込みのWindowsフォルダー圧縮ツールでサポートされている圧縮スキームのリストが見つかりませんでした。LZMAのためのウィキペディアによると、それがされ、様々なプラットフォーム間でのWinZipや他の多くの圧縮ツールでサポートされているので、私はそれで行くことに選出されました。* .zipは単なるコンテナ形式であるため、ツールがサポートする「公式」圧縮なのか、単に一般的な圧縮なのかはわかりません(* .aviがほぼすべての種類のビデオを保持できる方法と同様)。常に機能することを確認する必要がある場合は、自己解凍形式でパックしてください。
ダースAndroid

-3

Windows環境に最適なコンプレッサーお探しの場合は、*。zip形式と7-zip LZMA 'Compression Method' を試すか、7-Zip * .7z SFXアーカイブを使用することをお勧めします。SFXアーカイブは、.7z圧縮ファイルに比べて約130 kbのオーバーヘッドがあり、.7zと.zipのサイズの差が大きい場合に使用する価値があります。

もう1つの優れているが一般的でない競合製品は、LSIS圧縮モードを使用して高度にカスタマイズ可能なexeを作成できるNSISです。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は圧縮サイズが500kb未満であり、大きければ7-Zip SFXなどのexe作成ツールを使用することをお勧めしますNSIS(セットアップが簡単なため、特に7-zip)。


2
質問の要件は、特に7zおよびその他の形式を除外しています。
ボブ

@Bob彼は、Windowsとexe(私の#2と#3)と互換性のあるコンプレッサーはそうだと言った。7zは私が指摘した#4のみです。
アビ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.