# Compression vidéo

La compression vidéo est une méthode de compression de données, qui consiste à réduire la quantité de données, en minimisant l'impact sur la qualité visuelle de la vidéo. L'intérêt de la compression vidéo est de réduire les coûts de stockage et de transmission des fichiers vidéo.

## Historique et standards

Les premières tentatives de compression vidéo datent des années 1950, mais c'est à partir des années 1980 que les premières solutions viables voient le jour. Le premier standard vidéo est H.120, publié en 1984 par le CCITT. Ce premier standard utilise la technique DPCM, et est très limité dans ses fonctionnalités : débit binaire maximal de 2 Mbit/s, niveau de gris uniquement, et qualité peu satisfaisante.
Les organismes de standardisation jouent un rôle très important dans l'avancée et la diffusion des techniques de compression vidéo. Initiée par le CCITT dans les années 1980, puis par son successeur l'UIT-T. Ce sont ensuite l'UIT-R, puis l'ISO et la CEI qui coordonnent ces activités de normalisation.

## Principes fondamentaux des algorithmes de compression vidéo

Les séquences vidéo contiennent une très grande redondance statistique, aussi bien dans le domaine temporel que dans le domaine spatial.
La propriété statistique fondamentale sur laquelle les techniques de compression se fondent, est la corrélation entre pixels. Cette corrélation est à la fois spatiale, les pixels adjacents de l'image courante sont similaires, et temporelle, les pixels des images passées et futures sont aussi très proches du pixel courant.
Ainsi, on suppose que l'importance d'un pixel particulier de l’image peut être prévue à partir des pixels voisins de la même image (utilisant des techniques de codage intra-image) ou des pixels d'une image voisine (utilisant des techniques inter-image). Intuitivement il est clair que dans certaines circonstances, par exemple, lors d'un changement de plan d’une séquence vidéo, la corrélation temporelle entre pixels entre images voisines est petite, voire nulle. Dans ce cas, ce sont les techniques de codage dites Intra qui sont les mieux appropriées, afin d'exploiter la corrélation spatiale pour réaliser une compression efficace de données.
Les algorithmes de compression vidéo de type MPEG utilisent une transformation appelée DCT (pour Discrete Cosine Transform, soit « transformée en cosinus discrète »), sur des blocs de 8x8 pixels, pour analyser efficacement les corrélations spatiales entre pixels voisins de la même image. D'autres méthodes ont été proposées, en utilisant les fractales, les ondelettes, ou même le matching pursuit.
Cependant, si la corrélation entre pixel dans des trames voisines est grande, c'est-à-dire dans les cas où deux trames consécutives ont un contenu semblable ou identique, il est souhaitable d’utiliser une technique de codage dite Inter, par exemple la DPCM (Differential PCM), qui utilise la prévision temporelle (prévision compensée du mouvement entre trames).
Dans le schéma classique de la compression vidéo, une combinaison adaptative entre les deux mouvements (temporel et spatial) de l’information est utilisée pour réaliser une importante compression de donnée (codage vidéo hybride DPCM/DCT).

## Sous-échantillonnage et interpolation

