Encodage H.264 - CPU vs GPU : Nvidia CUDA, AMD Stream, Intel MediaSDK et x264 en test
Publié le 28/04/2011 par Guillaume Louel

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.

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 dynamiqueNous 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 :

Avatar, Fox Pathé Europa
Maintenant que nous avons passé en revue les écueils potentiels, passons aux tests que nous avons réalisés.


Sommaire
1 - Introduction
2 - Conteneur, codec, transcodage
3 - H.264 (1/2)
4 - H.264 (2/2)
5 - Mesurer la qualité : PSRN, SSIM et leurs travers
6 - Nombre de passes, GOP dynamique
7 - Scènes de tests, configuration
8 - ArcSoft Media Converter, Avatar 720p (1/4)
9 - ArcSoft Media Converter, Inception/K-On!! 720p (2/4)
10 - ArcSoft Media Converter, Avatar 1080p (3/4)
11 - ArcSoft Media Converter, Inception/K-On!! 1080p (4/4)
12 - Cyberlink MediaEspresso, Avatar 720p (1/4)
13 - Cyberlink MediaEspresso, Inception/K-On!! 720p (2/4)
14 - Cyberlink MediaEspresso, Avatar 1080p (3/4)
2 - Conteneur, codec, transcodage
3 - H.264 (1/2)
4 - H.264 (2/2)
5 - Mesurer la qualité : PSRN, SSIM et leurs travers
6 - Nombre de passes, GOP dynamique
7 - Scènes de tests, configuration
8 - ArcSoft Media Converter, Avatar 720p (1/4)
9 - ArcSoft Media Converter, Inception/K-On!! 720p (2/4)
10 - ArcSoft Media Converter, Avatar 1080p (3/4)
11 - ArcSoft Media Converter, Inception/K-On!! 1080p (4/4)
12 - Cyberlink MediaEspresso, Avatar 720p (1/4)
13 - Cyberlink MediaEspresso, Inception/K-On!! 720p (2/4)
14 - Cyberlink MediaEspresso, Avatar 1080p (3/4)
15 - Cyberlink MediaEspresso, Inception/K-On!! 1080p(4/4)
16 - MediaCoder, Avatar 720p (1/4)
17 - MediaCoder, Inception/K-On!! 720p (2/4)
18 - MediaCoder, Avatar 1080p (3/4)
19 - MediaCoder, Inception/K-On!! 1080p(4/4)
20 - StaxRip/x264, Avatar 720p (1/4)
21 - StaxRip/x264, Inception/K-On!! 720p (2/4)
22 - StaxRip/x264, Avatar 1080p (3/4)
23 - StaxRip/x264, Inception/K-On!! 1080p(4/4)
24 - Récapitulatif 720p
25 - Récapitulatif 1080p
26 - Récapitulatif temps/consomation
27 - Conclusion
16 - MediaCoder, Avatar 720p (1/4)
17 - MediaCoder, Inception/K-On!! 720p (2/4)
18 - MediaCoder, Avatar 1080p (3/4)
19 - MediaCoder, Inception/K-On!! 1080p(4/4)
20 - StaxRip/x264, Avatar 720p (1/4)
21 - StaxRip/x264, Inception/K-On!! 720p (2/4)
22 - StaxRip/x264, Avatar 1080p (3/4)
23 - StaxRip/x264, Inception/K-On!! 1080p(4/4)
24 - Récapitulatif 720p
25 - Récapitulatif 1080p
26 - Récapitulatif temps/consomation
27 - Conclusion
Vos réactions
Contenus relatifs
- [+] 09/05: AMD Ryzen 7 2700, Ryzen 5 2600 et I...
- [+] 05/04: Pas de MAJ Microcode pour les Gulft...
- [+] 05/10: Intel Core i7-8700K, Core i5-8600K,...
- [+] 12/09: Core i7-7820X : Un Skylake-X mieux ...
- [+] 07/09: Les Skylake en fin de vie chez Inte...
- [+] 23/08: Coffee Lake incompatible avec les L...
- [+] 29/06: Intel Core i9-7900X et Core i7-7740...
- [+] 03/01: Core i5-7600K et i7-7700K : pour qu...
- [+] 28/12: Gigabyte BRIX Gaming GT
- [+] 31/10: Intel dévoile les Kaby Lake dans un...