Encodage H.264 - CPU vs GPU : Nvidia CUDA, AMD Stream, Intel MediaSDK et x264 en test

Publié le 28/04/2011 par
Envoyer Imprimer
B-Frames
Comme nous l'avons vu, deux types de prédictions sont possibles : on peut prédire une image par rapport à une image précédente (inter prédiction) ou par rapport à elle-même (intra prédiction). En pratique dans un fichier vidéo, on retrouve différents types d'images que l'on appelle frames :
- Certaines images n'utilisent que des blocks intra prédits. L'image peut être décodée indépendamment de toute autre, on parle alors de key frame en vidéo. L'intérêt des key frames est qu'elles permettent de gérer des fonctionnalités comme d'avance ou le retour rapide. La pratique veut que l'on place une keyframe en moyenne au moins toutes les 10 secondes. Ces images entièrement intra prédites sont baptisées I-Frames.
- D'autres images peuvent mélanger des blocs intra prédits et des blocs qui font référence à des images précédentes (inter prédits). On parle alors de P-Frames. C'est le cas de l'image que nous avons utilisé sur la page précédente.
- H.264 ajoute un troisième type d'image, optionnel. Plutôt que de faire référence uniquement à des images précédentes, une B-Frame peut faire référence… à une image future ! Cela complexifie quelque peut l'encodage bien entendu, mais en étant capable de faire référence à la fois dans le passé et dans le futur, on peut limiter le nombre de blocs intra-prédits (plus gros) que l'on doit ajouter. La compression s'en améliore donc !

Sur cette image, on peut voir une B-Frame qui cumule les trois types de blocs :


En bleu, les blocs inter prédits (prédiction temporelle, par rapport à une image précédente), en orange/rouge, les blocs intra prédits (prédiction spatiale, à l'intérieur de l'image). En vert, les blocs qui viennent du futur : ils font référence à une image suivante ! Avatar, Fox Pathé Europa


On peut également résumer le tout schématiquement comme ceci :


Filtre anti blocs
Un des problèmes récurrents des formats de compression par blocs concerne la jonction entre ces blocs. Si l'on tente de compresser trop fortement les blocs en cherchant des similarités approximatives, on se retrouve avec un phénomène ou l'on voit leurs délimitations apparaitre. Vous l'avez probablement vu dans une image JPEG trop compressée :


Exemples de blocs dûs à une compression trop extrême


H.264 intègre un filtre anti blocs qui peut être appliqué à chaque macroblock. C'est à l'encodeur de définir si, et comment ce filtre devra être appliqué par le décodeur. Un calcul efficace de ce paramètre peut être gourmand, et est parfois mis de côté par certains encodeurs pour gagner du temps, comme nous le verront.

Matrices de quantifications adaptatives
La quantification (l'étape de compression avec pertes) dans H.264 peut être adaptée en appliquant des niveaux différents à chaque bloc. On parle de matrices de quantifications indépendantes, ou plus simplement de quantification adaptative. En clair, au lieu d'appliquer une compression uniforme aux données résiduelles (la différence entre l'image source et destination, après l'application de la prédiction), certains blocs seront privilégiés par rapport à d'autres. Cela permet de conserver plus de détails dans les zones complexes.

Profils
Certaines des fonctionnalités que nous avons notées précédemment peuvent être particulièrement gourmandes, que ce soit au niveau de l'encodage ou du décodage. H.264 tentant d'être un format universel, ses auteurs ont défini de multiples « profils » d'usage qui autorisent ou non l'utilisation de certaines fonctionnalités du format. Un téléphone portable ne supportera par exemple que le profil le plus basique, tandis qu'un Blu-ray utilisera un mode plus avancé. Trois modes nous intéressent, il s'agit de ceux repris par les différents encodeurs : Baseline, Main et High. Voici un petit résumé des fonctionnalités avancées qu'ils gèrent :


En pratique on privilégiera toujours le plus haut profil possible, à concurrence des formats supportés par le périphérique destination. Si une console de jeu comme la Playstation 3 gère les trois profils, l'iPad ne gère lui officiellement que les deux premiers. Avant de transcoder, il est important de connaitre les capacités du périphérique auquel vous destinez votre fichier : le H.264, quand il s'agit de le décoder sur une machine spécifique, n'est pas si universel que l'on pourrait le croire !
Vos réactions

Top articles