Décodage et encodage vidéo matériels sous Windows et Mac : D3D11, CUDA, Vulkan, OpenGL et Metal expliqués
NVDEC, NVENC, Quick Sync, AMF, D3D11VA, Vulkan Video et VideoToolbox expliqués, le pipeline GPU sans copie, et quand l’encodage matériel vaut le coup.
L’essentiel
Le décodage et l’encodage vidéo matériels confient le gros du travail de codec à des moteurs spécialisés du GPU plutôt qu’au processeur. Sous Windows, les applications accèdent à ces moteurs via D3D11VA, D3D12, le SDK de NVIDIA basé sur CUDA, AMD AMF, Intel oneVPL ou Vulkan Video ; sur Mac, via VideoToolbox. Résultat : une charge CPU plus faible, des exports plus rapides et des images qui peuvent rester en mémoire GPU.
- Les GPU embarquent des moteurs vidéo dédiés (NVDEC et NVENC chez NVIDIA, Quick Sync chez Intel, VCN chez AMD, le moteur multimédia d’Apple) qui décodent et encodent indépendamment des cœurs graphiques.
- Sous Windows, on y accède par plusieurs API : D3D11VA et la vidéo D3D12, le SDK de NVIDIA basé sur CUDA, AMD AMF, Intel oneVPL et Media SDK, et Vulkan Video. Les Mac utilisent VideoToolbox.
- Le vrai gain est souvent une charge processeur plus faible : dans notre test, le décodage matériel de H.264 en 4K a consommé environ 95 % de temps CPU en moins que le décodage logiciel.
- L’encodage matériel est rapide mais dépense plus de bits pour une même qualité. Notre encodage HEVC sur GPU a égalé le score VMAF de x265 3,3 fois plus vite, avec 15 % de bits en plus.
- Un pipeline sans copie garde les images en mémoire GPU entre décodage, traitement, affichage et encodage, grâce à des passerelles entre D3D11, CUDA, OpenGL, Vulkan et Metal.
Le parcours d’une image
Toute application vidéo passe par les mêmes quatre étapes : décoder le fichier compressé en images, les traiter (mise à l’échelle, couleur, modèles d’IA), puis les afficher à l’écran ou les encoder dans un nouveau fichier. Chaque étape peut tourner sur le CPU ou sur le GPU, et chaque passage de l’un à l’autre coûte du temps.
Les images sont plus lourdes qu’on ne l’imagine. Une image 4K en 10 bits 4:2:0 (le format P010 qu’utilisent les GPU) occupe 3840 × 2160 × 1,5 échantillon × 2 octets, soit environ 24,9 Mo. À 60 images par seconde, cela fait 1,5 Go chaque seconde, dans chaque sens, si les images font l’aller-retour entre la mémoire système et la mémoire GPU. Un pipeline qui décode, traite et encode sur le GPU sans cet aller-retour est dit « sans copie » (zero-copy), et c’est de là que vient l’essentiel de la vitesse des logiciels vidéo modernes.
Les moteurs vidéo de votre GPU
Le décodage et l’encodage vidéo ne tournent pas sur les cœurs qui affichent les jeux ou exécutent les modèles d’IA. Les GPU comportent pour cela des blocs spécialisés distincts :
| Fabricant | Moteur de décodage | Moteur d’encodage | Accès via |
|---|---|---|---|
| NVIDIA | NVDEC | NVENC | NVIDIA Video Codec SDK (avec CUDA), D3D11VA, D3D12, Vulkan Video |
| Intel | Quick Sync Video | Quick Sync Video | Intel oneVPL (Iris Xe et plus récents), Media SDK (GPU plus anciens), D3D11VA, D3D12, Vulkan Video |
| AMD | VCN | VCN | AMD AMF, D3D11VA, D3D12, Vulkan Video |
| Apple | Moteur multimédia | Moteur multimédia | VideoToolbox |
NVIDIA le dit clairement : ses GPU contiennent des décodeurs et encodeurs matériels distincts des cœurs CUDA. Deux conséquences en découlent. D’abord, le décodage et l’encodage matériels ralentissent à peine les autres travaux du GPU : un modèle d’IA peut tourner pendant que le moteur vidéo décode les images suivantes. Ensuite, les capacités d’un moteur sont gravées dans le silicium : la prise en charge des codecs, des profondeurs de bits et des formats de chrominance dépend de la génération du GPU. La matrice de compatibilité de NVIDIA, par exemple, présente l’encodage 4:2:2 comme une nouveauté de sa génération Blackwell. Consultez la matrice de votre fabricant avant de supposer qu’un codec est accéléré.
Les API de décodage et d’encodage sous Windows et Mac
Un même moteur vidéo est en général accessible par plusieurs API. Chacune a ses points forts :
| API | Plateforme | Ce qui la distingue |
|---|---|---|
| D3D11VA | Windows | Indépendante du fabricant, intégrée à Windows, la façon la plus largement prise en charge de décoder sur n’importe quel GPU ; les images arrivent dans des textures D3D11 prêtes à afficher |
| Vidéo D3D12 | Windows | La même idée indépendante du fabricant sur Direct3D 12, avec un contrôle explicite de la mémoire et des files ; encode aussi |
| NVDEC et NVENC (Video Codec SDK) | Windows, Linux | Accès direct aux moteurs de NVIDIA, toutes les commandes de l’encodeur, et des images en mémoire CUDA pour un traitement CUDA |
| AMD AMF | Windows, Linux | Accès aux moteurs vidéo d’AMD, plus le calcul GPU pour la conversion et la mise à l’échelle |
| Intel oneVPL et Media SDK | Windows, Linux | Accès à Quick Sync : oneVPL pour Iris Xe et plus récents, Media SDK pour les anciens graphiques Intel |
| Vulkan Video | Windows, Linux, autres | Un standard multi-fabricants : décodage, encodage, calcul et graphisme dans une seule API explicite |
| VideoToolbox | macOS | Le framework d’Apple pour l’encodage et le décodage accélérés par le moteur multimédia du Mac |
Le décodage et l’encodage logiciels (libavcodec, x264, x265, SVT-AV1) restent la solution de repli pour tout ce que le matériel ne sait pas faire, et la référence en matière de qualité.
Les cinq pipelines : D3D11, CUDA, OpenGL, Vulkan et Metal
Le décodage produit des images ; le pipeline décide où elles résident et qui s’en occupe ensuite. Chaque API graphique ou de calcul correspond à un type de pipeline différent :
- D3D11 est le cheval de bataille de la vidéo sous Windows. Les décodeurs écrivent directement dans des textures D3D11, le processeur vidéo de D3D11 les convertit et les met à l’échelle, et la chaîne d’échange (swap chain) les affiche. C’est mature, ça fonctionne sur tous les GPU sous Windows, et c’est le foyer naturel des images décodées par le matériel.
- CUDA est la plateforme de calcul de NVIDIA. Les images décodées par NVDEC peuvent rester en mémoire CUDA pour être traitées, puis aller directement à NVENC. NVIDIA documente une API d’interopérabilité CUDA–Direct3D 11 : les résultats CUDA peuvent devenir des textures D3D11 sans copie par la mémoire système.
- OpenGL est l’API graphique la plus portable, encore courante dans les lecteurs et les logiciels de montage. Sous Windows, il partage des textures avec D3D11 via des extensions d’interopérabilité,
WGL_NV_DX_interop2de NVIDIA ouGL_EXT_memory_object_win32, indépendante du fabricant, qui importe la mémoire D3D11 dans OpenGL. - Vulkan est l’API explicite moderne : graphisme, calcul et, avec Vulkan Video, décodage et encodage au même endroit, quel que soit le fabricant. L’extension
VK_KHR_external_memory_win32permet à Vulkan de partager de la mémoire avec D3D11 sous Windows. - Metal est l’API GPU d’Apple pour le graphisme et le calcul sur Apple silicon. Apple explique que la mémoire unifiée de la puce permet à tous ses composants d’accéder aux mêmes données sans les copier d’un pool de mémoire à l’autre : une image décodée via VideoToolbox peut ainsi être traitée et affichée sans traverser de bus.
La difficulté ne tient à aucune API en particulier, mais aux frontières entre elles. Une image décodée avec CUDA mais affichée avec OpenGL a besoin d’une passerelle, et une passerelle qui retombe sur la mémoire système fait perdre l’avantage du décodage sur GPU.
Ce qu’ont montré nos tests
Nous avons testé un ordinateur portable ordinaire : un Intel Core i7-1360P avec la puce graphique intégrée Intel Iris Xe, sous FFmpeg 8.1. FFmpeg y a listé trois voies matérielles : D3D11VA, D3D12VA et Vulkan.
Décodage de 5 secondes de H.264 en 4K (121 images à 25 Mbit/s) :
| Voie | Temps CPU (utilisateur et système) | Temps réel |
|---|---|---|
| Logicielle (libavcodec) | 4,45 s | 0,55 s |
| D3D11VA | 0,22 s | 0,40 s |
| D3D12VA | 0,30 s | 0,48 s |
| Vulkan | 0,25 s | 0,52 s |
Le CPU a décodé le H.264 rapidement en répartissant le travail sur de nombreux threads, mais il y a consacré environ 4,5 secondes de temps CPU. Les trois voies matérielles ont terminé à peu près aussi vite en consommant environ 95 % de temps CPU en moins, ce qui libère le processeur pour tout le reste du pipeline.
Encodage de 5 secondes de vidéo 1080p détaillée avec une cible de 4 Mbit/s :
| Encodeur | Durée | Débit réel | VMAF |
|---|---|---|---|
| x264, preset medium (logiciel) | 3,7 s | 3,4 Mbit/s | 71,6 |
| x265, preset medium (logiciel) | 7,0 s | 3,5 Mbit/s | 72,5 |
| H.264 sur le GPU (D3D12) | 2,1 s | 4,3 Mbit/s | 67,2 |
| HEVC sur le GPU (D3D12) | 2,1 s | 4,1 Mbit/s | 72,8 |

