# Group of pictures

Dans le domaine du codage vidéo, la structure d’un GOP (Group of pictures) ou « Groupe d'images » définit l'ordre dans lequel sont disposées les images à codage interne (image intra) et à codage prédictif image inter. Un GOP est constitué d'une suite d'images regroupées dans un flux vidéo encodé qui est répété périodiquement jusqu'à la fin de l'encodage. Les images visibles sont générées à partir des images codées contenues dans un GOP.

## Structure d'un GOP

Un GOP peut contenir les types d’images suivants :
* Image I ou I-frame (image à codage interne). Image de référence. C’est une image fixe et indépendante des autres types d'image. Chaque GOP commence avec une image de ce type.
* Image P ou P-frame (image à codage prédictif). Cette image contient des informations de différence (par prédiction compensée de mouvement) avec l’image I (ou image P) passée. C'est également une image de référence.
* Image B (image à codage prédictif bidirectionnel). Cette image contient des informations de différence avec les images I (ou image P) passées et futures à l'intérieur d'un GOP. Afin d'éviter une trop grande propagation d'erreur de prédiction, les images B ne sont généralement pas utilisées en tant qu'image de référence.
* Image D (image codée DC). Cette image est utilisée par la fonction d'avance rapide.
Un GOP contient une seule image I qui correspond à la première image à encoder. Elle est suivie d'une succession d'images P et B dont le motif se répète jusqu'à la fin du GOP. Les images P se situent à intervalle régulier et les images B complètent ces intervalles. On définit ce motif de sous-GOP. Quelques codecs vidéo permettent plus d'une image I dans un GOP. Le schéma ci-dessous décrit la structure d'un GOP dont le sous-GOP est composé d'une image P et de deux images B:
La particularité des images I est qu'elles ne nécessitent aucune information supplémentaire pour être décodées puisque leur compression se base sur la prédiction du contenu présent dans la même image. Par conséquent, toute erreur dans la structure GOP est corrigée par l’image I suivante. Un GOP peut contenir plusieurs dizaines d'images mais plus il est long et plus les erreurs de prédictions seront importantes. Cela entraine des difficultés à prédire efficacement les images à encoder et donc une perte de qualité et une compression moins efficace. Les erreurs se propagent par l'intermédiaire de l'encodage des images de référence donc principalement par les images P. Dans la norme H.264, les images B dans un GOP peuvent être référencées par d'autres images B dans le but d'accroître l'efficacité de compression mais en négligeant plus la qualité.
Plus un flux vidéo contient d’images I, plus il est facilement modifiable. Cependant, avoir plus d’images I augmente la taille du flux vidéo. Afin d'économiser la bande passante et l'espace disque, les vidéos préparées pour diffusion sur Internet, ont souvent une seule image I par GOP.
La structure GOP est souvent définie par deux nombres, par exemple M = 3, N = 12. Le premier nombre M indique la distance entre deux images d'ancrage (de type I ou P). Le second nombre N indique la distance entre deux images complètes (images I) : c'est la longueur du GOP. Pour l'exemple M = 3 N = 12, la structure du GOP est IBBPBBPBBPBBI. Au lieu du paramètre M, on peut utiliser le nombre maximal d’images B entre deux images d'ancrage consécutives.

## Ordre du GOP vs ordre d'encodage

L'ordre défini par le GOP suit l'ordre de visionnage du flux et est différent de l'ordre d'encodage dès lors que des images B sont présentes. L'ordre d'encodage qui est également le même que le décodage dépend des prédictions temporelles des images et donc du type des images. C'est pourquoi durant un encodage, un séquenceur établit à l'avance le type des images en connaissant la structure du GOP et change l'ordre des images à encoder afin d'obtenir toutes les images de référence. Dans l'exemple ci-dessus, l'ordre de visualisation est I B1 B2 P1 B3 B4 P2 mais l'ordre d'encodage est I P1 B1 B2 P2 B3 B4. Étant donné que le GOP a besoin d'être totalement décodé pour être visible, il est nécessaire de prévoir un temps de retard entre le décodage et la sortie d'une image à l'écran.