Compression vidéo : Pourquoi Long GOP c’est plus MIEUX que All Intra !

Dans cette vidéo je vous explique pourquoi en général la compression vidéo All intra c’est moins bien que le Long GOP même quand le all-intra a un bitrate nettement supérieur au GOP !

Dans cette vidéo je vous explique pourquoi en général le All intra comme cette petite séquence fortement compressée en All intra c’est moins bien que le Long GOP comme cette autre petite séquence encore plus compressée mais cette fois en all intra. Et ce, même quand le all intra a un bitrate nettement supérieur au GOP.

Pour bien que vous compreniez la différence entre all intra et long GOP, je vais vous faire une petite analogie. En encodage vidéo, all intra ca veut dire all intra frame, ca veut dire que chaque image de la vidéo contient toutes les informations nécessaires pour l’afficher. Pour décrire l’image que vous voyez là, vous pourriez dire : ya un mec assis sur une chaise devant un bureau, il a un polo [couleur], les cheveux court, un peu de barbe, il a sa main droite posée sur la table, etc. et à l’image suivante, vous feriez pareil : ya un mec assis sur une chaise devant un bureau, il a un polo [couleur], les cheveux court, un peu de barbe, il a sa main droite juste au dessus la table, etc. A l’image suivante pareil, etc. Ca c’est l’idée du all intra : chaque image de vidéo contient une description complète de l’image, c’est ce qu’on appelle une image I, comme intra : toutes les infos de l’image sont internes à l’image elle-même. Mais si vous là, vous deviez décrire ces images à la suite, ce n’est bien sûr pas comme ça que vous feriez. Vous commencerez par la description complète :  ya un mec assis sur une chaise devant un bureau, il a un polo [couleur], les cheveux court, un peu de barbe, il a sa main droite posée sur la table, etc. puis à l’image suivante : il a levé sa main droite d’un cm, à la suivante encore d’un centimètre, etc. Et ben ça c’est exactement l’idée des images de type P en GOP : après une image I, qui contient toutes les informations, on va simplement donner la différence avec l’image d’avant. Les images ne vont donc plus être indépendantes les unes des autres, elles vont être groupées, d’où le nom GOP, qui veut dire group of picture – groupe d’image. Et c’est évidemment beaucoup plus efficace : pas besoin de re-décrire tout ce qui n’a pas changé. En termes informatiques, ça veut dire qu’une image P va utiliser beaucoup moins d’octets qu’une image I, alors qu’on aura au final le même niveau d’information sur le mec avec son polo et sur la position de sa main. Ou pour le dire autrement : avec un bitrate inférieur on va avoir une image de meilleure qualité. 

Et le GOP va encore plus loin : au lieu de simplement dire qu’à chaque image je monte ma main d’un cm, on pourrait dire : OK, dans 10 images le mec aura sa main là, ça c’est mon image P qu’on a vu avant – ben tu vois entre les deux, il a juste la main entre les deux positions, logique. Donc en fait si je connais l’image de départ et la prochaine image P, entre les deux je peux me contenter d’interpoler. Ca c’est en gros les images B, B pour bidirectionnel, parce qu’elles prennent des infos avant et aussi après. Et donc en GOP on va se retrouver avec des groupes d’images, par exemple une image I avec plein d’infos au début, une image P un peu plus loin, et entre, quelques images B. Après à nouveau quelques B, une image P, etc. avant de retrouver une image I complète de temps. Ces sont ces groupes d’images qui donnent son nom à l’algorithme de compression GOP pour Group of Pictures, groupes d’images. Et si les groupes d’images sont grands comme dans les codecs modernes on parle de long GOP, grand groupe d’image.

Maintenant que vous avez compris le principe, je vous remets une petite illustration avant de voir les avantages et les inconvénients de chaque encodage, all intra et long gop. Dans cet exemple, la vidéo est compressée de manière extrême, mais comme je ne bouge presque pas, la qualité d’image reste assez impressionnante par rapport au bitrate utilisé. Salut c’est Julien, abonnez-vous à la chaîne pour plein de vidéos aussi intéressantes que celle-là ! Si je passe en all intra avec le même bitrate le résultat est catastrophique ! Le pauvre codec doit encoder toutes les informations dans chaque image et il est donc obligé de sacrifier énormément de détails. En multipliant par 4 le bitrate, on s’approche du résultat en GOP, mais on a un fourmillement très présent. Chaque image étant encodée séparément de la précédente, l’algorithme de compression peut au final générer à chaque fois une image bien différente de la précédente, ce qui génère ce scintillement. Pour avoir un résultat comparable au GOP, il faut multiplier le bitrate par 8. On a alors une image plus précise même quand il y a du mouvement, avec par contre un léger scintillement présent. Mais il a fallu pour ça 8 fois plus de données en GOP qu’en GOP.

