Wie kann ich eine Reihe von Dateien effizient komprimieren?

485
CidTori

Angenommen, Sie haben viele Dateien zum Archivieren. Sie liegen in verschiedenen Dateiformaten vor (txt, docx, pdf, png, jpg, mp3, zip usw.).

Was sind die besten Vorgehensweisen, um sie alle so zu komprimieren, dass sie möglichst wenig Platz beanspruchen?

Laut dieser Frage ist es beispielsweise sinnlos, eine oder mehrere bereits komprimierte Dateien mit demselben Kompressionsalgorithmus zu komprimieren. Sie können jedoch durch die Verwendung verschiedener Algorithmen bessere Kompressionsraten erzielen.

Ein anderes Beispiel: Ist es das Beste, Dateien mit demselben Dateiformat zusammen zu komprimieren?

Ich interessiere mich nicht dafür, welches Kompressionsformat im Allgemeinen am besten ist, aber es wäre interessant zu wissen, ob einige von ihnen in einigen Fällen bessere Ergebnisse erzielen.

0
msgstr "verschiedene Dateiformate." ... zum Beispiel...? Ich denke dabei auch an den "Bitverfall" der verknüpften Antwort. RAR & PAR sind im Laufe der Zeit widerstandsfähiger und eine weitaus bessere Investition, als nur ein paar Bytes zu sparen. Tetsujin vor 5 Jahren 0

1 Antwort auf die Frage

0
Austin Hemmelgarn

Abgesehen von Text- und PDF-Dateien ist alles, was Sie aufgelistet haben, bereits komprimiert. DOCX-Dateien sind gzip (wirklich DEFLATE, aber sie verwenden einen gzip-kompatiblen Header), komprimiertes XML, PNG verwendet DEFLATE, JPG und MP3 (und ihre eigene Kombination von Algorithmen ist spezifisch für ihr Format) und ZIP-Dateien Verwenden Sie entweder DEFLATE oder gelegentlich BZip2. Von diesen werden wahrscheinlich nur JPEG und MPEG signifikant bessere Komprimierungsraten erhalten. Dies ist jedoch nur der Fall, wenn sie am Anfang minimal komprimiert wurden, und selbst dann sind die Gewinne wahrscheinlich minimal. Die PDF-Dateien können auch nicht sehr gut komprimiert werden, da es sich meistens um Bilder und nicht um Text handelt, die wahrscheinlich auch bereits komprimiert sind (normalerweise mit JPEG-Komprimierung).

Nun, aus dem Weg, zu Ihren primären Fragen:

Hilft das Gruppieren ähnlicher Dateitypen?

Manchmal ja manchmal nein. Wenn die Dateien alle kleiner als die Blockgröße des Kompressionsalgorithmus sind, kann dies möglicherweise sehr hilfreich sein. Wenn sie alle größer sind, hilft das normalerweise nicht viel. Bei Textdateien (entweder Nur-Text-Dateien oder Dateien, die sie wie PDF einkapseln) kann das Gruppieren von Dateien derselben Sprache sehr hilfreich sein, wenn die Dateien kleiner als die Kompressionsblockgröße sind, da in der Regel eine beträchtliche Anzahl von Dateien vorhanden ist Redundanz in den Daten.

Ob dies in Ihrem Fall wahrscheinlich helfen wird, müssen Sie leider testen.

Sind bestimmte Algorithmen in bestimmten Fällen besser als andere?

Absolut. Beispiele hierfür sind JPEG und MPEG Layer 3. Beide sind für die Komprimierung einer bestimmten Art von Daten (entweder Bilder oder Audio) optimiert. Brotli ist ein weiteres gutes Beispiel dafür, dass es unter bestimmten Umständen besser ist. Es ist für das Streaming von Textdaten optimiert. Die meisten der Komprimierungsformate, die Sie wahrscheinlich verwenden würden, sind allgemeiner Zweck. Dies bedeutet normalerweise, dass sie beim Komprimieren von Daten wie Textdaten und beim Komprimieren von Daten, die nicht in einem byteweisen Stream strukturiert sind, eine ziemlich schlechte Arbeit leisten (DEFLATE ist ein Universalalgorithmus, eine Tatsache, die sich wirklich zeigt, wenn Sie die Größe eines PNG-Bildes mit einem ansonsten identischen JPEG-Bild vergleichen).

