Nous vivons dans un monde compressé

closeCet article a été publié il y a 6 ans 1 mois 2 jours, il est donc possible qu’il ne soit plus à jour. Les informations proposées sont donc peut-être expirées.

Nouvel article de vulgarisation aujourd’hui, pour expliquer les principes et les objectifs de la compression de données, les différents types, les usages. Et vous allez voir que vous ne voyez ou entendez que très rarement la version originale d’un contenu. Mais c’est nécessaire.

Un problème de poids

Pour rappel, toute information dans le monde informatique se résume à un 0 ou un 1 (un bit). On les groupe souvent ensuite par un certain nombre (8 pour en faire des octets par exemple), qu’on agence ensuite pour donner un sens plus humain au contenu. Le problème, c’est que plus on met d’informations, plus ces séries de zéros et de uns prennent de la place, et ça coûte cher à tous les niveaux, que ça soit pour les stocker ou pour les transmettre.

J’ai déjà pu évoquer la problématique lors de l’article des termes expliqués sur le multimédia je crois. Il ne s’agit pas de me recopier, mais pour donner un exemple, un client de LinkByNet qui verse dans la production de films, nous demande d’étudier une solution de stockage déporté pour conserver tous les rushes bruts d’une œuvre, avec une moyenne d’environ 20To… par film. Sachant que la version Bluray que vous achetez tient sur une galette de 50Go, même en ne se concentrant que sur une partie, ça fait au moins 20 fois moins. Et ça en grande partie grâce à la compression, sachant que le nombre qu’il nous ont donné concerne des données qui peuvent en partie être déjà compressées.

Mais la compression prend différentes formes dans le domaine de l’informatique, et parfois vous ne voyez tout simplement rien si vous ne vous attardez pas dessus.

Compression sans perte ou avec perte ?

Avant que vous fassiez une crise cardiaque en apprenant qu’il existe des algorithmes de compression qui détruisent de l’information, concentrons-nous sur ceux qui ,e le font pas. Ai-je besoin d’expliquer vraiment le concept ? Il s’agit de réduire la taille d’un fichier sans en altérer le contenu, donc on a exactement, au bit près, la même information une fois décompressé.

Prenons l’exemple d’un fichier texte avec le contenu suivant :

11 caractères, et on voit qu’il y a 9 fois le caractères o. Pour compresser, il suffit de remplacer toutes les occurrences du o par l’information suivante :

Ce qui ne fait plus que 7 caractères, et encore, on pourrait éventuellement dans le cas présent s’épargner les parenthèses en procédant autrement, soit 5 caractère au lieu de 11. Je passe sur les détails mathématiques qui permettent à des formats comme le 7z (dont l’algorithme derrière est le LZMA) d’aller beaucoup plus loin, ne serait-ce que parce que je ne les maîtrise peu ou pas du tout.

La compression avec perte, elle, part du principe qu’on peut faire une croix sur une partie de l’information sans altérer le sens du message. C’est très, très souvent utilisé en multimédia, où l’on va dégrader volontairement la qualité du son et/ou de l’image, ce qui n’altère que peu la perception de l’information. Notez bien que je ne parle pas de dimensions de l’image, mais bien de l’information qui la compose. Pour le son, on va s’attarder notamment sur les fréquences que l’oreille humaine est censée entendre et supprimer les informations rattachées à celle qu’on entend pas. En modulant également d’autres paramètres on peut encore gagner un peu en taille, mais plus on enlève d’information, plus la qualité est mauvaise.

Dans le domaine visuel prenons l’exemple d’une image, dont les couleurs sont enregistrées sur 24 bit (8 bit par couleur), ce qui fait 16 millions de nuances. En réduisant le nombre de bits pour les couleurs (16), on n’a plus que 65536 nuances, pour certaines images c’est suffisant, mais pour d’autres, on verra apparaître de gros aplats. De manière plus fine on peut voir ce genre d’effet sur des vidéos fortement compressées.

Quel type pour quel usage ?

Avec perte

J’ai donc évoqué et réutilisé des exemples de compression avec perte pour le multimédia, et sachez que même lors d’un appel téléphonique, que ce soit à l’ancienne sur une ligne filaire ou en VoIP (par une box ADSL), on fait appel à de la compression audio pour limiter la taille de la voix. C’est une évidence : moins on transfère d’information, plus vite on la transmet, et la conversation semble du coup instantanée, dans le cas contraire, quand la transmission est lente, on peut avoir des décalages (de nos jours, pensez au streaming ou aux journalistes en direct qui répondent depuis l’autre bout du monde avec plusieurs secondes de délai).

Avec l’évolution à la fois de la taille des contenus bruts et des puissances de calcul, les algorithmes évoluent également, souvent pour obtenir une meilleure qualité. Un fichier en x264 utilisant la même source sera moins gros et de meilleure qualité qu’un fichier en XviD. D’un côté on a un format qui date de la fin des années 90 (le XviD), de l’autre on a une norme qui s’est développée entre 2003 et 2012 avec en tête des objectifs différents en termes de qualité et un état de l’art sur la recherche bien plus avancé. Il y a malgré tout quelques exceptions notamment dans l’image et l’audio, avec respectivement les formats PNG et FLAC qui sont des compressions sans perte.

Dans les jeux vidéos, tout le monde aura remarqué que parfois, les détails d’un personnage sont « flous ». Pour savoir pourquoi, il faut penser à la façon dont on dessine un personnage à l’écran. On commence par la forme, avec des triangles. Chaque triangle représente donc une surface, sur laquelle on applique une texture. En pratique, la texture est un fichier qui contient différentes informations destinées à refléter un matériau, à l’image d’une texture du monde réel. Elle contient évidemment un dessin, une image, et la texture a la particularité d’être plus ou moins floue en fonction du paramètre de décompression qu’on lui applique. C’est à dire que la qualité de décompression définit le temps que que la carte va passer dessus. Avec les jeux PC qui doivent pouvoir afficher un résultat pas trop dégueu en 4K, on comprend que les jeux pèsent maintenant plus de 60Go.