L’encodeur HEVC du GPU a égalé le score VMAF de x265 3,3 fois plus vite, mais il lui a fallu environ 15 % de bits en plus ; son encodeur H.264 a utilisé 26 % de bits de plus que x264 et a quand même obtenu un score inférieur. C’est le compromis habituel : les encodeurs matériels sont optimisés pour la vitesse et la consommation, les encodeurs logiciels pour la qualité par bit. Avec ce pilote, les encodeurs Vulkan Video de FFmpeg n’ont pas démarré, ce qui rappelle que la prise en charge varie selon le GPU et le pilote. Notre façon de noter la qualité vidéo explique ce que mesure VMAF.
Comment KwaFlux exploite chaque voie
KwaFlux ne mise pas sur une seule API. Son moteur multimédia embarque un plugin pour chaque voie de décodage et d’encodage, ainsi que des passerelles entre les pipelines : il peut ainsi choisir une voie matérielle qui fonctionne sur chaque machine et garder les images sur le GPU.

- Huit voies de décodage, essayées dans l’ordre. Sous Windows, la configuration du moteur essaie D3D11VA, puis D3D12VA, NVIDIA NVDEC, AMD AMF, Intel oneVPL, Intel Media SDK et Vulkan Video, et ne décode en logiciel que si aucune ne peut prendre le fichier.
- Six voies d’encodage. Pour l’encodage, il essaie NVIDIA NVENC, AMD AMF, Intel oneVPL, Media SDK et Vulkan Video avant le logiciel. Sa table d’encodeurs comprend aussi les encodeurs VideoToolbox d’Apple.
- Quatre moteurs de rendu. L’image est dessinée avec D3D11, OpenGL, Vulkan ou Metal. Le réglage par défaut, AUTO, laisse le moteur choisir, et un moteur de rendu non pris en charge par la plateforme se replie sur AUTO.
- Des passerelles qui évitent la mémoire système. Les images NVDEC rejoignent D3D11 via l’interopérabilité D3D11 de CUDA ; D3D11 et OpenGL partagent des textures via
WGL_NV_DX_interop2ouGL_EXT_memory_object_win32; Vulkan partage de la mémoire avec D3D11 viaVK_KHR_external_memory_win32; D3D12 et D3D11 échangent des images via des handles DXGI partagés. Quand OpenGL n’a pas de passerelle efficace sur une machine, le lecteur bascule sur D3D11 au lieu de copier chaque image. - Un seul GPU par tâche. Sur les ordinateurs portables à deux GPU, le moteur associe les adaptateurs par leur LUID, pour que décodage, traitement et affichage ne fassent pas transiter les images entre le GPU intégré et le GPU dédié.
- De la récupération, pas des plantages. Si Windows réinitialise le pilote graphique (TDR), le lecteur recrée son périphérique D3D11. Chaque passerelle a une voie CPU, et un export dont l’encodeur GPU ne démarre pas est encodé en logiciel.
- L’IA sur tout GPU récent. Sous Windows, le traitement IA passe par ONNX Runtime avec DirectML, qui fonctionne sur les GPU DirectX 12 d’Intel, d’AMD et de NVIDIA. Sous macOS 13 ou plus récent, le composant d’accélération GPU exécute les fonctions prises en charge via Core ML d’Apple. Quel GPU il vous faut et KwaFlux sur Mac traitent du matériel.
Deux réglages permettent de piloter tout cela. Paramètres › Performances › Décodage matériel active ou désactive le décodage matériel (le changement s’applique après un redémarrage), et Processeur d’IA choisit Auto, GPU ou CPU pour le travail d’IA. Dans le Convertisseur, Conversion rapide › Accélération GPU encode le H.264 et le HEVC sur la carte graphique. L’option est désactivée par défaut : KwaFlux indique qu’elle est plus rapide, mais d’une qualité légèrement inférieure à l’encodage logiciel à débit égal, ce qui correspond à notre test. Chaque fichier affiche un badge Encodé par GPU, ou Encodé par logiciel si l’encodeur GPU n’a pas pu démarrer.
Comment vérifier votre machine
Listez les voies matérielles que FFmpeg peut utiliser :
ffmpeg -hide_banner -hwaccelsComparez le temps CPU du décodage logiciel et du décodage matériel. La ligne -benchmark indique le temps utilisateur (utime), système (stime) et réel (rtime) :
ffmpeg -hide_banner -benchmark -i input.mp4 -an -f null -ffmpeg -hide_banner -benchmark -hwaccel d3d11va -hwaccel_output_format d3d11 -i input.mp4 -an -f null -Encodez en HEVC sur le GPU via D3D12 et comparez avec x265 à la même cible :
ffmpeg -hide_banner -loglevel error -y -init_hw_device d3d12va=gpu -filter_hw_device gpu -i input.mp4 -vf "format=nv12,hwupload" -c:v hevc_d3d12va -rc_mode VBR -b:v 4M -maxrate 6M -c:a copy gpu_hevc.mp4ffmpeg -hide_banner -loglevel error -y -i input.mp4 -c:v libx265 -preset medium -b:v 4M -c:a copy cpu_hevc.mp4Notez ensuite chaque fichier par rapport à la source. Téléchargez d’abord vmaf_v0.6.1.json depuis le dépôt VMAF de Netflix dans le même dossier, car certaines versions de FFmpeg n’intègrent pas de modèle :
ffmpeg -hide_banner -i gpu_hevc.mp4 -i input.mp4 -lavfi "[0:v][1:v]libvmaf=model=path=vmaf_v0.6.1.json" -f null -Si l’encodage matériel obtient un score proche de l’encodage logiciel à débit comparable, utilisez-le pour les brouillons et les partages rapides ; gardez l’encodage logiciel pour l’archivage. Pour le choix du codec lui-même, voir H.264, H.265 ou AV1.
Problèmes courants
| Problème | Cause probable | Solution |
|---|---|---|
| Un fichier est décodé en logiciel malgré le décodage matériel activé | Codec, profondeur de bits ou format de chrominance non pris en charge par le moteur (souvent 4:2:2 ou 4:4:4) | Consultez la matrice de compatibilité du fabricant ; le décodage logiciel fonctionne quand même |
| Les fichiers encodés sur GPU paraissent moins nets | Les encodeurs matériels utilisent les bits moins efficacement | Augmentez le débit, ou désactivez l’accélération GPU pour les versions finales |
| L’encodage GPU retombe sur le logiciel | Format non pris en charge, encodeur occupé ou problème de pilote | Mettez à jour le pilote graphique ; dans le Convertisseur, seuls le H.264 et le HEVC sont encodés sur GPU |
| Saccades sur un portable à deux GPU | Images qui transitent entre le GPU intégré et le GPU dédié | Lancez l’app sur le GPU auquel l’écran est relié, ou mettez à jour les pilotes |
| L’écran clignote puis l’image revient | Windows a réinitialisé le pilote graphique (TDR) | Mettez à jour le pilote ; réduisez les autres charges GPU pendant les longs exports |
| Le décodage matériel ne semble pas plus rapide | Le CPU décode vite ce codec | Regardez plutôt la charge CPU : le gain, c’est le temps CPU économisé |
Les limites
- Le décodage matériel n’améliore pas l’image. Les décodeurs produisent les mêmes images que le logiciel ; seul le travail change de place.
- L’encodage matériel ne bat pas un preset logiciel lent en qualité par bit. Il l’emporte sur la vitesse et la consommation.
- Aucun GPU n’accélère tous les codecs. La prise en charge est fixée par la génération de la puce et par le pilote.
- Le pipeline sans copie exige un matériel compatible. Quand deux API ou deux GPU ne peuvent pas partager de mémoire, les images prennent la voie CPU, plus lente.
Conclusion
Le décodage et l’encodage matériels, c’est une question d’endroit où se fait le travail : sur des moteurs spécialisés plutôt que sur le CPU, et idéalement sans que les images quittent la mémoire GPU. Activez le décodage matériel pour travailler plus fluidement, utilisez l’encodage GPU quand la vitesse compte plus que les derniers gains d’efficacité, et mesurez les deux sur votre propre machine.
KwaFlux décode, traite et encode la vidéo sur votre propre GPU, dans le Convertisseur comme dans chaque module d’IA. Vos fichiers média ne sont pas envoyés pour être traités. KwaFlux fonctionne sous Windows 10 (64 bits, version 1809 ou plus récente), Windows 11 et macOS 12 ou plus récent sur Apple Silicon. Importer des fichiers et explorer l’app ne demandent pas de compte. Une connexion avec un forfait payant n’est requise que pour exporter, convertir, réparer un fichier ou télécharger un fichier depuis un lien.
Testez sur vos propres images
Téléchargez KwaFlux et prévisualisez gratuitement les effets sur vos propres images avant de payer — sans compte, traitement sur votre GPU, sans envoi de vos médias. Les aperçus vidéo durent 1, 3 ou 5 secondes, ceux de la stabilisation 5, 15 ou 30 secondes.
Questions fréquentes
L’encodage matériel est-il moins bon que l’encodage logiciel ?
En général, oui, à débit égal. Les encodeurs matériels privilégient la vitesse et la consommation plutôt que l’efficacité, et il leur faut donc plus de bits pour une même qualité. Dans notre test, l’encodeur HEVC du GPU a égalé le score VMAF de x265 3,3 fois plus vite, mais avec environ 15 % de bits en plus.
Le décodage matériel rend-il la lecture plus rapide ?
Parfois. Son principal gain est une charge CPU plus faible : dans notre test en H.264 4K, le décodage matériel a consommé environ 95 % de temps CPU en moins pour une vitesse comparable. Il est surtout utile pour les codecs exigeants, les hautes résolutions et quand le CPU est occupé à autre chose.
Quelle différence entre D3D11VA et NVDEC ?
Les deux utilisent le même matériel de décodage sur un GPU NVIDIA. D3D11VA est l’interface de Microsoft, indépendante du fabricant, et livre les images sous forme de textures D3D11 ; NVDEC est l’interface propre à NVIDIA et livre les images à CUDA pour traitement. Les applications choisissent selon la destination suivante des images.
Une puce graphique intégrée peut-elle décoder et encoder de la vidéo ?
Oui. Les GPU intégrés d’Intel comprennent Quick Sync Video, et les puces récentes d’AMD et d’Apple ont leurs propres moteurs vidéo. Notre portable de test a décodé du H.264 4K et encodé du HEVC sur sa puce Iris Xe. La prise en charge des codecs dépend de la génération.
Pourquoi mon fichier 4:2:2 est-il décodé en logiciel ?
Parce que de nombreux moteurs vidéo grand public ne décodent que le 4:2:0, le format de la plupart des vidéos de diffusion, et que le 4:2:2 n’est arrivé que sur certaines générations récentes. Le décodage logiciel fonctionne quand même, au prix d’une charge CPU plus élevée. Le sous-échantillonnage de la chrominance expliqué présente les formats.
Sources
- NVIDIA, "NVIDIA Video Codec SDK" (hardware decoders and encoders separate from the CUDA cores; NVENC codecs; 4:2:2 encoding on Blackwell) (consulté le 2026-10-22)
- NVIDIA, "Video Encode and Decode GPU Support Matrix" (consulté le 2026-10-22)
- NVIDIA, CUDA Runtime API, "Direct3D 11 Interoperability" (consulté le 2026-10-22)
- Intel, "Intel Video Processing Library (Intel VPL)" (hardware decode, encode, and processing; VPL runtime for Iris Xe and newer, Media SDK for older graphics) (consulté le 2026-10-22)
- AMD GPUOpen, "Advanced Media Framework (AMF) SDK" (access to AMD video engines, compute shaders, and hardware accelerators) (consulté le 2026-10-22)
- Microsoft Learn, "Direct3D 11 Video APIs" (consulté le 2026-10-22)
- Microsoft Learn, "WDDM support for timeout detection and recovery" (TDR resets an unresponsive graphics card) (consulté le 2026-10-22)
- ONNX Runtime, "DirectML Execution Provider" (DirectML is a DirectX 12 library for machine learning across a broad range of hardware) (consulté le 2026-10-22)
- Khronos, "VK_KHR_external_memory_win32" reference page (consulté le 2026-10-22)
- Khronos OpenGL Registry, "WGL_NV_DX_interop2" (sharing Direct3D 10 and 11 resources with OpenGL) (consulté le 2026-10-22)
- Apple Developer, "Video Toolbox" (hardware-accelerated video encoding and decoding) (consulté le 2026-10-22)
- Apple Developer, "Metal" (graphics and compute on Apple GPUs) (consulté le 2026-10-22)
- Apple Newsroom, "Apple unleashes M1" (unified memory lets the chip's components access the same data without copying it between pools of memory) (consulté le 2026-10-22)
- Netflix, "VMAF" repository (vmaf_v0.6.1.json model) (consulté le 2026-10-22)
- FFmpeg documentation (`-hwaccel`, `-hwaccel_output_format`, `-init_hw_device`, `-benchmark`) (consulté le 2026-10-22)

