Najwyższa kompresja plików (do przesyłania przez Internet)?

14

Widziałem kilka wysoce skompresowanych plików, na przykład 700 MB danych skompresowanych do około 30-50 MB.

Ale jak uzyskać takie skompresowane pliki? Próbowałem używać programów takich jak WinRAR i 7Zip, ale nigdy nie osiągnąłem tak wysokiej kompresji.

Jakie techniki / oprogramowanie pozwalają na tak dobrą kompresję plików?

(PS Używam Windows XP)

rzlines
źródło
Fajny pomysł ... ale skąd w ogóle takie pliki?
Robinicks,
3
Widziałem pliki dziennika serwera kompresującego 7zip (głównie tekst) do około 1% ich oryginalnego rozmiaru.
Umber Ferrule,
2
Otwórz Notatnik. Wpisz 1 miliard razy „A”. Zapisz, a następnie skompresuj. ŁAŁ! Utwórz aplikację, która zapisuje do pliku 1 miliard (prawdziwych) liczb losowych. Kompresuj to. Co?
igrimpe
igrimpe: wiele wzorców indeksów algorytmów kompresji. Miliard A to A miliard razy. Możesz to skompresować do [A] {1, 1000000000}. Jeśli masz miliard liczb losowych, trudno jest dopasować wzór, ponieważ każda kolejna liczba w danym podzbiorze zmniejsza wykładniczo prawdopodobieństwo dopasowania podzbioru.
AaronF,

Odpowiedzi:

11

Jeśli czas kompresji danych nie stanowi problemu, możesz zoptymalizować skompresowany rozmiar, używając kilku różnych narzędzi razem.

Kilka razy kompresuj dane za pomocą różnych narzędzi, takich jak 7zip, winrar (dla zip) i bjwflate.

(Należy pamiętać, że nie oznacza to wielokrotnego kompresowania pliku zip, ale raczej tworzenie wielu alternatywnych plików zip za pomocą różnych narzędzi)

Następnie uruchom deflopt na każdym archiwum, aby nieco zmniejszyć każde archiwum.

Na koniec uruchom zipmix na kolekcji archiwów. Ponieważ różne narzędzia zip są lepsze dla różnych plików, zipmix wybiera najlepszą skompresowaną wersję każdego pliku z każdego archiwum i generuje wynik, który jest mniejszy niż jakiekolwiek, które którekolwiek z narzędzi zip mogłoby wytworzyć indywidualnie.

Należy jednak pamiętać, że nie ma gwarancji działania jakiejkolwiek magii na twoje pliki. Niektóre typy danych po prostu nie kompresują się zbyt dobrze, jak JPEG i MP3. Te pliki są już wewnętrznie skompresowane.

izb
źródło
4
Pliki JPEG i MP3 nie są skompresowane. Są skompresowane, ale nie skompresowane.
KovBal
Jest to bardzo słaba rada, próba użycia wielu algorytmów kompresji po kolei jest bardzo złym pomysłem. Każdy algorytm tworzy skompresowany plik + narzut, więc używając wielu, w rzeczywistości dodajesz dane do danych, które próbujesz skompresować - to tak, jakby próbować wykopać dziurę w piasku, im głębiej zejdziesz, tym więcej piasku wleje się w ty. O wiele lepiej jest użyć jednego dobrego algorytmu przy maksymalnych ustawieniach kompresji.
Tacroy
Myślę, że źle zrozumiałeś ... te same dane nie są wielokrotnie kompresowane. Raczej wybierasz najlepszy pojedynczy algorytm na podstawie pliku, a nie archiwum.
izb
6
Kilka razy kompresja danych jest dość myląca.
ta.speot.is
12

Zależy to całkowicie od kompresji danych.

Tekst bardzo dobrze kompresuje, formaty binarne nie tak dobrze, a skompresowane dane (mp3, jpg, mpeg) wcale nie.

Oto dobra tabela porównawcza kompresji z wikipedii.

Nifle
źródło
Wiem, że kompresja zależy od rodzaju danych, ale czy istnieją jakieś specjalne techniki, które pomagają w dalszym kompresowaniu plików?
rzlines
3
Po skompresowaniu czegoś zwykle nie jest możliwe zmierzenie go w sposób wymierny. Musisz tylko wybrać odpowiednią metodę kompresji dla swoich danych.
Nifle,
Tekst można łatwo skompresować do 90%.
Georg Schölly,
@ GeorgSchölly: To świetnie. Ponieważ mogę konwertować dowolne dane na tekst, np. Konwertować każdy bajt binarny na dwie cyfry szesnastkowe wyświetlane na tekst. Podwoiłoby to mój rozmiar, ale zaoszczędzenie 90% podwojonego rozmiaru daje ogólną oszczędność 80%. (Lub mógłbym użyć base64 dla nieco większej wydajności konwersji binarnej na tekstową.) To zdumiewająco dobra wiadomość! :)
TOOGAM
8

Poprzednie odpowiedzi są błędne o rząd wielkości!

