Kompresi tertinggi untuk file (untuk transfer web)?

14

Saya telah melihat beberapa file yang sangat terkompresi, seperti 700MB data yang dikompresi menjadi sekitar 30-50MB.

Tetapi bagaimana Anda mendapatkan file terkompresi seperti itu? Saya telah mencoba menggunakan perangkat lunak seperti WinRAR dan 7Zip tetapi belum pernah mencapai kompresi setinggi itu.

Apa teknik / perangkat lunak yang memungkinkan Anda mengompres file dengan sangat baik?

(PS Saya menggunakan Windows XP)

rzlines
sumber
Ide bagus ... tapi dari mana Anda mendapatkan file seperti itu?
Robinicks
3
Saya telah melihat 7zip kompres file log server (terutama teks) ke sekitar 1% dari ukuran aslinya.
Umber Ferrule
2
Buka Notepad. Ketik 1 Miliar kali "A". Simpan, lalu kompres. WOW! Buat aplikasi yang menulis 1 Miliar (benar) nomor acak ke file. Kompres itu. HAH?
igrimpe
igrimpe: Banyak pola indeks algoritma kompresi. A miliar A adalah A miliar kali. Anda dapat mengompresnya menjadi [A] {1, 1000000000}. Jika Anda memiliki satu miliar angka acak, menjadi sulit untuk melakukan pencocokan pola karena setiap angka berurutan dalam subset tertentu mengurangi kemungkinan subset pencocokan secara eksponensial.
AaronF

Jawaban:

11

Jika waktu yang dibutuhkan untuk kompres data tidak menjadi masalah, maka Anda dapat mengoptimalkan ukuran terkompresi dengan menggunakan beberapa alat berbeda secara bersamaan.

Kompres data beberapa kali menggunakan alat yang berbeda seperti 7zip, winrar (untuk zip) dan bjwflate.

(Perhatikan bahwa ini tidak berarti memampatkan file zip berulang-ulang, melainkan membuat sejumlah file zip alternatif menggunakan alat yang berbeda)

Selanjutnya, jalankan deflopt pada setiap arsip untuk mengurangi sedikit setiap arsip.

Terakhir, jalankan zipmix pada koleksi arsip. Karena alat zip yang berbeda lebih baik pada file yang berbeda, zipmix mengambil versi terkompresi terbaik dari setiap file dari masing-masing arsip dan menghasilkan output yang lebih kecil daripada apa pun yang bisa dihasilkan oleh alat zip secara terpisah.

Namun Anda harus mencatat bahwa ini tidak dijamin akan menghasilkan sihir apa pun pada file Anda. Jenis data tertentu tidak kompres dengan baik, seperti JPEG dan MP3. File-file ini sudah dikompresi secara internal.

izb
sumber
4
JPEG dan MP3 tidak di-zip. Mereka dikompresi tetapi tidak di-zip.
KovBal
Ini saran yang sangat buruk, mencoba menggunakan beberapa algoritma kompresi secara berurutan adalah ide yang sangat buruk. Setiap algoritma membuat file terkompresi + overhead, jadi dengan menggunakan banyak Anda benar-benar menambahkan data ke data yang Anda coba kompres - itu seperti mencoba menggali lubang di pasir, semakin dalam Anda masuk semakin banyak pasir masuk ke dalam kamu. Anda jauh lebih baik menggunakan algoritma tunggal yang bagus pada pengaturan kompresi maksimum.
Tacroy
Saya pikir Anda salah paham .. data yang sama tidak dikompres berulang kali. Alih-alih Anda hanya memilih algoritma tunggal terbaik berdasarkan per file daripada per arsip.
izb
6
Kompres data beberapa kali cukup menyesatkan.
ta.speot.is
12

Ini sepenuhnya tergantung pada data yang dikompresi.

Kompres teks sangat baik, format biner tidak begitu baik dan data terkompresi (mp3, jpg, mpeg) tidak sama sekali.

Berikut adalah Tabel Perbandingan Kompresi yang baik dari wikipedia.

Nifle
sumber
Saya menyadari bahwa kompresi tergantung pada jenis data, tetapi apakah ada teknik khusus yang membantu Anda mengompres file lebih lanjut?
rzlines
3
Setelah Anda mengompres sesuatu, biasanya tidak mungkin untuk membuatnya lebih kecil secara terukur. Anda hanya perlu memilih metode kompresi yang sesuai untuk data Anda.
Nifle
Teks dapat dengan mudah dikompresi hingga 90%.
Georg Schölly
@ GeorgSchölly: Luar biasa. Karena saya dapat mengubah data apa pun menjadi teks, mis., Konversi setiap byte biner menjadi dua digit heksadesimal yang ditampilkan ke dalam teks. Itu akan menggandakan ukuran saya, tetapi kemudian menghemat 90% dari ukuran dua kali lipat menghasilkan penghematan keseluruhan 80%. (Atau, saya bisa menggunakan base64 untuk sedikit lebih efisien dalam konversi biner ke teks.) Ini adalah berita luar biasa hebat! :)
TOOGAM
8

Jawaban sebelumnya salah dengan urutan besarnya!

Algoritma kompresi terbaik yang saya punya pengalaman pribadi adalah paq8o10t (lihat halaman zpaq dan PDF ).

Petunjuk: perintah untuk mengompres files_or_folders akan seperti:

paq8o10t -5 archive files_or_folders

