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

Publié le 28/04/2011 par
Envoyer Imprimer


En plus des spécificités du format que nous avons vus plus avant, les encodeurs peuvent être configurés avec certaines options particulières. Voici quelques explications sur leur rôle.

Une ou deux passes ?
Lorsque l'on souhaite compresser une vidéo, on a généralement pour limite une taille de fichier donné que l'on ne souhaite pas dépasser, par exemple pour de contraintes liées au stockage (faire tenir la vidéo, ou n vidéos sur un DVD, ou un maximum de vidéos sur un smartphone, etc).

La méthode usuelle est de spécifier un bitrate – une quantité moyenne de données à utiliser pour une seconde d'encodage – à l'encodeur pour le guider. Les logiciels de transcodage gèrent d'ailleurs généralement la problématique à l'envers, on leur indique la taille du fichier désiré et ils calculent le bitrate à utiliser. Le bitrate sert cependant uniquement de guide et de limite à ne pas dépasser. L'encodeur va devoir choisir de lui-même les endroits ou il peut économiser, ou à l'inverse dépenser un peu plus de son « budget ».

Le problème de cette approche est qu'un encodeur ne sait pas de quoi est faite votre vidéo. Toutes les scènes qui la composent ont-elles la même complexité ? La fin de la vidéo est elle plus compressible que le début ? Difficile de le savoir sans être allé voir. C'est justement pour cela que, lorsque l'on souhaite obtenir un bon niveau de qualité, on utilise deux passes. Comme son nom l'indique, l'encodeur passe deux fois sur la vidéo et peut ainsi mieux gérer son bitrate.

Nous avons compressé deux vidéos avec des options de qualité identiques en utilisant une et deux passes pour illustrer le phénomène. Toutes les 100 images (environ 4 secondes), nous avons calculé le bitrate moyen par image qui apparait ci-dessous.

Maintenez la souris sur le graphique pour comparer l'évolution de la qualité.


Comme vous pouvez le voir en vert, en une seule passe l'encodeur est conservateur et se contraint sur toute la longueur de la vidéo à ne monter ni trop haut, ni ne descendre trop bas. En rouge, l'encodeur en deux passes à choisi de dépenser plus au début de la vidéo et moins à la fin. Si vous passez la souris sur le graphique, vous pouvez comprendre pourquoi en regardant la qualité visuelle que l'on compare ici par le SSIM. Les dernières minutes de notre vidéo sont plus fortement compressibles et atteignent un niveau de similarité avec la source très haut, plus haut que pour tout le reste de la vidéo. En utilisant une seconde passe, vous pouvez voir que la qualité reste bien plus constante tout le long de la vidéo, et c'est justement ce que l'on recherche : les sauts de qualités rendent inconfortable la visualisation de la vidéo.
Alors que le concept d'utiliser deux passes est communément admis depuis des années, les encodeurs GPU que nous avons testés se contentent tous d'une seule. C'est particulièrement dommage car implémenter une seconde passe serait un moyen très simple pour eux d'améliorer significativement la qualité.
GOP dynamique
Nous l'avons vu, les encodeurs ont à leur disposition trois types d'images (I Frame, B Frame, P Frame) qu'ils peuvent utilise comme bon leur semble. Un bon encodeur va ainsi placer une keyframe (I Frame) lors d'un changement de scène par exemple. Et que font les mauvais encodeurs ? Ils utilisent une structure d'image (ce que l'on appelle GOP, Group Of Pictures)… fixe ! Rien de tel que de placer une I Frame toutes les 29 images. Exemple pratique de deux encodeurs :

Encodeur 1 : IPPPPPPPPPPPPPPPPPPPPPPPPPPPPIPPPPPPPPP
Encodeur 2 : IPPPPPPPPBBBPBBBPBBBPBBBPBBBPBBBPPPPPPI


Au rang des mauvaises idées, utiliser des GOP statiques se classe parmi les plus mauvaises. Avec des conséquences sur la qualité désastreuses !

Si l'on regarde l'évolution d'une de nos métriques de qualité, on peut déjà deviner les défauts visuels que l'on verra apparaitre :


Premier problème de cette structure en paquet de 29, la qualité saute. Chaque I Frame remet les choses en place tandis que par la suite, à chaque P Frame qui se succède, la qualité baisse ! Mais regardez ce qui se passe à l'image 48. Ici, nous avons droit à un changement de scène. L'encodeur dynamique insère une keyframe pour compenser et ramener à un bon niveau de qualité. L'encodeur statique, lui, attendra son cycle et tentera de se rattraper au fur et à mesure sur chaque P Frame qui remonte légèrement la qualité jusqu'à ce que les choses redeviennent normales à la prochaine I Frame !
En image, la différence de netteté saute littéralement aux yeux :

Maintenez la souris sur l'image pour voir l'I-Frame suivante.

Avatar, Fox Pathé Europa

Maintenant que nous avons passé en revue les écueils potentiels, passons aux tests que nous avons réalisés.
Vos réactions

Top articles