Alors est-ce que finalement la compression avec perte est devenue la norme ? Fort heureusement non ! (village, envahisseur toussa toussa).

Sans perte

Mais si on peut gagner en place pour un transport ou un stockage, on ne va pas se priver. Certains systèmes de fichiers intègrent de la compression à leur plus bas niveau, c’est à dire que physiquement vos fichiers prennent moins de place que leur taille originale. Est-ce qu’on accepterait qu’à ce moment-là on en perde un bout ? Certainement pas.

À un plus haut niveau, ce type d’algorithme est souvent utilisé pour de l’archivage, un mot qui vous est certainement familier si vous avez croisé des fichiers au format zip, rar, 7z. Contrairement aux algorithmes avec perte qui régissent le monde du multimédia, qui « décompresse » au fur et à mesure, ici il faut reconstituer le fichier entier avant de pouvoir le lire. Dans le cas des archives, ça passe par un fichier temporaire, mais il est des situations surprenantes ou la compression sans perte se fait « à la volée ». Dans les formats de documents ODF (OpenOffice/LibreOffice), et même OOXML (Office 2013 et suivants, les docx, xlsx et autre pptx).

Encore plus invisible et pourtant vital, le Web. Oui oui. Quand vous demandez d’afficher une page, son contenu est du texte brut, et les feuilles de style ainsi que les scripts JavaScript sont aussi du texte brut. Si les images sont déjà compressées et peuvent être servies telles quelles, ce texte peut gagner à être compressé, et c’est ce que font la plupart des serveurs Web pour transmettre des versions compressées à la volée des fichiers en question, les navigateurs décompressant alors lesdits fichiers à la volée également pour vous les afficher. Avec la taille des pages qui augmente en plus de la taille des feuilles de style et des scripts, le gain est réel aussi bien pour les clients qui sont sur des connexions instables (rappel, de plus en plus de gens ne naviguent que sur mobile, une horreur sans nom quand on s’intéresse de près aux réseaux associés), que pour les serveurs qui économisent ainsi une quantité de bande passante non négligeable au regard du trafic qu’ils peuvent drainer. Depuis 2015 Google développe Brotli, un algorithme plus efficace que gzip et deflate qui sont actuellement utilisé, preuve que même ce domaine peut encore être amélioré. Faudrait voir si je peux pas mettre ça en place tiens.

Moins glorieux, car très dégueulasse et pas du tout neutre, sur les réseaux mobiles vous passez souvent par des proxy transparents qui recompressent les images à la volée, j’ai pu le constater de manière violente sur Twitter sur mobile, entre un réseau Wifi classique et le réseau 3G notamment (la 4G ne fait pas exception). En passant par un VPN, le problème disparaît, mais devoir utiliser ce type d’outil en 2017 sur ce genre d’appareil est tout simplement une aberration de plus à mettre sur le compte de la sacro-sainte mobilité.

Un outil puissant, pratique, parfois dangereux

Je ne vais pas m’étendre trop sur le sujet, parce que j’ai déjà évoqué la problématique dans une traduction à propos de la compression associée à du chiffrement. Ceci dit, la dangerosité persiste, si la compression avec pertes peut parfois s’accommoder d’une corruption légère des données, c’est rédhibitoire pour la compression sans perte. Et de nos jours, même avec des techniques modernes pour tenter de garantir l’intégrité physique du stockage, un glitch n’est jamais à exclure et le moindre bit altéré peut vous empêcher de récupérer tout ou partie du contenu d’une archive. C’est d’autant plus vrai que la taille de ladite archive augmente. Et là, pas de miracles, c’est la sauvegarde qui vous sauvera (elle était facile).

Une tendance qui restera

On a beau augmenter les débits des connexion fixes et mobiles, avoir des disques durs plus gros, le fait est qu’on a plus que jamais besoin de compression, parce que tout devient inévitablement plus lourd. Chaque octet gagné multiplié par un nombre d’internautes toujours plus important, ça chiffre. Facebook a bientôt 2 milliards d’utilisateurs (depuis le début de l’écriture de cet article, Zucky a annoncé que c’était fait), un octet de gagné sur une page c’est 2Go qu’il n’a pas à transmettre, multiplié par le nombre de fois qu’il réalise cet exploit, et vous comprenez l’enjeu.

Donc oui, on compresse, décompresse, et dans tous les domaines. C’est incontournable. Et maintenant non seulement vous le savez, mais vous savez aussi pourquoi.

 

2 Commentaires
Le plus ancien
Le plus récent
Commentaires en ligne
Afficher tous les commentaires
Mirabellette
25/02/2018 14:10

Super article ! La compression est omniprésente en informatique.

D ailleurs, attention à ne pas compresser plusieurs fois une même données. Par exemple avant le transfert et pendant le transfert.

xhark
07/03/2018 01:48

Encore un billet sympa! je pense que les algos vont sans cesse améliorer les choses, quand on voit à quel point Netflix arrive à faire aujourd’hui c’est juste bluffant. Après nous sommes arrivés à un niveau de qualité au top pour l’oeil humain, je veux dire tu peux toujours ajouter de la 4K, 8K ou ce que l’on veut un 720P reste excellent comme flux pour une vidéo. Bien mieux que les xvid à l’époque du RTC en tout cas 🙂 (download accelerator pro, toi-même tu sais!). Pour ma part je suis un adepte de 7Z, dès que j’ai du… Lire la suite »