Najlepszy algorytm kompresji, z jakim mam osobiste doświadczenia, to paq8o10t (patrz strona zpaq i PDF ).

Wskazówka: polecenie kompresji plików_lub_folderów wyglądałoby następująco:

paq8o10t -5 archive files_or_folders

Rozmiar archiwum w porównaniu do czasu kompresji i wyodrębnienia 10 GB (79 431 plików) na zewnętrzny dysk twardy USB przy domyślnych i maksymalnych ustawieniach na laptopie Dell Latitude E6510 (Core i7 M620, hiperwątki 2 + 2, 2,66 GHz, 4 GB, Ubuntu Linux , Wino 1.6).  Dane z 10 GB Benchmark (system 4).

Źródło: Incremental Journaling Backup Utility and Archiver

Możesz znaleźć kopię lustrzaną kodu źródłowego na GitHub .


Nieco lepszym algorytmem kompresji i zdobywcą nagrody Huttera jest decomp8 (patrz link na stronie z nagrodami). Jednak nie ma żadnego programu do kompresji, którego można by użyć.


W przypadku naprawdę dużych plików lrzip może osiągnąć współczynniki kompresji po prostu komiczne .

Przykład z README.benchmarks:


Rozłóżmy sześć drzew jądra w jednej wersji, jako tarball, linux-2.6.31 do linux-2.6.36. Będą wyświetlać wiele zbędnych informacji, ale setki megabajtów od siebie, co lrzip będzie bardzo dobry w kompresji. Dla uproszczenia porównane zostaną tylko 7z, ponieważ jest to obecnie najlepsza sprężarka ogólnego zastosowania:

Są to testy porównawcze przeprowadzone na dwurdzeniowym procesorze Intel Core2 2,53 GHz z 4 GB pamięci RAM przy użyciu Lrzip v0.5.1. Pamiętaj, że działał z 32-bitową przestrzenią użytkownika, więc możliwe było tylko adresowanie 2 GB. Jednak test został uruchomiony z opcją -U, co pozwoliło traktować cały plik jako jedno duże okno kompresji.

Tarball z 6 kolejnych drzewek jądra.

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
źródło
Jest zoptymalizowany, aby zapewnić maksymalny współczynnik kompresji, ale jest znacznie wolniejszy niż prawie rywale.
Eric J.
2
@Eric J. tak, ale pytanie nie określało prędkości kompresji / dekompresji;)
Alexander Riccio
3

Squeezechart.com zawiera porównania różnych współczynników kompresji. Chociaż, jak stwierdzono w odpowiedzi Nifle'a, jest mało prawdopodobne, aby uzyskać tak wysokie stopnie kompresji dla formatów binarnych.

idan315
źródło
2

Większość narzędzi do kompresji ma ustawienia umożliwiające osiągnięcie wyższego stopnia kompresji przy kompromisie wolniejszych czasów kompresji / dekompresji i większego zużycia pamięci RAM.

W przypadku 7-Zip wyszukaj „Okno dialogowe Dodaj do archiwum” we wbudowanej pomocy, aby uzyskać więcej szczegółów.

Tom Robinson
źródło
2

Możesz wypróbować 7zip z następującymi ultra ustawieniami:

7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on big_file.mysql.7z big_file.mysql
kenorb
źródło
2

Wystarczy sprawdzić Podsumowanie testów testowych kompresji wielu plików, które mają najlepszą listę kompresji, która składa się na pełny test kompresji.

Top 30

wprowadź opis zdjęcia tutaj

Najlepsze wyniki (w oparciu o kompresję) w tym teście to PAQ8 i WinRK (PWCM). Są w stanie skompresować zestaw testowy 300+ Mb do mniej niż 62 Mb (80% zmniejszenie rozmiaru), ale ukończenie testu zajmuje minimum 8,5 godziny. Program numer jeden (PAQ8P) zajmuje prawie 12 godzin, a numer cztery (PAQAR) nawet 17 godzin, aby ukończyć test. WinRK, program z 2. najlepszą kompresją (79,7%) zajmuje około 8,5 godziny. Nic dziwnego, że wszystkie wspomniane programy wykorzystują silnik kompresji PAQ (podobny). Jeśli masz pliki z osadzonymi obrazami (np. Pliki Word DOC), użyj PAQ8, rozpozna je i osobno skompresuje, znacznie zwiększając kompresję. Wszystkie wymienione programy (oprócz WinRK) są bezpłatne.

LifeH2O
źródło
1

Twój najlepszy zakład tutaj wydaje się być metodą prób i błędów. Wypróbuj wszystkie dostępne techniki kompresji dla każdego pliku i wybierz najlepsze, które możesz umieścić na swojej stronie. Na szczęście komputery robią takie rzeczy dość szybko i nie nudzą się. Możesz napisać prosty skrypt automatyzujący proces, aby był on „względnie bezbolesny”.

Tylko nie oczekuj cudów - 700 mb do 30 mb po prostu nie zdarza się tak często. Pliki dziennika, jak wspomniano powyżej - tak. „Twój średni plik” - nie ma mowy.

hotei
źródło