Encodage H.264 : Retour sur NVENC et QuickSync
Dans notre test de la GeForce GTX 680 de Nvidia, nous avions mentionné l'arrivée d'une nouvelle fonctionnalité baptisée NVENC, un encodeur H.264 placé dans une unité fixe. Qu'apporte-t-il par rapport à l'accélération CUDA traditionnelle ? Que vaut-il fasse à QuickSync ? Des questions qui méritent réponses !
Mise à jour du 30 mai 2012 : Suite à une erreur de notre part concernant les versions de MediaEspresso, nous avons mis à jour l'article avec la version correcte du logiciel qui permet d'activer NVENC. Nos résultats précédents étaient réalisés en mode CUDA contrairement à ce que nous avions précédemment indiqué. Nous nous excusons une fois de plus pour cette erreur.
L'accélération de l'encodage vidéo est devenue depuis quelques temps un fer de lance pour les constructeurs de GPU qui ont proposé, tour à tour, leurs solutions. Nous avions fait un point relativement complet sur le sujet l'année dernière (nous vous referons aux premières pages de cet article pour les points techniques qui suivront dans l'article et que nous ne détailleront pas de nouveau), mais depuis, quelques petites nouveautés ont vu le jour.
Pour rappel, côté hardware, AMD et Nvidia proposaient d'utiliser les capacités GPGPU de leurs cartes en utilisant les unités shaders pour accélérer le décodage. Intel de son côté avait, avec Sandy Bridge, ajouté une unité hardware dédiée à accélérer certaines parties de l'encodage. L'avantage d'une unité fixe étant de faire baisser la consommation. L'avantage d'utiliser les unités shaders étant théoriquement la flexibilité offerte. Pour pouvoir profiter de ces fonctionnalités, les trois constructeurs proposaient chacun un SDK logiciel, intégrable par des logiciels tiers qui peuvent alors proposer une accélération matérielle. C'est le cas de logiciels grand public comme MediaEspresso de Cyberlink par exemple. Outre la qualité du SDK, savoir en faire un bon usage peut faire des différences drastiques, c'est ce que nous avions vu dans notre test de l'époque. Globalement, une autre conclusion de notre article tenait sur la qualité piètre des encodages réalisés avec accélération.
Depuis, plusieurs petites choses ont changé. D'abord chez AMD, on aura vu avec le lancement des Radeon HD 7000 l'arrivée d'un bloc d'unités fixe dédié à l'accélération du traitement. Baptisé Video Codec Engine, ce bloc de fonctionnalité était annoncé comme capable de traiter jusque 60 images 1080p par secondes. Aucun détail sur la qualité d'image ou les capacités techniques de l'encodeur (l'encodeur AMD pour la génération précédente est limité au profil H.264 baseline). Seul problème, cinq mois après le lancement des Radeon HD 7970, aucune application ne supporte encore officiellement VCE… même si cela ne devrait plus tarder : Cyberlink a annoncé le support de VCE pour la prochaine version de MediaEspresso.
Un VCE qui répond toujours aux abonnés absent pour AMD…
Chez Intel, la nouveauté est bien entendu du côté d'Ivy Bridge. Pas de modification annoncée côté matériel par Intel si ce n'est une augmentation de la vitesse que nous avions noté. Nous avions également relevé quelques menues différences côté qualité entre HD 3000, HD 2500 et HD 4000 mais cela semblait plus tenir de l'application de filtres par le SDK d'Intel. Des différences globalement minces.
MediaSDK est l'API qui gère l'encodage H.264 pour Intel
Enfin chez Nvidia les GeForce GTX 680 ont été l'occasion d'apporter NVENC. Là encore le concept est identique à ce qu'a voulu faire AMD avec son Video Codec Engine, si ce n'est que le constructeur annonce jusque 240 images par secondes en 1080p. La encore, le constructeur est resté discret sur la qualité, et côté spécifications, NVENC semble supporter les mêmes fonctionnalités que le SDK CUDA précédent, à savoir gestion des profils H.264 jusqu'au mode High (4.1). Contrairement au VCE d'AMD cependant, NVENC est bel et bien disponible sous la forme d'un SDK fourni aux développeurs tiers, ce qui pour l'instant n'est le cas que de Cyberlink et de son MediaEspresso en version 6.5. Nvidia indique que d'autres logiciels suivront, comme par exemple Media Converter d'Arcsoft. Un SDK CUDA permettant d'utiliser directement NVENC sera selon la marque lancé avant la fin de l'année.
Nous avons donc voulu regarder ce que donnait l'encodage côté NVENC et QuickSync Ivy Bridge, nous avons utilisé pour cela une configuration Ivy Bridge composée d'un processeur Intel Core i5 3570K (HD 4000) sur une carte mère Asus P8Z77-V Pro. Pour tester les performances de NVENC, nous avons utilisé une GeForce GTX 680, une GeForce GTX 670 ainsi qu'une GeForce GTX 480 ajoutée à titre de comparaison. Pour rappel, la rapidité du GPU utilisé via l'encodeur CUDA ne change pas le temps de calcul, une modeste GTS 450 obtenait les mêmes résultats qu'une carte haut de gamme. Tous les tests sont réalisés avec Media Espresso de Cyberlink en version 6.5 compatible NVENC/QuickSync. Afin d'être complet nous avons également ajouté deux encodages réalisés avec une version récente de H.264 (build 2197).
Comme nous l'évoquions en introduction, la version beta de MediaEspresso que nous avions utilisé précédemment n'était pas compatible NVENC. Nous avons réalisés de nouveau les tests avec cette version. Vous trouverez donc dans les graphiques ci-dessous un encodage "CUDA" et "NVENC" pour la GTX 680. Il est a noter que la version beta "NVENC" de MediaEspresso est particulièrement capricieuse puisque nous n'avons pu la faire fonctionner que sur une GeForce GTX 680, et uniquement avec les pilotes 300.99 (à savoir, les pilotes beta du lancement des GTX 680). Les pilotes publiques (301.42) bien qu'annoncés compatibles NVENC dans les releases notes n'ont pas fonctionné avec cette version précise de MediaEspresso. Ces pilotes sont qui plus est incompatibles avec les GeForce GTX 670. Nous remercions le magasin Nicolas et Fils pour le prêt des cartes qui nous a permis de corriger notre article.
Notez enfin que la version de MediaEspresso que nous avons utilisé n'est pas publique. Une version supportant officiellement les GeForce 600, les processeurs Ivy Bridge et les Radeon HD 7000 devrait être mise à disposition sous peu par la société. Les beta dont nous disposons sont encore incompatibles Radeon HD 7000.
Le logiciel MediaEspresso de Cyberlink
Pour rappel, MediaEspresso n'avait pas particulièrement bien figuré dans notre comparatif, à cause entre autre de bugs et de limitations assez fortes côté technique (GOP fixe, limite au profil baseline, etc…).
PSNR et SSIM
Comme nous l'avions expliqué à l'époque, il n'existe pas de méthode parfaite pour quantifier la différence de qualité entre les encodages. Deux mesures existent, SSIM et PSNR (vous pouvez vous reporter à notre article pour leur signification) ayant chacun leurs inconvénients. Nous avons tout de même calculé ces valeurs moyennes pour l'encodage de notre scène du film Inception, en 720p. Plus la valeur est élevée, et plus la qualité est haute. Comme on le verra par la suite une différence légère de PSNR ou de SSIM engendre souvent des différences drastiques côté qualité d'image !
Contrairement à ce que nous avions précédemment écrit, NVENC, une fois que l'on a réussi à l'activer, apporte bel et bien un bond en avant par rapport aux encodages CUDA précédents. Est annoncé ici un bond en avant particulièrement net côté PSNR ou l'encodage NVENC vient se placer devant la version "CPU" pure proposée par le logiciel de Cyberlink. La version CPU reste devant cependant lorsque l'on regarde la mesure SSIM, jugée généralement comme plus "juste" (même si comme nous l'avions indiqué dans notre article original sur le sujet, il est possible d'optimiser un encodage pour l'une ou l'autre de ces mesures). L'implémentation en unité fixe diffère donc de l'implémentation CUDA, et semble proposer un bond en avant qualitatif. De son côté x264 propose sans forcer des résultats moyens bien plus hauts, particulièrement côté SSIM : il n'est pas limité au profil "baseline".
Les moyennes ne disent cependant pas tout, nous comparons la qualité individuelle de chaque image par rapport à sa source via SSIM pour 500 images :
Pour rappel ce graphique nous permet de voir l'évolution de la qualité au fil de la scène. Idéalement, on souhaiterait avoir une ligne droite, c'est-à-dire une qualité relativement constante d'une image à l'autre. Les sauts indiquent un changement brusque de qualité d'image, ce qui peut se traduire par l'apparition d'artefacts très visibles et donc dérangeants. Tous les sauts ne sont cependant pas anormaux, certaines scènes peuvent être plus faciles à compresser que d'autres. Ainsi on alterne dans cette scène des mouvements rapides (et complexes à compresser) entre les images 0 et 187, ue scène "fixe" (simple à compresser) entre 188 et 243, une autre complexe entre 244 et 350, et pour les dernières images une scène excessivement simple à compresser.
Comme l'on peut le voir en regardant attentivement, la limitation du GOP fixe est toujours présente dans le logiciel de Cyberlink et l'on obtient des sauts de qualité toutes les 30 images environ à cause de cela : des sauts violents vers le haut (dû à l'insertion d'une I-Frame) suivis de sauts vers le bas relativement dramatiques.
Si l'on compare l'encodage CUDA a l'encodage NVENC, on peut noter que globalement, c'est par rapport aux scènes les plus complexes que l'on peut noter des gains souvent très nets. Comparé à QuickSync cependant la comparaison est plus complexe puisque l'encodage Intel peut dans certains cas apporter un résultat plus bas en pointe, même si assez souvent le gros de la différence pour l'encodage NVENC se passe au début des scènes lentes ou la qualité remonte plus rapidement.
x264 même avec le mode simple passe reste très significativement devant, c'est également le cas du mode CPU de Media Espresso qui reste plus homogène dans les scènes difficiles.
Quid de la qualité en pratique ? Nous avons extrait l'image 317 du graph ci-dessus que vous pouvez voir en cliquant sur l'image (un nouvel onglet s'ouvrira) :
La perte de détails et de textures avec l'encodeur CUDA reste la plus forte, on notera que la dernière version de x264 se débrouille plutôt bien en mode une passe. Avec deux passes on est suffisamment proche de la source pour que les différences ne dérangent personne. La version NVENC nous semble significativement en dessous de la version QuickSync sur cette image avec une perte de détails plus forte, par exemple sur les tables en rotin à gauche et à droite, ou l'on perd fortement la texture. La version CUDA conserve même un petit peu plus de détails sur cette table de droite, même si globalement l'image NVENC lui reste supérieure.
Temps d'encodage et consommation
Nous avons relevé le temps d'encodage nécessaire pour l'extrait d'Avatar en 720p que nous avions utilisé dans notre comparatif précédent. Nous avons également relevé la consommation à la prise de la configuration complète, et afin de mettre sur un pied d'égalité toutes les solutions, nous avons mesuré la consommation au repos et soustrait cette dernière de la consommation en encodage afin de noter le surplus de consommation engendré par l'encodage en lui-même.
Il est intéréssant de voir que l'execution du mode CUDA est significativement plus rapide sur les GTX 680 que sur les cartes précédentes. NVENC propose cependant de par son unité fixe un gain significatif puisque l'on économise 41 watts pour un résultat dont la qualité est supérieur.
Globalement QuickSync reste cependant la meilleure solution accélérée avec une consommation dérisoire, inférieure à celle d'un encodage purement processeur sur notre Core i5 3570K. Il est intéressant également de comparer les performances des modes processeurs. D'abord, le mode simple passe de x264 "veryfast" est extrêmement véloce, significativement plus rapide que le mode processeur de Cyberlink. Et la qualité (voir au dessus) est sans commune mesure. Le mode deux passes, quasi parfait visuellement, est à peine plus lent que cet encodage. Là encore, ce n'est pas une surprise.
Ramené en Watts heure (nous multiplions la consommation instantanée de la machine par le temps en secondes), le résultat est sans appel pour QuickSync, l'avantage de NVENC est cependant massif par rapport aux solutions CUDA. x264 en mode une passe est comparativement deux fois plus gourmand.
Conclusion
Nvidia propose avec NVENC un bond en avant intéressant par rapport à sa génération précédente de produit. Avec une consommation plus faible et un temps de calcul légèrement plus rapide, Nvidia diminue un peu l'écart qu'avait creusé Intel avec son diaboliquement efficace QuickSync.
Lorsqu'il s'agit de parler de qualité d'image cependant, les choses sont toujours un peu plus mitigées. On doit tout de même saluer le fait qu'avec NVENC, la qualité de l'encodage remonte significativement par rapport à l'encodeur CUDA, pour arriver à un niveau relativement proche de celui de QuickSync. Globalement les deux solutions, sur le plan de la qualité, proposent des encodages qui ont chacun leurs particularités et leurs défauts. Et qui sont dans tous les cas derrière ce que propose Cyberlink avec son propre encodeur processeur qui reste plus homogène… bien que loin lui-même de x264.
Bien entendu, le logiciel de Cyberlink est limité à un bitrate constant et à un profil H.264 "baseline", tout de même désuet en 2012 pour les applications et les périphériques modernes. Il sera intéressant de voir un peu plus tard si les bonnes prestations relatives de NVENC s'étendent également dans le profil "high", plus complexe à encoder.
Sur le plan de la rapidité et de la consommation, si le bond en avant est très louable pour Nvidia, QuickSync reste un mur inatteignable d'efficacité, tout en proposant un niveau de qualité équivalent à légèrement supérieur.
Si l'on parle de supériorité on est obligé d'évoquer x264 qui est la solution qui ironiquement a la plus évoluée. Les gains de rapidité sont nets, en mode Veryfast 1p nous obtenions - sur un processeur pourtant légèrement plus rapide, un Core i7 2600k - un temps d'encodage qui était quasi le double de celui de l'encodage avec une carte Nvidia CUDA et le mode deux passes - que nous conseillons toujours à ceux qui recherchent la qualité tout en ayant une maitrise complète de la taille du fichier final - profite lui aussi d'un gain significatif.
Au final et sans surprises nos recommandations ne changent guère. Ceux qui cherchent un encodage excessivement rapide au détriment de la qualité privilégieront le QuickSync d'Intel, imbattable sur le plan de la rapidité et de la consommation énergétique. NVENC prend ici la seconde place en se plaçant comme une alternative honorable. Si la qualité vous importe un tant soit peu, l'utilisation de x264 (via des logiciels comme StaxRip ou Handbrake) nous parait être, encore plus aujourd'hui, la meilleure solution ! L'arrivée prochaine d'une accélération OpenCL dans x264 (pour une petite partie du traitement) permettra peut être d'obtenir à terme un compromis entre GPGPU et qualité d'encodage.
Contenus relatifs
- [+] 09/05: AMD Ryzen 7 2700, Ryzen 5 2600 et I...
- [+] 04/05: Un Coffee Lake 8 coeurs en préparat...
- [+] 04/05: Nvidia abandonne son GeForce Partne...
- [+] 27/04: Le 10nm d'Intel (encore) retardé, l...
- [+] 26/04: Jim Keller rejoint... Intel !
- [+] 19/04: 2008-2018 : tests de 62 processeurs...
- [+] 18/04: ASUS AREZ, l'effet GeForce Partner ...
- [+] 10/04: LGA4189 pour les Xeon Ice Lake !
- [+] 10/04: Nvidia : fin du support Fermi et 32...
- [+] 05/04: Pas de MAJ Microcode pour les Gulft...