Comment fonctionne la compression de fichier?
Les ingénieurs en logiciel ont toujours mis au point de nouvelles méthodes pour intégrer un grand nombre de données dans un espace restreint. C'était vrai quand nos disques durs étaient minuscules, et l'avènement d'Internet l'a rendu encore plus critique. La compression de fichiers joue un rôle important dans la connexion, nous permettant d’envoyer moins de données par la suite, de sorte que nous puissions télécharger plus rapidement et adapter davantage de connexions aux réseaux occupés..
Alors, comment ça marche?
Répondre à cette question impliquerait d'expliquer des calculs très compliqués, certainement plus que ce que nous pouvons couvrir dans cet article, mais vous n'avez pas besoin de comprendre précisément comment cela fonctionne mathématiquement pour comprendre les bases..
Les bibliothèques les plus courantes pour la compression de texte reposent sur deux algorithmes de compression, qui utilisent les deux en même temps pour obtenir des taux de compression très élevés. Ces deux algorithmes sont «LZ77» et «codage de Huffman». Le codage de Huffman est assez compliqué et nous n'entrerons pas dans les détails à ce sujet ici. Principalement, il utilise des mathématiques sophistiquées pour assigner plus court codes binaires en lettres individuelles, ce qui réduit la taille des fichiers. Si vous voulez en savoir plus à ce sujet, consultez cet article sur le fonctionnement du code, ou cet explicatif de Computerphile.
LZ77, en revanche, est relativement simple et nous allons en parler ici. Il cherche à supprimer les mots en double et à les remplacer par une "clé" plus petite qui représente le mot.
Prenez ce court texte par exemple:
L'algorithme LZ77 examinerait ce texte, se rendrait compte qu'il répétait «howtogeek» trois fois, et le changerait comme suit:
Ensuite, quand il voudra relire le texte, il remplacera chaque instance de (h) par «howtogeek», nous ramenant à la phrase originale..
Nous appelons la compression comme ceci «sans perte» - les données que vous avez entrées sont les mêmes que celles que vous extrayez. Rien n'est perdu.
En réalité, LZ77 n'utilise pas une liste de clés, mais remplace les deuxième et troisième occurrences par un lien en mémoire:
Alors maintenant, quand il arrive à (h), il retournera à «howtogeek» et lira cela à la place.
Si vous souhaitez une explication plus détaillée, cette vidéo de Computerphile est très utile..
Maintenant, ceci est un exemple idéalisé. En réalité, la plupart du texte est compressé avec des touches aussi petites que quelques caractères. Par exemple, le mot «le» serait compressé même lorsqu'il apparaît dans des mots tels que «là-bas», «leur» et «ensuite». Avec le texte répété, vous pouvez obtenir des taux de compression fous. Prenez ce fichier texte avec le mot «howtogeek» répété 100 fois. Le fichier texte d'origine a une taille de trois kilo-octets. Une fois compressé, il ne prend que 158 octets. C'est près de 95% de compression.
Maintenant, évidemment, c'est un exemple assez extrême puisque nous venons de répéter le même mot encore et encore. En règle générale, vous obtiendrez probablement une compression de 30 à 40% en utilisant un format de compression tel que ZIP sur un fichier contenant principalement du texte..
En passant, cet algorithme LZ77 s'applique à toutes les données binaires, et pas seulement au texte, bien que le texte soit généralement plus facile à compresser en raison du nombre de mots répétés utilisés par la plupart des langues. Une langue comme le chinois peut être un peu plus difficile à compresser que l'anglais, par exemple.
Comment fonctionne la compression d'images et de vidéos?
La compression vidéo et audio fonctionne très différemment. Contrairement au texte où vous pouvez avoir une compression sans perte et aucune donnée n'est perdue, avec les images, nous avons ce qu'on appelle «Compression avec perte» où vous perdez certaines données. Et plus vous compressez, plus vous perdez de données.
C’est ce qui conduit à des images JPEG d’apparence horrible que les gens ont téléchargées, partagées et saisies à plusieurs reprises. Chaque fois que l'image est compressée, elle perd des données.
Voici un exemple. Ceci est une capture d'écran que j'ai prise qui n'a pas été compressée du tout.
J'ai ensuite pris cette capture d'écran et l'ai parcourue plusieurs fois dans Photoshop, à chaque fois en l'exportant au format JPEG de qualité médiocre. Voici le résultat.
Ça a l'air plutôt mauvais, non?
Eh bien, il ne s'agit que du pire des cas, exportant à une qualité JPEG de 0% à chaque fois. À titre de comparaison, voici un fichier JPEG de qualité 50%, qui est presque indiscernable de l’image PNG source, à moins que vous ne le grossissiez et que vous regardiez de près..
Le format PNG de cette image était de 200 Ko, mais le format JPEG de qualité 50% n’est que de 28 Ko..
Alors, comment cela économise-t-il autant d'espace? Eh bien, l'algorithme JPEG est un exploit d'ingénierie. La plupart des images stockent une liste de nombres, chaque nombre représentant un seul pixel..
JPEG ne fait rien de tout cela. Au lieu de cela, il stocke les images en utilisant ce que l’on appelle une transformée en cosinus discrète, qui est une collection d’ondes sinusoïdales additionnées à différentes intensités. Il utilise 64 équations différentes, mais la plupart d'entre elles ne sont pas utilisées. C’est ce que fait le curseur de qualité pour JPEG dans Photoshop et d’autres applications d’image: choisir le nombre d’équations à utiliser. Les applications utilisent ensuite l'encodage Huffman pour réduire encore la taille du fichier..
Cela donne aux fichiers JPEG un taux de compression extrêmement élevé, ce qui peut réduire un fichier de plusieurs mégaoctets à quelques kilo-octets, en fonction de la qualité. Bien sûr, si vous l'utilisez trop, vous vous retrouvez avec ceci:
Cette image est horrible. Toutefois, de petites quantités de compression JPEG peuvent avoir un impact significatif sur la taille du fichier, ce qui le rend très utile pour la compression d'images sur des sites Web. La plupart des images que vous voyez en ligne sont compressées pour réduire les temps de téléchargement, en particulier pour les utilisateurs mobiles disposant de connexions de données médiocres. En fait, toutes les images de How-To Geek ont été compressées pour accélérer le chargement de la page et vous n’avez probablement jamais remarqué.
Compression de vidéo
La vidéo fonctionne un peu différemment des images. Vous penseriez qu'ils compresseraient chaque image de la vidéo en utilisant le format JPEG, et ils le font certainement, mais il existe une meilleure méthode pour la vidéo.
Nous utilisons quelque chose appelé «compression inter-images», qui calcule les modifications entre chaque image et ne les stocke que. Ainsi, par exemple, si vous avez une prise de vue relativement immobile prenant plusieurs secondes dans une vidéo, vous économiserez beaucoup d'espace, car l'algorithme de compression n'a pas besoin de stocker tout ce qui ne change pas dans la scène. La compression interframe est la raison principale pour laquelle nous avons la télévision numérique et la vidéo Web. Sans cela, les vidéos représenteraient des centaines de gigaoctets, soit plus que la taille moyenne des disques durs en 2005, lorsque YouTube avait été lancé..
De plus, étant donné que la compression intertrame fonctionne mieux avec une vidéo principalement stationnaire, c’est pourquoi les confettis ruinent la qualité vidéo..
Remarque: les fichiers GIF ne le font pas. C'est pourquoi les fichiers GIF animés sont souvent très petits et très petits, mais ont quand même une taille de fichier assez grande..
Une autre chose à garder à l'esprit à propos de la vidéo est son débit binaire - la quantité de données autorisée en une seconde. Si votre débit est de 200 kb / s, par exemple, votre vidéo aura une très mauvaise image. La qualité augmente au fur et à mesure que le débit augmente, mais après quelques mégaoctets par seconde, vous obtenez des rendements décroissants..
Ceci est un cadre zoomé tiré d'une vidéo d'une méduse. Celui de gauche est à 3 Mo / s et celui de droite, 100 Mo / s..
La taille du fichier a été multipliée par 30, mais pas par la qualité. En règle générale, les vidéos YouTube occupent entre 2 et 10 Mo / s en fonction de votre connexion, car rien de plus ne serait probablement remarqué..
Cette démo fonctionne mieux avec la vidéo réelle, donc si vous voulez la vérifier par vous-même, vous pouvez télécharger les mêmes vidéos de test de débit que celles utilisées ici..
Compression audio
La compression audio fonctionne de manière très similaire à la compression de texte et d’image. Là où JPEG supprime les détails d'une image que vous ne verrez pas, la compression audio fait de même pour les sons. Vous n'aurez peut-être pas besoin d'entendre le grincement du médiator sur la corde si la guitare est beaucoup, beaucoup plus forte..
Le format MP3 utilise également un débit binaire allant du bas de 48 et 96 kbps (le bas) à 128 et 240 kbps (plutôt bon) à 320 kbps (audio haut de gamme), et vous ne pourrez probablement entendre la différence qu'avec un casque exceptionnellement bon ( et les oreilles).
Il existe également des codecs de compression sans perte pour l'audio, le principal étant le FLAC, qui utilise l'encodage LZ77 pour fournir un son entièrement sans perte. Certaines personnes ne jurent que par la qualité audio parfaite de FLAC, mais avec la prédominance du MP3, il semble que la plupart des gens ne savent pas ou ne font pas attention à la différence.