vignette|Diagramme fonctionnel du système. H.264, ou MPEG-4 AVC (), ou MPEG-4 Part 10, est une norme de codage vidéo développée conjointement par l'UIT-T Q.6/SG16 Video Coding Experts Group (VCEG) ainsi que l'ISO/CEI Moving Picture Experts Group (MPEG) et est le produit d'un effort de partenariat connu sous le nom Joint Video Team (JVT). La norme UIT-T H.264 et la norme ISO/CEI MPEG-4 Part 10 (ISO/CEI 14496-10) sont techniquement identiques, et la technologie employée est aussi connue sous le nom AVC, pour Advanced Video Coding. La première version de la norme a été approuvée en et la plus récente date d'ISO/IEC 60.60 14496-10:2012: Information technology -- Coding of audio-visual objects -- Part 10: Advanced Video Coding, 2012-04-26.
Le JVT a ensuite travaillé sur le concept d'extensibilité en élaborant une extension à la norme H.264 (annexe G) : les spécifications Scalable Video Coding (SVC), puis sur la norme H.265/HEVC (High Efficiency Video Coding).
Le H.264 est mieux connu comme étant le format d'encodage vidéo le plus couramment utilisé sur les disques Blu-ray. Il est également largement utilisé par les sources Internet de streaming, telles que les vidéos de Netflix, Hulu, Amazon Prime Video, Vimeo, YouTube et l'iTunes Store, les logiciels Web tels que Adobe Flash Player et Microsoft Silverlight ainsi que diverses émissions de TVHD.
Historique
Le nom H.264 provient de la famille de normes vidéo H.26x définies par l'UIT-T. Cependant, ce codec a été développé dans le cadre du MPEG, l'UIT-T se contentant de l'adopter ensuite et de l'éditer en son sein. Dans le cadre du MPEG, le sigle AVC (Advanced Video Coding) fut choisi par analogie avec le codec audio AAC MPEG-2 part 7 qui avait été nommé ainsi pour le différencier du codec audio MPEG-2 part 3 (le fameux MP3). La norme est habituellement appelée H.264/AVC (ou AVC/H.264, H.264/MPEG-4 AVC ou MPEG-4/H.264 AVC) pour souligner l'héritage commun. Le nom H.26L, rappelant son lien avec l'UIT-T est nettement moins commun mais toujours utilisé. De temps en temps, il est aussi appelé « le codec JVT », en référence à l'organisation JVT (Joint Video Team) qui l'a développé. Il existe un précédent dans l'élaboration d'une norme de codage vidéo commune entre le MPEG et l'UIT-T avec MPEG-2 et H.262 qui sont identiques.
Objectifs et applications
À l'origine, l'UIT-T lança le projet H.26L en 1998 dans le but de créer une nouvelle architecture de codec ayant pour but un gain en efficacité de codage d'un rapport au moins égal à 2 par rapport aux standards existants (MPEG-2, H.263 et MPEG-4 Part 2). Un autre but était de créer une interface simple pour pouvoir adapter le codec aux différents protocoles de transport (commutation de paquets et de circuits). Le codec a été développé en s'assurant qu'il serait transposable sur plates-formes à un coût raisonnable, c'est-à-dire en tenant compte des progrès réalisés par l'industrie des semi-conducteurs en matière de design et des procédés.
En 2001, le projet H.26L avait atteint ses objectifs en taux de compression comme le démontrèrent des tests subjectifs réalisés par MPEG. C'est à ce moment que l'UIT-T et MPEG décidèrent d'un commun accord de créer le Joint Video Team (JVT) dans le but de standardiser le codec ensemble et de l'adapter aux différents besoins de l'industrie (vidéophonie, streaming, télévision, mobile). En effet, les applications traditionnellement visées par l'UIT-T concernent les bas débits (vidéophonie, mobile), applications pour lesquelles H.26L était optimisé, alors que les membres de MPEG désiraient l'adapter à d'autres formats (télévision, HD). Des outils algorithmiques comme le support de l'entrelacé ont été ajoutés et une réduction de la complexité a été accomplie.
Le codec H.264/AVC est donc adapté à une très grande variété de réseaux et de systèmes (par exemple, pour la diffusion de la télévision, le stockage HD DVD et Blu-ray, le streaming RTP/IP, et des systèmes de téléphonie propre à l'UIT-T).
À la suite de la première version de la norme, le JVT a développé quelques extensions, connues sous le nom Fidelity Range Extensions (FRExt). Ces extensions ont pour but de prendre en charge une précision de quantification accrue (ajout des codages 10-bit et 12-bit) et une meilleure définition de la chrominance (ajout des structures de quantification YUV 4:2:2 et YUV 4:4:4) et visent des applications professionnelles (Studio). Plusieurs autres fonctionnalités ont aussi été adoptées pour améliorer la qualité subjective en haute définition (ajout d'une transformée 8×8 en plus de la transformée 4×4 existante, ajout de matrices de quantification) ou pour des besoins spécifiques (codage sans perte, support d'autres espaces de couleurs). Le travail de conception sur les Fidelity Range Extensions a été finalisé en , et figé en .
Depuis la fin du développement de la version originale de la norme en , le JVT a fait publier 4 versions approuvées par l'UIT-T et MPEG, correspondant à l'ajout de FRExt et à des corrections.
Caractéristiques détaillées
H.264/AVC (MPEG-4 Part 10) comprend de nombreuses techniques nouvelles qui lui permettent de compresser beaucoup plus efficacement les vidéos que les normes précédentes (H.261, MPEG-1, MPEG-2, MPEG-4 Part 2/ASP) et fournit plus de flexibilité aux applications dans un grand nombre d'environnements réseau. Ces fonctionnalités principales comprennent :
Prédiction Inter-trame ou Prédiction temporelle ( Inter-frame prediction) L'estimation et la compensation de mouvement peuvent être effectuées par rapport à plusieurs images de référence déjà codées. Le choix de l'image de référence intervient au niveau macrobloc et sous-macrobloc. Ceci permet d'utiliser dans certains cas jusqu'à 32 images de référence (contrairement aux précédentes normes, qui étaient limitées à une ou dans le cas d’images B conventionnelles, à deux) et jusqu'à 4 références différentes pour un même macrobloc. Cette fonctionnalité particulière permet habituellement des améliorations modestes au niveau du débit et de la qualité dans la plupart des scènes. Mais dans certains types de scènes, comme les scènes contenant des flashs rapides et répétitifs ou des scènes réapparaissant fréquemment, il permet une réduction du débit réellement significative. Une compensation de mouvement pouvant utiliser 7 tailles de blocs différentes (16×16, 16×8, 8×16, 8×8, 8×4, 4×8, 4×4) permet une segmentation très précise de zones se déplaçant. Une précision au quart de pixel pour la compensation de mouvement, permettant une description très précise du déplacement des zones en mouvement. Pour la chrominance, la précision de la compensation de mouvement se fait même au huitième de pixel. Une compensation de mouvement pondérée ( Weighted Prediction) par des poids et des décalages permettant à un codeur de construire des prédictions s'adaptant au changement de luminance et de chrominance de la scène courante. Ceci apporte en particulier un gain pour les scènes comportant des transitions dues à des flashs ou des fondus entre scènes effectués au montage.
Intra-prédiction ou Prédiction spatiale : sur le bord des blocs voisins pour un codage « intra » (plutôt que la seule prédiction sur les coefficients continus présente dans MPEG-2 Part 2 et la prédiction sur les coefficients de la transformée de H.263+ et MPEG-4 Part 2).
Adaptation des transformées discrètes : Une transformée entière effectuée sur des blocs de taille 4×4 pixels (proche de la DCT classique). Pour les nouveaux profils issus des extensions FRExt, une transformée supplémentaire de taille 8×8 a été ajoutée. Une transformée de Hadamard effectuée sur les coefficients moyens de la transformée spatiale primaire (pour la chrominance et éventuellement la luminance dans certains cas) pour obtenir encore plus de compression là où l'image est adoucie.
Plusieurs codeurs entropiques : CABAC ( Context-adaptive binary arithmetic coding) : Il s'agit d'un codage arithmétique. C'est une technique sophistiquée de codage entropique qui produit d'excellents résultats en ce qui concerne la compression mais possède une grande complexité (non disponible dans les profils baseline et extended). CAVLC ( Context-adaptive Huffman variable-length coding) : Il s'agit d'un codage adaptatif de type Huffman à longueur variable, qui est une alternative moins complexe que CABAC pour le codage des tables de coefficients de transformation. Bien que moins complexe que CABAC, CAVLC est plus élaboré et plus efficace que les méthodes habituellement utilisées jusqu'à présent pour coder les coefficients. Une technique simple et hautement structurée de codage à longueur variable ou ( Variable length coding) pour de nombreux éléments de syntaxe non codés par CABAC ou CAVLC, considéré comme du code exponentiel-Golomb (Exp-Golomb).
Un filtrage anti-blocs ou deblocking filter, effectué dans la boucle de codage et opéré sur les blocs 4×4, permettant de réduire les artefacts caractéristiques du codage avec transformation en bloc.
Deux modes d'entrelacement : Codage en Picture-adaptive frame-field (PAFF ou PicAFF) : l'encodeur choisit d'adapter le codage de la trame courante soit de façon progressive (une seule trame), soit par entrelacement (deux champs ou ). Codage en Macroblock-adaptive frame-field (MBAFF) : même principe que pour le PAFF sauf que l'application ne s'effectue pas au niveau de la trame mais au niveau des macroblocs 16x16. Le sens du codage est légèrement différent puisqu'il traite deux lignes de macroblocs en même temps au lieu d'une seule habituellement. En effet, dans le cas de l'entrelacement, les deux fields sont respectivement les premiers blocs 16x8 et les seconds blocs 16x8 des deux macroblocs appairés.
Une couche d'abstraction réseau ( NAL : Network abstraction layer) est définie pour permettre l'usage de la même syntaxe vidéo dans de nombreux environnements réseau, ceci inclut des possibilités telles que des paramètres de séquence ( SPS : Sequence parameter set) et d'image ( PPS : picture parameter set) qui offrent plus de robustesse et de flexibilité que les conceptions antérieures. Les tranches de commutation (appelées SP et SI) permettent à un codeur de diriger un décodeur pour que ce dernier puisse s'insérer dans un flux vidéo entrant, ceci permet du streaming vidéo à débit variable et un fonctionnement en « trick mode » (mode truqué). Quand un décodeur saute au milieu d'un flux vidéo en utilisant cette technique, il peut se synchroniser avec les images présentes à cet endroit malgré l'utilisation d'autres images (ou pas d'images) comme références préalables au déplacement. L'ordonnancement flexible des macroblocs ( FMO : Flexible macroblock ordering, alias slice groups) et l'ordonnancement arbitraire des tranches ( ASO : Arbitrary slice ordering) sont des techniques de restructuration de l'ordonnancement des régions fondamentales de l'image (macroblocs). Typiquement utilisées pour améliorer la résistance aux erreurs et aux pertes, ces techniques peuvent également être utilisées à d'autres fins. Le partitionnement des données ( DP : Data partitioning) donne la possibilité de séparer les éléments de syntaxe d'importance plus ou moins élevée dans différents paquets de données. Ceci permet d'appliquer un niveau de protection inégal ( UEP : Unequal error protection) aux erreurs en fonction de l'importance des données et d'améliorer ainsi la fiabilité du flux. Les tranches redondantes ( RS : Redundant slices) permettent d'améliorer la résistance aux erreurs et aux pertes en permettant au codeur de transmettre une version additionnelle de tout ou partie de l'image dans une qualité moindre qui pourra être utilisée si le flux principal est corrompu ou perdu.