In Anbetracht der Tatsache, dass Sie viele gemischte Daten haben, sollten Sie sich wahrscheinlich nicht allzu viele Sorgen machen.

Was ist der effizienteste Weg, um viele Daten zu archivieren, so dass wenig Platz benötigt wird?

Wahrscheinlich eine Variante von PAQ . Die PAQ-Algorithmen werden im Allgemeinen als die (in Bezug auf das Kompressionsverhältnis) besten Allzweck-Kompressionsalgorithmen angesehen, die allgemein verfügbar sind. Sie benötigen auch FOREVER, um Datenmengen in angemessener Größe zu komprimieren, sodass sie in Ihrem speziellen Fall möglicherweise nicht praktikabel sind. Realistischere Optionen in Bezug auf ihre Dauer sind:

  • XZ : Hierbei wird die LZMA-Komprimierung mit zusätzlicher Vorverarbeitung verwendet, wodurch der Maschinencode überdurchschnittlich komprimiert werden kann. Auf jeder Plattform außer Windows weit verbreitet (obwohl es unter Windows erhältlich ist), und erhält im Allgemeinen wirklich gute Kompressionsraten (LZMA ist einer der aktuellen Goldstandards für einen Kompressionsalgorithmus, der angemessene Leistung und gute Kompressionsraten bietet).
  • zstd : Dies ist eine neuere Version, die von den großen Software-Ingenieuren für Facebook entwickelt wurde. In den meisten Fällen läuft es schneller als XZ und erhält vergleichbare Kompressionsverhältnisse (in meiner Erfahrung normalerweise etwas besser). Noch nicht so weit verbreitet, aber einen Versuch wert, wenn Sie es auf Ihrem System finden können.

In jedem Fall benötigen Sie ein Archivformat, um die Dateien zusammenzufassen, wenn Sie möchten, dass alle Dateien an einem Ort verwaltet werden. Tar ist das Format, das ich normalerweise verwende, aber ich beschäftige mich hauptsächlich mit Linux. Eine ZIP-Datei ohne Komprimierung (Sie können dies unter Windows über die Befehlszeile tun) funktioniert ebenfalls.

Wenn Sie über eine sehr große Anzahl von Dateien verfügen, würde ich vorschlagen, dass Sie sie in mehreren kleineren Archiven statt in einem großen Archiv gruppieren. Dies wird Ihre Kompressionsraten ein wenig beeinträchtigen, spart Ihnen jedoch später viel Zeit, wenn Sie Daten aus dem Archiv holen müssen, und erleichtert die Wiederherstellung eines beschädigten Archivs.

Wenn Sie die Wiederherstellungsdaten für Ihr Archiv richtig einrichten möchten, tun Sie dies für das endgültige Format, das Sie auf der Festplatte speichern möchten (also die endgültige, komprimierte, Archivdatei oder Dateien). Eine einzelne Bitänderung in einem komprimierten Datenstrom kann das Ergebnis der Dekomprimierung des Streams vollständig ändern. Die Korrektur von Fehlern vor dem Dekomprimieren ist daher etwas einfacher als das nachfolgende Vorgehen (da das Dekomprimieren die Größe des Fehlers verstärkt).

Es scheint, dass es keine "feste Blockgröße" in 7zip gibt, wenn die "zip" -Komprimierung verwendet wird. Wie kann ich also sicherstellen, dass in diesem Fall "die Dateien kleiner sind als die Kompressionsblockgröße"? CidTori vor 5 Jahren 0