Ukuran arsip vs. waktu untuk mengompresi dan mengekstrak 10 GB (79.431 file) ke hard drive USB eksternal pada pengaturan default dan maksimum pada laptop Dell Latitude E6510 (Core i7 M620, 2 + 2 hyperthreads, 2,66 GHz, 4 GB, Ubuntu Linux , Anggur 1.6).  Data dari 10 GB Tolok Ukur (sistem 4).

Sumber: Utilitas dan Pengarsipan Pencadangan Jurnal Inkremental

Anda dapat menemukan mirror dari kode sumber di GitHub .


Algoritma kompresi yang sedikit lebih baik, dan pemenang Hadiah Hutter , didekompilasi8 (lihat tautan di halaman hadiah). Namun, tidak ada program kompresor yang benar-benar dapat Anda gunakan.


Untuk file yang sangat besar, lrzip dapat mencapai rasio kompresi yang cukup lucu .

Contoh dari README.benchmarks:


Mari kita ambil enam pohon kernel satu versi terpisah sebagai tarball, linux-2.6.31 ke linux-2.6.36. Ini akan menunjukkan banyak informasi yang berlebihan, tetapi terpisah ratusan megabyte, yang lrzip akan sangat baik dalam mengompresi. Untuk kesederhanaan, hanya 7z yang akan dibandingkan karena itu adalah kompresor tujuan umum terbaik saat ini:

Ini adalah benchmark yang dilakukan pada Intel Core2 2.53GHz dual core dengan ram 4GB menggunakan lrzip v0.5.1. Perhatikan bahwa itu berjalan dengan userspace 32 bit sehingga hanya pengalamatan 2GB yang memungkinkan. Namun benchmark dijalankan dengan opsi -U yang memungkinkan seluruh file diperlakukan sebagai satu jendela kompresi besar.

Tarball dari 6 pohon kernel berturut-turut.

Compression    Size                 Percentage      Compress    Decompress
None           2373713920           100             [n/a]       [n/a]
7z             344088002            14.5            17m26s      1m22s
lrzip          104874109            4.4             11m37s      56s
lrzip -l       223130711            9.4             05m21s      1m01s
lrzip -U       73356070             3.1             08m53s      43s
lrzip -Ul      158851141            6.7             04m31s      35s
lrzip -Uz      62614573             2.6             24m42s      25m30s
Alexander Riccio
sumber
Ini dioptimalkan untuk memberikan rasio kompresi maksimum, tetapi jauh lebih lambat daripada pesaing dekat.
Eric J.
2
@ Eric J. ya, tapi pertanyaannya tidak menentukan kecepatan kompresi / dekompresi;)
Alexander Riccio
3

Squeezechart.com berisi perbandingan berbagai tingkat kompresi. Meskipun, seperti yang dinyatakan oleh jawaban Nifle - Anda tidak mungkin mendapatkan tingkat kompresi yang tinggi untuk format biner.

idan315
sumber
2

Sebagian besar alat kompresi memiliki pengaturan untuk memungkinkan Anda mencapai tingkat kompresi yang lebih tinggi dengan kompromi waktu kompresi / dekompresi yang lebih lambat dan penggunaan RAM yang lebih banyak.

Untuk 7-Zip, cari "Tambahkan ke Kotak Dialog Arsip" di bantuan bawaan untuk detail lebih lanjut.

Tom Robinson
sumber
2

Anda dapat mencoba 7zip dengan pengaturan ultra berikut:

7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on big_file.mysql.7z big_file.mysql
kenorb
sumber
2

Cukup periksa Ringkasan dari beberapa tes benchmark kompresi file yang memiliki daftar kompresi terbaik yang terdiri dari benchmark kompresi lengkap.

30 teratas

masukkan deskripsi gambar di sini

Performa terbaik (berdasarkan kompresi) dalam tes ini adalah PAQ8 dan WinRK (PWCM). Mereka dapat mengompres testset 300+ Mb menjadi di bawah 62 Mb (pengurangan 80% ukuran) tetapi membutuhkan minimal 8,5 jam untuk menyelesaikan tes. Program nomor satu (PAQ8P) memakan waktu hampir 12 jam dan nomor empat (PAQAR) bahkan 17 jam untuk menyelesaikan tes. WinRK, program dengan kompresi terbaik ke-2 (79,7%) membutuhkan waktu sekitar 8,5 jam. Tidak mengherankan semua program yang disebutkan menggunakan mesin PAQ (-seperti) untuk kompresi. Jika Anda memiliki file dengan gambar yang disematkan (misalnya file Word DOC) menggunakan PAQ8, itu akan mengenalinya dan secara terpisah mengompresnya, meningkatkan kompresi secara signifikan. Semua program yang disebutkan (kecuali WinRK) tidak dikenai biaya.

LifeH2O
sumber
1

Taruhan terbaik Anda di sini tampaknya coba-coba. Coba semua teknik kompresi yang tersedia di setiap file dan pilih yang terbaik untuk diletakkan di situs web Anda. Untungnya komputer melakukan hal semacam ini dengan cukup cepat dan tidak bosan. Anda dapat menulis skrip sederhana untuk mengotomatiskan proses sehingga akan "relatif tidak menyakitkan".

Hanya saja, jangan berharap keajaiban - 700 mb hingga 30 mb tidak sering terjadi. Log file seperti yang disebutkan di atas - ya. "File rata-rata Anda" - tidak mungkin.

hotei
sumber