Maintenant que vous avez compris le principe et pourquoi le GOP c’est une idée géniale, on va voir deux choses : d’abord les inconvénients du GOP, parce qu’il y en a à chaque niveau de la production vidéo : enregistrement, lecture, montage et diffusion. Et ensuite on testera s’il y a des cas où le all intra est meilleur que le GOP, puisque évidemment ce que vous ai montré juste avant c’est une situation très favorable à un encodage de type long GOP.

Donc c’est quoi les inconvénients du GOP ? Au niveau de l’enregistrement – donc au niveau de la caméra – enregistrer en all-intra c’est simple : chaque image arrive une par une, elle est compressée et enregistrée, puis la caméra passe à l’image suivante.

Enregistrer en GOP par contre demande plus de puissance et plus de mémoire. Puisque pour enregistrer une image I c’est simple : on prend les informations de l’image et on applique l’algorithme de compression, mais pour une image P, il faut aussi avoir gardé en mémoire l’image d’avant pour pouvoir calculer la différence, et ensuite là encore compresser cette différence. Et c’est encore plus compliqué pour les images B puisqu’il faut une image avant et une image après, donc il faut attendre d’avoir des paquets d’images pour les encoder efficacement. Et tout ça doit se faire en temps réel. Certaines caméras ne sont donc pas capables de faire des images de type B, certaines vont avoir des paquets GOP plus longs que d’autres. Et donc autre info, même si deux caméras ont le même birate, sont en GOP toutes les deux, la compression ne sera pas forcément de la même qualité.

Ensuite au niveau de la lecture, le problème est le même, pour lire du all-intra, il suffit de décompresser les images une par une et de les afficher. Pour lire du GOP, il faut être capable de garder en mémoire l’image précédente et d’effectuer le calcul de la différence grâce aux données des images P. Encore pire pour les images B puisqu’il faut lire en avance en plus. Ça ne pose généralement pas problème aux ordis, mais c’est plus compliqué pour des appareils avec des composants limités comme les lecteurs de DVD par exemple. C’est pour ça qu’il y a parfois des limites aux types de GOP que l’on peut décider d’utiliser et à la longueur des groupes d’images autorisés selon le support de lecture de la vidéo.

Au niveau du montage, le GOP est aussi beaucoup plus compliqué à manipuler pour le logiciel. Quand vous demandez au programme d’aller à une image précise, si c’est pas une image I, pour l’afficher il va devoir aller récupérer les images avant ou après, selon le type d’image. Et ce à chaque fois que que le monteur va se balader dans la vidéo, ce qu’on fait tout le temps pendant le montage. De même quand on fait un cut, ça fait des calculs supplémentaires. Par exemple, si je veux assembler ces deux plans. Je vais couper ici et là. Dans la première vidéo, les images B perdent leur référence, le logiciel va donc devoir ré-encoder ces images en I. Et pareil pour la deuxième, les images P et B vont devoir être calculées et re-encodées. Selon les codecs et le niveau de compression, ces calculs peuvent être trop lourds pour que le montage soit fluide ; ça va saccader et pas être vraiment utilisable au montage. C’est pourquoi tous les codecs dédiés au montage sont en all-intra. Si on tourne en GOP il faudra soit avoir un ordi très puissant ou le plus souvent transcoder la vidéo dans un codec all intra avant le montage, ce qui alourdit le flux de travail. C’est donc pas adapté à des vidéos qui doivent sortir le plus vite possible par exemple, ou à de la production continue.

Ensuite au niveau de la diffusion, le GOP pose deux problèmes. Premièrement, si la connexion n’est pas parfaite. En GOP les images dépendent les unes des autres, donc s’il y a de la perte de données au moment de la transmission et qu’une image I est perdue, toutes les suivantes, qui sont des images P ou B et qui font donc référence à cette image I perdue seront également inutilisables. Selon la longueur des groupes d’images, ça peut faire des gros freezes dans la vidéo. Deuxièmement, si on veut optimiser la qualité d’encodage, il faut utiliser des images P mais aussi B, qui dépendent des images suivantes, et il faut donc attendre d’avoir des groupes d’images complets pour les encoder par paquet et les envoyer, ce qui va induire de la latence dans le cas d’une diffusion live. Dans le cas de diffusion live avec besoin d’une latence minimale, un codec all intra sera plus adapté. En pratique un encodage GOP est quand même plus avantageux dans la très très grande majorité des situations vu qu’il offre, comme on l’a vu, une bien meilleure qualité d’image à débit égal. Pour la perte d’image, le protocole TCP assure la bonne transmission des données et quelques images de retard c’est généralement pas un problème, même pour un live.

