Software-Ingenieure haben immer neue Wege entwickelt, viele Daten auf kleinem Raum unterzubringen. Das war wahr, als unsere Festplatten noch winzig waren, und das Aufkommen des Internets hat es nur noch kritischer gemacht. Die Dateikomprimierung spielt eine große Rolle dabei, uns zu verbinden, da wir weniger Daten über die Leitung senden können, damit wir schnellere Downloads haben und mehr Verbindungen in ausgelastete Netzwerke passen.
Wie funktioniert es also?
Um diese Frage zu beantworten, müsste man einige sehr komplizierte Mathematik erklären, sicherlich mehr, als wir in diesem Artikel behandeln können, aber Sie müssen nicht genau verstehen, wie es mathematisch funktioniert, um die Grundlagen zu verstehen.
Die beliebtesten Bibliotheken zum Komprimieren von Text basieren auf zwei Komprimierungsalgorithmen, die beide gleichzeitig verwenden, um sehr hohe Komprimierungsraten zu erzielen. Diese beiden Algorithmen sind „LZ77“ und „Huffman-Codierung“. Huffman-Codierung ist ziemlich kompliziert, und wir werden hier nicht ins Detail gehen. In erster Linie verwendet es eine ausgefallene Mathematik, um einzelnen Buchstaben kürzere zuzuweisen, wodurch die Dateigröße verringert wird. Wenn Sie mehr darüber erfahren möchten, schauen Sie vorbei Dieser Beitrag wie der Code funktioniert, oder das Erklärer von Computerphile.
LZ77 hingegen ist relativ einfach und wird hier behandelt. Es versucht, doppelte Wörter zu entfernen und sie durch einen kleineren „Schlüssel“ zu ersetzen, der das Wort repräsentiert.
Nehmen Sie zum Beispiel diesen kurzen Text:

Der LZ77-Algorithmus würde sich diesen Text ansehen, erkennen, dass er „howtogeek“ dreimal wiederholt, und ihn folgendermaßen ändern:

Wenn es dann den Text zurücklesen möchte, würde es jedes Vorkommen von (h) durch „howtogeek“ ersetzen, was uns zum ursprünglichen Satz zurückbringt.
Wir nennen diese Komprimierung „verlustfrei“ – die Daten, die Sie eingeben, sind dieselben wie die Daten, die Sie ausgeben. Nichts ist verloren.
In Wirklichkeit verwendet LZ77 keine Liste von Schlüsseln, sondern ersetzt stattdessen das zweite und dritte Vorkommen durch einen Link zurück in den Speicher:

Also, wenn es jetzt zu (h) kommt, wird es auf «howtogeek» zurückblicken und stattdessen das lesen.
Wenn Sie an einer genaueren Erklärung interessiert sind, dieses Video von Computerphile ist ziemlich hilfreich.
Das ist jetzt ein idealisiertes Beispiel. In Wirklichkeit wird der meiste Text mit Schlüsseln komprimiert, die nur wenige Zeichen umfassen. Zum Beispiel wird das Wort „the“ komprimiert, selbst wenn es in Wörtern wie „dort“, „ihr“ und „dann“ vorkommt. Bei wiederholtem Text können Sie einige verrückte Komprimierungsraten erhalten. Nehmen Sie diese Textdatei mit dem Wort „howtogeek“, das 100 Mal wiederholt wird. Die ursprüngliche Textdatei ist drei Kilobyte groß. Komprimiert benötigt es jedoch nur 158 Byte. Das sind fast 95 % Kompression.

Das ist natürlich ein ziemlich extremes Beispiel, da wir gerade das gleiche Wort immer wieder wiederholt haben. In der allgemeinen Praxis erreichen Sie mit einem Komprimierungsformat wie ZIP wahrscheinlich eine Komprimierung von etwa 30-40% für eine Datei, die hauptsächlich aus Text besteht.
Dieser LZ77-Algorithmus gilt übrigens für alle Binärdaten und nicht nur für Text, obwohl Text im Allgemeinen einfacher zu komprimieren ist, da die meisten Sprachen so viele wiederholte Wörter verwenden. Eine Sprache wie Chinesisch kann beispielsweise etwas schwieriger zu komprimieren sein als Englisch.
Wie funktioniert die Bild- und Videokomprimierung?

Video- und Audiokomprimierung funktioniert sehr unterschiedlich. Anders als bei Text, bei dem Sie eine verlustfreie Komprimierung durchführen können und keine Daten verloren gehen, haben wir bei Bildern die sogenannte «verlustbehaftete Komprimierung», bei der Sie einige Daten verlieren. Und je mehr Sie komprimieren, desto mehr Daten verlieren Sie.
Dies führt zu diesen schrecklich aussehenden JPEGs, die Leute mehrfach hochgeladen, geteilt und Screenshots gemacht haben. Jedes Mal, wenn das Bild komprimiert wird, gehen einige Daten verloren.
Hier ist ein Beispiel. Dies ist ein Screenshot, den ich gemacht habe, der überhaupt nicht komprimiert wurde.

Dann habe ich diesen Screenshot gemacht und mehrmals durch Photoshop laufen lassen, wobei ich ihn jedes Mal als JPEG mit niedriger Qualität exportiert habe. Hier ist das Ergebnis.

Sieht ziemlich schlecht aus, oder?
Nun, dies ist nur ein Worst-Case-Szenario, bei dem jedes Mal mit 0% JPEG-Qualität exportiert wird. Zum Vergleich: Hier ist ein JPEG mit 50 % Qualität, das kaum vom Quell-PNG-Bild zu unterscheiden ist, es sei denn, Sie blasen es auf und sehen es sich genau an.

