Wie funktioniert die Dateikomprimierung?
Softwareentwickler haben immer neue Möglichkeiten entwickelt, viele Daten auf kleinem Raum unterzubringen. Es war wahr, als unsere Festplatten winzig waren, und das Aufkommen des Internets hat es gerade kritischer gemacht. Die Dateikomprimierung spielt eine wichtige Rolle bei der Verbindung mit uns, so dass wir weniger Daten auf der ganzen Linie senden können, sodass wir schneller herunterladen und mehr Verbindungen in stark ausgelastete Netzwerke integrieren können.
Wie funktioniert es??
Um diese Frage zu beantworten, müssten Sie einige sehr komplizierte mathematische Grundlagen erklären, sicherlich mehr als wir in diesem Artikel behandeln können. Sie müssen jedoch nicht genau verstehen, wie mathematisch funktioniert, um die Grundlagen zu verstehen.
Die am häufigsten verwendeten Bibliotheken zum Komprimieren von Text basieren auf zwei Komprimierungsalgorithmen, die beide gleichzeitig verwenden, um sehr hohe Komprimierungsraten zu erreichen. Diese beiden Algorithmen sind "LZ77" und "Huffman-Codierung". Die Huffman-Codierung ist ziemlich kompliziert, und wir werden hier nicht ins Detail gehen. In erster Linie verwendet es etwas ausgefallene Mathematik, um kürzer zuzuordnen Binärcodes auf einzelne Briefe, verkleinert dabei die Dateigrößen. Wenn Sie mehr darüber erfahren möchten, lesen Sie diesen Artikel zur Funktionsweise des Codes oder dieses Erklärers von Computerphile.
LZ77 ist dagegen relativ einfach und darüber reden wir hier. Es versucht, doppelte Wörter zu entfernen und sie durch einen kleineren "Schlüssel" zu ersetzen, der das Wort darstellt.
Nehmen Sie zum Beispiel diesen kurzen Text:
Der LZ77-Algorithmus würde sich diesen Text ansehen, erkennen, dass er "howtogeek" dreimal wiederholt, und dies folgendermaßen ändern:
Wenn der Text dann zurückgelesen werden soll, würde er jede Instanz von (h) durch "howtogeek" ersetzen, wodurch wir zum ursprünglichen Satz zurückkehren.
Wir nennen Komprimierung wie diese „verlustfrei“ - die eingegebenen Daten sind die gleichen wie die Daten, die Sie erhalten. Nichts ist verloren.
In Wirklichkeit verwendet LZ77 keine Liste von Schlüsseln, sondern ersetzt das zweite und dritte Vorkommen durch eine Verknüpfung im Speicher:
Wenn es also zu (h) kommt, wird es wieder auf "howtogeek" zurückblicken und stattdessen lesen.
Wenn Sie an einer detaillierteren Erklärung interessiert sind, ist dieses Video von Computerphile sehr hilfreich.
Dies ist nun ein idealisiertes Beispiel. In der Realität wird der meiste Text mit Schlüsseln komprimiert, die nur wenige Zeichen umfassen. Das Wort „the“ würde beispielsweise komprimiert, auch wenn es in Wörtern wie „dort“, „ihrer“ und „dann“ erscheint. Mit wiederholtem Text können Sie verrückte Kompressionsverhältnisse erhalten. Nehmen Sie diese Textdatei mit dem Wort "howtogeek", das 100 Mal wiederholt wird. Die Originaltextdatei ist drei Kilobyte groß. Im komprimierten Zustand werden jedoch nur 158 Byte benötigt. Das ist fast 95% Kompression.
Nun, offensichtlich ist dies ein ziemlich extremes Beispiel, da wir immer wieder dasselbe Wort wiederholt haben. In der allgemeinen Praxis erhalten Sie wahrscheinlich eine Komprimierung von 30-40%, wenn Sie ein Komprimierungsformat wie ZIP für eine Datei verwenden, die hauptsächlich aus Text besteht.
Dieser LZ77-Algorithmus gilt übrigens für alle binären Daten und nicht nur für Text, obwohl Text im Allgemeinen einfacher zu komprimieren ist, da die meisten Sprachen sich wiederholende Wörter verwenden. Eine Sprache wie Chinesisch kann zum Beispiel etwas schwieriger zu komprimieren sein als Englisch.
Wie funktioniert die Komprimierung von Bildern und Videos??
Die Video- und Audiokomprimierung funktioniert sehr unterschiedlich. Im Gegensatz zu Text, bei dem eine verlustfreie Komprimierung möglich ist und keine Daten verloren gehen, haben wir bei Bildern eine so genannte "verlustbehaftete Komprimierung", bei der Daten verloren gehen. Und je mehr Sie komprimieren, desto mehr Daten verlieren Sie.
Dies führt dazu, dass diese schrecklich aussehenden JPEGs mehrmals hochgeladen, geteilt und Screenshots erstellt wurden. Jedes Mal, wenn das Bild komprimiert wird, verliert es einige Daten.
Hier ist ein Beispiel. Dies ist ein Screenshot, den ich überhaupt nicht komprimiert habe.
Ich habe dann diesen Screenshot gemacht und ihn mehrmals in Photoshop durchlaufen lassen, wobei er jedes Mal als JPEG von geringer Qualität exportiert wurde. Hier ist das Ergebnis.
Sieht ziemlich schlecht aus, richtig?
Nun, dies ist nur ein Worst-Case-Szenario, bei dem jedes Mal bei 0% JPEG-Qualität exportiert wird. Zum Vergleich: Hier ist ein JPEG von 50% Qualität, das sich kaum vom ursprünglichen PNG-Bild unterscheidet, wenn Sie es nicht in die Luft sprengen und genau hinschauen.
Das PNG-Bild für dieses Bild war 200 KB groß, aber dieses JPEG mit 50% Qualität ist nur 28 KB groß.
Wie spart man so viel Platz? Nun, der JPEG-Algorithmus ist eine technische Meisterleistung. Die meisten Bilder speichern eine Liste mit Zahlen, wobei jede Zahl ein einzelnes Pixel darstellt.
JPEG macht das nicht. Stattdessen werden Bilder mit einer sogenannten diskreten Cosinus-Transformation gespeichert. Hierbei handelt es sich um eine Sammlung von Sinuswellen, die mit unterschiedlichen Intensitäten addiert werden. Es werden 64 verschiedene Gleichungen verwendet, aber die meisten davon werden nicht verwendet. Dies ist der Qualitätsschieberegler für JPEG in Photoshop und anderen Image-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.
Dadurch erhalten JPEGs eine wahnsinnig hohe Komprimierungsrate, wodurch sich eine Datei, die mehrere Megabytes betragen würde, je nach Qualität auf einige Kilobyte reduzieren kann. Wenn Sie es zu viel verwenden, erhalten Sie natürlich Folgendes:
Dieses Bild ist schrecklich. Geringe Mengen an JPEG-Komprimierung können jedoch erhebliche Auswirkungen auf die Dateigröße haben. Daher ist JPEG für die Bildkomprimierung auf Websites sehr nützlich. Die meisten Bilder, die Sie online sehen, werden komprimiert, um Downloadzeiten zu sparen, insbesondere für mobile Benutzer mit schlechten Datenverbindungen. Tatsächlich wurden alle Bilder in How-To-Geek komprimiert, um das Laden von Seiten zu beschleunigen, und Sie haben es wahrscheinlich nie bemerkt.
Video-Kompression
Video funktioniert etwas anders als Bilder. Man könnte meinen, sie würden einfach jedes Videobild mit JPEG komprimieren, und das tun sie auf jeden Fall, aber es gibt eine bessere Methode für Videos.
Wir verwenden eine sogenannte "Interframe-Komprimierung", die die Änderungen zwischen den einzelnen Frames berechnet und nur diese speichert. Wenn Sie z. B. eine relativ stille Aufnahme haben, die mehrere Sekunden in einem Video benötigt, wird viel Speicherplatz gespart, da der Kompressionsalgorithmus nicht alle Elemente in der Szene speichern muss, die sich nicht ändern. Die Interframe-Komprimierung ist der Hauptgrund, warum wir überhaupt digitales Fernsehen und Web-Video haben. Andernfalls wären Videos Hunderte von Gigabyte, mehr als die durchschnittliche Festplattengröße von 2005, als YouTube eingeführt wurde.
Da die Interframe-Komprimierung am besten für meist stationäre Videos geeignet ist, ruiniert Konfetti die Videoqualität.
Hinweis: GIF macht dies nicht, weshalb animierte GIFs oft sehr kurz und klein sind, aber immer noch eine ziemlich große Dateigröße haben.
Eine andere Sache, die bei Videos berücksichtigt werden muss, ist die Bitrate, also die pro Sekunde erlaubte Datenmenge. 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 Megabytes pro Sekunde werden die Renditen geringer.
Dies ist ein gezoomter Rahmen, der aus einem Video einer Qualle aufgenommen wurde. Der Linke ist bei 3 MBit / s und der Linke rechts ist 100 MBit / s.
Eine 30-fache Vergrößerung der Dateigröße, aber keine wesentliche Steigerung der Qualität. In der Regel werden YouTube-Videos je nach Verbindung zwischen 2 und 10 MBit / s gespeichert, da sonst wahrscheinlich nichts mehr bemerkt wird.
Diese Demo funktioniert besser mit dem eigentlichen Video. Wenn Sie es also selbst ausprobieren möchten, können Sie die gleichen Bitrate-Testvideos herunterladen, die hier verwendet werden.
Audiokomprimierung
Die Audiokomprimierung funktioniert sehr ähnlich wie die Text- und Bildkomprimierung. Wenn JPEG Details aus einem Bild entfernt, die Sie nicht sehen, macht die Audiokomprimierung dasselbe für Töne. Sie müssen möglicherweise nicht das Knarren des Gitarrenspiels an der Saite hören, wenn die eigentliche Gitarre viel, viel lauter ist.
MP3 verwendet auch die Bitrate, die von 48 bis 96 Kbit / s (im unteren Bereich) über 128 und 240 Kbit / s (ziemlich gut) bis 320 Kbit / s (High-End-Audio) reicht. und Ohren).
Es gibt auch verlustfreie Komprimierungscodecs für Audio - der wichtigste ist FLAC -, der die LZ77-Codierung verwendet, um völlig verlustfreies Audio zu liefern. Einige Leute schwören auf die perfekte Audioqualität von FLAC, aber mit der Verbreitung von MP3 scheint es, als würden die meisten Leute den Unterschied entweder nicht erkennen oder stören.