Ca c’était pour les quelques légers inconvénients du Long GOP. Mais si on revient à la qualité d’image pure, est-ce qu’il existe des cas où encoder en Intra est plus intéressant qu’en GOP ? Puisque le GOP est plus intéressant quand une partie de l’image est fixe, on peut se dire qu’il doit y avoir des cas où le all-intra a l’avantage. En théorie, ça serait le cas où on a une image qui bouge énormément, comme quand la caméra avance – qu’on fait un traveling avant – ou qu’on zoom. 

Alors pour ça on trouve des tonnes de comparatifs sur Youtube entre la qualité d’une vidéo enregistrée en par exemple en long GOP 200 Mb/s contre une vidéo en all intra 400 Mb/s. SUR YOUTUBE. 400 Mb/s. Vous voyez le problème ? Mettre du 400 Mb/s sur Youtube, qui de toute façon va re-compresser la vidéo en long gop déjà, et ensuite avec un bitrate tellement faible que les différences initiales seraient imperceptibles.

Donc pour comparer j’ai commencé par faire des tests avec des bitrates beaucoup plus faibles, comme par exemple cette petite séquence particulièrement compliquée à compresser, avec plein de petits détails et beaucoup de mouvement. La partie gauche de l’image a été encodée en GOP et celle de droite en All intra, avec le même bitrate. Globalement l’image en GOP est toujours plus agréable à regarder, avec parfois moins de détails, mais beaucoup plus de constance au niveau des artéfacts de compression. De plus en GOP les zones qui perdent le plus de détails sont les zones qui bougent le plus, ce qui donne un effet qui se rapproche d’un flou de mouvement, bien que la vidéo ait été prise avec un vitesse d’obturation très rapide. Par contre si on compresse plus le GOP que le All intra, le GOP va perdre en détail. Donc dans ce cas extrême, l’avantage du GOP est léger, mais il est toujours là.

Mais il y a un autre cas où chaque image est très différente de la précédente alors que pourtant il n’y a aucun mouvement, c’est quand on monte les ISO. Le bruit ISO est aléatoire et il est donc totalement différent entre chaque image, ce qui produit un fourmillement important à haut ISO. Comment s’en sortent les deux codecs dans ce cas là ? Ben là encore, avantage au GOP. Dans ces images tournées à 12800 ISO sur un capteur APSC, le bruit à la base est forcément très présent. La compression va faire perdre du détail dans les deux cas, donc on va se retrouver avec des grandes zones finalement sans bruit. Mais du coup la compression en GOP va pouvoir allouer plus de données aux contours et on va encore avoir une meilleure image en GOP.

Tout ça c’est bien beau, vous allez me dire, mais est-ce que choisir des bitrates faible ça ne favorise pas le GOP ? Est-ce que quand on monte les bitrate, le all-intra ne reprend pas l’avantage ? Déjà oui, c’est certain qu’à bas bitrate, on a le choix entre le GOP et de la bouillie de pixel, donc en fait on a pas trop le choix. Ensuite quand on augmente les bitrate, on atteint la limite de ce que je peux vous montrer sur Youtube à cause de la compression de Youtube. Mais j’ai fait plein de test en zoomant à 400% dans des vidéos la tendance est toujours la même : à bitrate égal, le GOP est toujours meilleur. Dans les situations les plus compliquées pour le GOP, le all intra conserve un peu plus de détail mais au prix de bruit différent entre les images. Bruit qu’il faudra traiter au post-traitement … et on perdra du coup des détails. Et quand on arrive sur des hauts niveaux de bitrate, comme par exemple du 200 ou 400 Mb/s, ben honnêtement, quelle que soit la situation, impossible de voir la différence.

Au final, lequel choisir ? Dans la plupart des cas usuels, un encodage en long GOP sera un meilleur choix du point de vue de la qualité d’image, même avec un bitrate inférieur au all intra. Ce qui fera pencher la balance vers le all intra ça ne doit pas être la qualité d’image mais plutôt les autres avantages qu’il offre, en particulier au montage.

J’espère que c’est maintenant bien clair pour vous si c’est le cas n’hésitez pas à faire tourner la vidéo à d’autres vidéastes et si les trucs techniques sur la vidéo vous intéressent, je vous vous mets d’autres vidéos qui pourraient aussi vous intéresser juste ici. Moi je vous dis à la prochaine vidéo sur la chaîne et d’ici là, bon tournages bien compressés comme il faut !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.