La plupart des techniques de compression (improprement appelée codage car il y a perte d'information) qu’on décrira dans cette partie font un échantillonnage et une quantification avant de coder l’information. Le concept de base du sous-échantillonnage est de réduire les dimensions (horizontale et verticale) de l’image vidéo et donc de diminuer le nombre de pixels à coder.
Certaines applications vidéo sous-échantillonnent aussi le mouvement temporel pour réduire le débit des images avant de coder. Le récepteur doit donc décoder les images et les interpoler avant de les afficher.
Cette technique de compression peut être considérée comme une des plus élémentaires, qui tient en compte les caractéristiques physiologiques de l’œil et qui enlève la redondance contenue dans les données vidéo.
Les yeux humains sont plus sensibles aux variations de luminosité que de couleur. À cause de ce défaut de l'œil, la majorité des algorithmes de compression vidéo représentent les images dans l'espace couleur YUV, qui comprend une composante de luminosité et deux de chrominance. Ensuite les composantes chromatiques sont sous-échantillonnées en fonction de la composante de luminance avec un rapport Y : U : V spécifique à une application particulière (par exemple, en MPEG-2 le rapport est de 4:1:1 ou 4:2:2).

## Prédiction compensée de mouvement

La prédiction compensée de mouvement, ou compensation de mouvement, est un puissant moyen pour réduire les redondances temporelles entre images, et elle est utilisée dans MPEG-1 et MPEG-2 comme prédiction pour le codage DPCM. Le concept de la compensation du mouvement est basé sur l’estimation du mouvement entre images vidéo ; si tous les éléments d’une scène vidéo sont proches dans l’espace, le mouvement entre trames peut être décrit avec un nombre limité de paramètres (vecteurs de mouvement des pixels).
La meilleure prédiction d'un pixel est donnée par la prédiction de mouvement de la trame précédente. Le codage de l'information de mouvement pour chaque pixel de l'image n'est pas nécessaire.
Si la corrélation spatiale entre vecteurs de mouvement est assez haute, un vecteur de mouvement pourra représenter un bloc de pixels adjacents.
Ces blocs sont souvent constitués d'un groupe de 16×16 pixels, et seulement un vecteur de mouvement est estimé, codé et transmis pour chaque bloc.

## Conclusion

La combinaison des techniques de prédiction compensée de mouvement et de la transformation DCT peuvent être définies comme les éléments clé de la compression vidéo de type MPEG. Un troisième élément caractéristique est que ces techniques sont utilisées pour des petits blocs d'image (souvent 16×16 pixels pour la compensation de mouvement et 8×8 pixels pour le codage DCT).
Pour ces raisons le codage MPEG fait partie des algorithmes hybrides DPCM/DCT.

### Schéma de base du codage entre trames

La technique de compression de base de MPEG-1 (et de MPEG-2) est basée sur une structure de macro-blocs. L'algorithme code la première trame d'une séquence avec un codage Intra-frame (trame I). Chaque trame successive est codée en utilisant la prédiction Inter-frame (trames P) ; seules les données de la trame codée juste précédemment (trames I ou P) seront utilisées pour la prédiction. Chaque couleur d'une trame est partitionnée en macro-blocs.
Chaque macro-bloc contient les données sur la luminosité et la chrominance : 4 blocs de luminosité (Y1, Y2, Y3, Y4) et deux pour la chrominance (U, V), chacun de 8x8 pixels ; ce qui donne un rapport entre luminosité et chrominance de 4:1:1.

### Schéma blocs du codage DCT/DPCM

La première trame d'une séquence vidéo (trame I) est codée avec le mode Intra-frames sans aucune référence sur des trames passées ou futures. La DCT est appliquée sur chaque bloc 8x8 de luminosité et de chrominance, chacun des 64 coefficients DCT est quantifié uniformément (Q). Après quantification, le coefficient plus petit (coefficient continu dit DC) est traité différemment par rapport aux autres (coefficients AC). Le coefficient DC correspond à l'intensité moyenne du bloc et il est codé avec une méthode de prédiction différentielle DC. Le reste des coefficients non nuls sont ensuite codés en zigzag comme dans le codage JPEG.

### Schéma blocs du décodage DCT/DPCM

Le décodeur effectue l'opération inverse. Il commence par extraire et décoder les données des différents coefficients DCT pour chaque bloc. Avec la reconstruction (Q*) des coefficients non nuls il fait la DCT inverse (DCT$^{-1}$) et les valeurs de quantification des pixels des blocs sont reconstituées. Toutes les blocs de chaque image sont décodés et reconstitués.
Pour coder les trames P, les trames précédents N-1(trames I ou P) sont mémorisées temporairement dans FS (frame store). La compensation de mouvement (MC) est effectué sur la base des macro-blocs. Un buffer vidéo (VB) est nécessaire pour assurer un débit constant de flux vidéo.

### Conditions de remplissage

Une caractéristique apportée par l'algorithme MPEG-1 est la possibilité de mettre à jour les informations des macro-blocs au décodeur seulement si nécessaire (si le contenu d'un bloc est changé par rapport au contenu du même bloc de l'image précédente). La clé pour un codage efficient des séquences vidéo avec un faible débit de bits par seconde est le bon choix de l'algorithme de prédiction. Le standard MPEG distingue principalement trois méthodes (types MB) :
* MB par saut : Prédiction depuis les trames précédentes avec zéro vecteurs de mouvement. Aucune information sur les macro-blocs n'est codée ni transmise au récepteur.
* Inter MB : Prédiction depuis les trames précédentes. Le type MB, l’adresse MB si demandé, le vecteur de mouvement, coefficients DCT et le pas de quantification sont transmis.
* Intra MB : Aucune prédiction est utilisé. Seulement le type MB, l’adresse MB, le vecteur de mouvement, les DCT et le pas de quantification sont transmis.

## Fonctionnalités de MPEG-1

Pour accéder à un support média, l'algorithme MPEG-1 fut pensé pour supporter différentes fonctionnalités comme l'accès aléatoire, la recherche rapide en avant (FF-fast forward) et en arrière (FR-fast reverse) dans le flux vidéo, etc.
Pour incorporer ces fonctionnalités et pour tirer plus d'avantages de la compensation de mouvement et de l'interpolation de mouvement, l'algorithme MPEG-1 introduit le concept d'images prédites et interpolées bidirectionnellement (trames B).
Trois types de trames sont considérées :
* Trames I : Ces trames sont codées sans aucune référence à une autre image de la séquence vidéo, comme expliqué avant. Les trames I permettent de réaliser l'accès aléatoire et les fonctionnalités FF/FR, bien qu'elles ne permettent qu'un très bas taux de compression.
* Trames P : Ces trames sont codées avec une référence à l'image précédente (trame I ou trame P). Ces trames sont utilisées pour la prédiction de trames futures ou passées et elles ne peuvent pas être utilisées pour réaliser l'accès aléatoire et les fonctionnalités FF/FR.
* Trames B : Elles ont besoin des trames futures et passées comme référence pour être codées. Elles sont utilisées pour obtenir un très haut taux de compression. Elles ne sont jamais utilisées comme référence.
L'utilisateur peut arranger la séquence des différents types de trame selon les besoins de l'application. Généralement une séquence vidéo codée en utilisant seulement des trames I (I I I I I . . .) donne un haut degré d'accès aléatoire, de FF/FR et d’édition, mais un taux très bas de compression. Une séquence vidéo codée seulement avec des trames P ( I P P P P P P I P P P P . . .) permet un degré moyen d'accès aléatoire et de FF/FR.
Si on utilise les trois types de trames (I B B P B B P B B I B B P . . .) on arrive à un grand taux de compression et un raisonnable degré d'accès aléatoire et de FF/FR, mais on augmente beaucoup le temps de codage. Pour des applications comme la vidéotéléphonie ou la vidéoconférence ce temps peut devenir intolérable.

## MPEG-2

L'algorithme MPEG-2 a été conçu pour avoir une qualité au moins équivalente à celle de NTSC/PAL et supérieure à celle du CCIR 60.
À la base, l'algorithme de MPEG-2 est identique à celui de MPEG-1 et il est donc compatible. Chaque décodeur MPEG-2 doit être capable de décoder un flux vidéo MPEG-1 valide. Plusieurs algorithmes ont été ajoutés pour s'adapter aux nouveaux besoins. MPEG-2 permet de traiter des images entrelacées.
MPEG-2 introduit le concept de « profils » et de « niveaux » pour être compatible avec les systèmes qui n'implémentent pas toutes ces fonctionnalités.
Chaque niveau spécifie la plage des différents paramètres utiles pour le codage.
Le niveau principal supporte au maximum une densité de 720 pixels en horizontal et 576 pixels en vertical, un débit d'images de 30 trames par seconde et un débit de 15 Mbit/s.