リククーブログ

ARTICLE PAGE

世界最強の圧縮ソフトはPAQ8というらしい

圧縮ソフトに興味を持てば、
そう、どんだけ高い圧縮率ができるか、にもちろん興味がありますね。

でも、世界最高レベルのソフトは、実は(特に日本人には)あまり知られていません。
英語サイトの海の中、ネットの片隅で、それらはハイレベルな戦いをしています。

そのなかで、フリーソフトウェア(GPL Version 2)かつ安定してトップレベル成績をとっているのが
PAQ8です。

PAQ8の完璧主義とは


ちょっとづつ、いろんな人によって互換性そっちのけで改良が加えられています。
ということは、バージョンを新しくすると、それまでの圧縮したファイルは使えない!
バージョンがアップした時、生成するファイルの拡張子の末尾が違えば、もう違うプログラムなのです。

PAQ8は、その高圧縮性の代償として、
時間とメモリーが必要です。
圧縮設定を低くすると、これらは少なくて済みますが、
それでも、一般で使われる他の圧縮ソフトに引けを取らないと言います。

今回は、その中でも、
paq8px_v69 というバージョンを使ってみます。
PAQ8 - Download Page You can download various paq8 versions here
オープンソースなので、C++のソースコードがついてきます。
今回は、Linux(x86_64 gcc 4.6.2 glibc 2.14)上でコンパイルして使ってみます。
Windowsの方は、
必ず新しめのパソコンで、コマンドプロンプトから、使ってみて。説明はソースコードに書かれています。

g++ -DUNIX -DNOASM -mssse3 -msse3 -msse2 -msse -O2 paq8px_v69.cpp -o paq8px_v69_ssse3_O2


コンパイルはたったひとつのファイルに5~10秒かかった。

何かとネタになると、Wikipediaに載っているCray-1の基板 File:Processor board cray-2 hg.jpg の画像を圧縮してみますね。


bash-4.1$ ~/b/gariga/paq8px_v69_ssse3_O2 -8 Processor_board_cray-2_hg.jpg
Creating archive Processor_board_cray-2_hg.jpg.paq8px with 1 file(s)...

File list (38 bytes)
Compressed from 38 to 39 bytes.

1/1 Filename: Processor_board_cray-2_hg.jpg (459619 bytes)
Block segmentation:
0 | jpeg | 459619 bytes [0 - 459618]
Compressed from 459619 to 292736 bytes.

Total 459619 bytes compressed to 292784 bytes.
Time 17.58 sec, used 1753131022 bytes of memory


最高の圧縮率は、-8 という引数を渡して出来ます。
このように、たったひとつのJPEGファイルごときに、17秒と1GB以上のメモリを消費しました。
ファイルサイズは、448KB が 285 KB になりました。
展開するのも、同じぐらい時間とメモリが必要みたい。
あ、もっと大きいファイルだったら例えば16GBメモリがいるというまでにはならないらしいです。

じゃあ、他のソフトは?

bash-4.1$ xz -z -k -9 -v Processor_board_cray-2_hg.jpg
Processor_board_cray-2_hg.jpg (1/1)
100 % 430.1 KiB / 448.8 KiB = 0.958

bash-4.1$ ls -l Processor_board_cray-2_hg.jpg
-rw-r--r-- 1 hidden hidden 459619 6月 17 2011 Processor_board_cray-2_hg.jpg
bash-4.1$ ls -l Processor_board_cray-2_hg.jpg.xz
-rw-r--r-- 1 hideen hidden 440412 6月 17 2011 Processor_board_cray-2_hg.jpg.xz


いま、Linuxの世界でホットな、XZという圧縮プログラムを最高設定で使いましたが、
すでに、JPEGも結構圧縮されているので、ほとんどファイルサイズが変わりません。
本当は、普及している中で一番といっていい性能のはずなんですけれど・・・


bash-4.1$ zip -9 -v a.zip Processor_board_cray-2_hg.jpg
adding: Processor_board_cray-2_hg.jpg (in=459619) (out=439439) (deflated 4%)
total bytes=459619, compressed=439439 -> 4% savings

Linuxで、ZIP圧縮するプログラム Info-ZIP を使いました。これも、4%しか、ファイルサイズが変わりません。

PAQ8は、JPEGファイルを更に圧縮するという難問をやってのけました。
でも、こんな重たいソフトを使えるパソコンって、結局ハードディスクの記憶容量も大きいので
ビミョーです。 

そこで、圧縮レベルの設定を下げます。

bash-4.1$ ~/b/gariga/paq8px_v69_ssse3_O2 -2 Processor_board_cray-2_hg.jpg
Creating archive Processor_board_cray-2_hg.jpg.paq8px with 1 file(s)...

File list (38 bytes)
Compressed from 38 to 41 bytes.

1/1 Filename: Processor_board_cray-2_hg.jpg (459619 bytes)
Block segmentation:
0 | jpeg | 459619 bytes [0 - 459618]
Compressed from 459619 to 296344 bytes.

Total 459619 bytes compressed to 296394 bytes.
Time 10.49 sec, used 56290422 bytes of memory

圧縮レベルを、2にしました。
圧縮時間は10秒で、メモリ使用量は53MBまでと、劇的に減りましたが、
圧縮率は、一番上とあまり変わっていないようです。
なるほど。小さいファイルなら、これだけ設定を下げてもうまくできるんだな。

結構努力している人(しかもオープンソースだから、タダ働きみたいなもの)は、世の中に必ずいるものです。

自分の使ったPAQ8のバージョンより、特定の条件でより圧縮できるバージョンもあります。
いやそういうの試したらきりないった。