Das PNG für dieses Bild war 200 KB groß, aber dieses JPEG mit 50 % Qualität ist nur 28 KB groß.
Wie spart es so viel Platz? Nun, der JPEG-Algorithmus ist eine technische Meisterleistung. Die meisten Bilder speichern eine Liste von Zahlen, wobei jede Zahl ein einzelnes Pixel darstellt.
JPEG tut dies nicht. Stattdessen speichert es Bilder mit einem sogenannten a Diskrete Kosinustransformation, eine Sammlung von Sinuswellen, die mit unterschiedlichen Intensitäten addiert werden. Es verwendet 64 verschiedene Gleichungen, aber die meisten davon werden nicht verwendet. Das macht der Qualitätsschieberegler für JPEG in Photoshop und anderen Bild-Apps – wählen Sie aus, wie viele Gleichungen verwendet werden sollen. Die Apps verwenden dann die Huffman-Codierung, um die Dateigröße noch weiter zu reduzieren.
Dies verleiht JPEGs eine wahnsinnig hohe Komprimierungsrate, die eine Datei, die mehrere Megabyte groß wäre, je nach Qualität auf ein paar Kilobyte reduzieren kann. Wenn Sie es zu oft verwenden, erhalten Sie natürlich Folgendes:

Dieses Bild ist schrecklich. Aber geringe Mengen an JPEG-Komprimierung können einen erheblichen Einfluss auf die Dateigröße haben, und dies macht JPEG für die Bildkomprimierung auf Websites sehr nützlich. Die meisten Bilder, die Sie online sehen, sind komprimiert, um Downloadzeiten zu sparen, insbesondere für mobile Benutzer mit schlechten Datenverbindungen. Tatsächlich wurden alle Bilder auf How-To Geek komprimiert, um das Laden der Seiten zu beschleunigen, und Sie haben es wahrscheinlich nie bemerkt.
Video-Kompression

Video funktioniert etwas anders als Bilder. Man könnte meinen, dass sie einfach jeden Videoframe mit JPEG komprimieren würden, und das tun sie sicherlich, aber es gibt eine bessere Methode für Video.
Wir verwenden eine sogenannte „Interframe-Kompression“, die die Änderungen zwischen den einzelnen Frames berechnet und nur diese speichert. Wenn Sie also beispielsweise eine relativ unbewegte Aufnahme haben, die in einem Video mehrere Sekunden dauert, wird viel Platz gespart, da der Komprimierungsalgorithmus nicht alle Dinge in der Szene speichern muss, die sich nicht ändern. Die Interframe-Komprimierung ist der Hauptgrund dafür, dass wir überhaupt digitales Fernsehen und Webvideo haben. Ohne sie wären Videos Hunderte von Gigabyte groß, mehr als die durchschnittliche Festplattengröße im Jahr 2005, als YouTube gestartet wurde.
Da die Interframe-Komprimierung am besten mit meist stationären Videos funktioniert, ist dies auch der Grund: Konfetti ruiniert die Videoqualität.
Hinweis: GIF tut dies nicht, weshalb animierte GIFs oft sehr kurz und klein sind, aber trotzdem eine ziemlich große Dateigröße haben.
Eine andere Sache, die Sie bei Videos beachten sollten, ist die Bitrate – die Datenmenge, die pro Sekunde zulässig ist. Wenn Ihre Bitrate beispielsweise 200 kb/s beträgt, sieht Ihr Video ziemlich schlecht aus. Die Qualität steigt mit steigender Bitrate, aber nach ein paar Megabyte pro Sekunde erhalten Sie abnehmende Renditen.
Dies ist ein gezoomter Frame aus einem Video einer Qualle. Die linke hat 3 Mbit/s und die rechte 100 Mbit/s.

Eine 30-fache Erhöhung der Dateigröße, aber keine große Qualitätssteigerung. Im Allgemeinen liegen YouTube-Videos je nach Verbindung zwischen 2 und 10 Mb/s, da alles andere wahrscheinlich nicht bemerkt wird.
Diese Demo funktioniert besser mit tatsächlichen Videos. Wenn Sie sie also selbst ausprobieren möchten, können Sie sie herunterladen Bitraten-Testvideos hier verwendet.
Audiokomprimierung

Die Audiokomprimierung funktioniert sehr ähnlich wie die Text- und Bildkomprimierung. Wo JPEG Details aus einem Bild entfernt, die Sie nicht sehen, tut die Audiokomprimierung dasselbe für Töne. Möglicherweise müssen Sie das Knarren des Plektrums auf der Saite nicht hören, wenn die eigentliche Gitarre viel, viel lauter ist.
MP3 verwendet auch Bitraten, die vom unteren Ende von 48 und 96 kbps (das untere Ende) über 128 und 240 kbps (ziemlich gut) bis 320 kbps (High-End-Audio) reichen, und Sie werden den Unterschied wahrscheinlich nur mit außergewöhnlich guten Kopfhörern hören ( und Ohren).
Es gibt auch verlustfreie Komprimierungscodecs für Audio – der wichtigste davon ist FLAC –, die die LZ77-Codierung verwenden, um völlig verlustfreies Audio zu liefern. Einige Leute schwören auf die perfekte Audioqualität von FLAC, aber mit der Prävalenz von MP3 scheinen die meisten Leute den Unterschied entweder nicht zu erkennen oder zu stören.