あ、そうだ。peazipというソフト使えば、気軽に試せるんだった。
サイトは英語だけれど本体は日本語が出ます。
(peazipでZIPで圧縮してWindowsの標準機能で解凍するとファイル名の日本語が文字化けするから注意。)

追記:
paq8px_v69で、tarにした画像フォルダの圧縮をしてみたら、時間がかかるのかかるの!
2時間たっても終わらない。
あまりにも時間が長いのでxzを使ってしまいました。
どうも、使えるのはフロッピーディスクや昔の16Mのメモリーに入れて運ばなければいけないのを圧縮するぐらいかな?
CPUが16コアとかになってくると暇なコアでゆっくり圧縮できるかも。
fp8_v2.zipというソースコードが出回っています。PAQ8シリーズとしてはそこそこの性能で、短い時間で圧縮が終わる。
注意したいのがfp8_v3.zipと言うのはどうやらマルウェアです。

優秀なプログラムの特徴

Context Mixingという、今までのLZなんとかと違うアルゴリズムをつかっているものが表彰台をうめています。
https://en.wikipedia.org/wiki/Context_mixing
更新!なんと日本語の説明ができていますね。コンテキスト・ミキシング - Wikipedia
というより、よく出るデータ列の統計に同時に違う方法を使うという、力技です。

最近PAQ8が負けてきた

cmixという圧縮プログラムがかなり優勢です。
バージョン1から6まで続けて表彰台いりの勢い。
Byron Knoll
このウェブサイトでダウンロードできますが、厳重注意なのが、メモリーが最低32GBあった方がいいということで、
私のパソコンでも、8GBしかありません。普及するのは到底先でしょう。

そのほか、実用的に使えそうなもの

今のパソコンはメモリが大量につまれていながら、事務作業ぐらいでは全く消費しません。
とくに64bitのパソコンは8GB以上のメモリを積めることが多いですが、32bitのアプリが実行できるように、メモリを3GB以上消費しないようにする業界の空気があるようです。
メモリが必要でありながら短時間でより小さく出来る圧縮解凍プログラムがあるみたいですね。
有名らしいLarge Text Compression Benchmarkの表の Timeをみると・・・

彼のサイトからZPAQというプログラムがダウンロードできます。自らベンチマークに参加するのね。本当はバイナリファイルとかのベンチマークで優勢です。
英文専用?のdrt|lpaq9m が現在彼のサイトでzpaq圧縮アーカイブが公開中。
実行ファイルのサイズを小さくするUpackを使って提供されているが、いろんなマルウェアもUpackを使っているのでウイルス対策ソフトで弾かれる可能性あり!
DRTを前処理で使うと英単語を対応する4バイトのバイナリデータで置き換えるために効率よく英文を圧縮できる。
しかしDRTにはソースコードが…ない!
ウイルス対策ソフトで弾かれないために、lpaq9mのソースコードのみこちらでも公開します。お手数ですが自分でコンパイルを。
lpaq9mのソースコード。拡張子を.cppにかえてね ライセンスはGPLのいずれかのバージョンのようです。
単体では英文テキスト(ソースコード含む)ではそんなに優秀ではない。
バイナリデータにはlpaq9mだけでも十分な効果がある。

XML用のXWRT
BSC(オープンソース githubでは小さなバグもうまって、安定したか?)
オープンソースになって開発中BCM(ちょっとスクロールしてみて)
クローズドソースのnanozip nanozipかなり評価の高いプログラムでしたがなんと本家サイトが閉鎖の上に、Wikipediaでも項目が削除、さらにインターネットアーカイブにもなく、
http://nanozip.ijat.my/の誰かがコピーしたバックアップサイトだけが生きています。なんということでしょう。ファイル圧縮技術はやはり超テクノロジーや軍事の側面がありそうです。

圧縮に時間が結構かかるが、展開は驚愕の早さのプログラムものっているようです。探してみて。

実用的な高圧縮プログラム

最近新しいベンチマークサイトSquash Compression Benchmarkが誕生し、グラフにしてわかりやすく表示されます。
ファイルサイズではさっきのZPAQが最強です。自分でベンチマークやっているだけ研究が進んでいるMattさんですが
そうZPAQは圧縮も展開も異常に遅い、
圧縮比と圧縮時間はトレードオフで、圧縮比が低ければもちろんそれにまして早く、圧縮比が高いとそれにまして時間と処理能力を食って、とても割に合いません。
この二つを解決するのはやはり天下のGoogleとFacebookでした。
GitHub - google/brotli
GitHub - facebook/zstd
これらなら業務でも使えるでしょう。またLinuxでよく使われるGZipを生成するがより進化したzlib-ngがintelとCloudflareのパッチが当たっていて次点です。

動画が8kBに圧縮される?

カラパイアで話題のJan Slootのテクノロジー。10GBの動画が8kBにだと?
殺されたというのがなにか特別なものを持っていたことを感じさせますが
これについては懐疑的です。
まず、5つの動画を解凍するプログラムがそれぞれ74MBもある。これは解凍アルゴリズムが圧縮データのようなものです。
有限のデータ、有限のパターンの繰り返し、文字列だけ送れば受け側でフォントがついて再現されるPostScriptやPDFのようなものって、
それだけではランレングス法とどう変わるのかわからないものです。予め出てきそうなデータ列を74MBにおさめてあるのでしょか。
それから、情報を何バイトまで圧縮できるのかというのは、もう方程式がわかっている、それを超えるというのは情報の欠損になる。
もう一つ。フリーエネルギーでさえ特に海外で挑戦する人がいるのにこの人に挑戦する人間はまったくいない。
スポンサーサイト

0 Comments

Leave a comment

テンプレートに関するご質問・不具合のご報告の際はご自身のブログアドレス記載必須です
ご質問の前に必ずお読みください ↓
FC2テンプレート ご利用時のお願い