Un GPU peut-il être utilisé pour encoder le h264?

13

Je me demande si j'obtiens une meilleure carte graphique pourrait-elle accélérer l'encodage h264 sur ma machine à l'aide du frein à main?

Si oui, comment savoir quelle carte graphique prendra en charge cela?

Je suis conscient que le GPU peut effectuer le décodage matériel du h264, mais je ne suis pas sûr de l'encodage.

peter
la source
Connexes: Compression vidéo accélérée - de toute façon, vous voulez avoir une carte NVIDIA pour cela et être prêt à dépenser de l'argent.
slhck
Pour l' encodage h.264, le frein à main utilise l'encodeur logiciel x264 (videolan) . Certaines réponses ci-dessous impliquent que le frein à main utilise ffmpeg, qui peut utiliser des implémentations x264 ou hw (GPU). Bien que cette vieille question (mais toujours pertinente) ne demande probablement pas "comment rendre le frein à main plus rapide", mais plutôt "comment rendre l'encodage h.264 plus rapide". Les réponses auront une durée de conservation (certaines sont déjà expirées); mais pour l'instant, si vous effectuez un traitement ML et / ou batch, vous devrez peut-être faire correspondre une implémentation à votre matériel
Michael
fwiw, j'ai trouvé ce commentaire de ffmeg intéressant: "Les encodeurs matériels génèrent généralement une sortie de qualité nettement inférieure à celle des bons encodeurs logiciels comme x264, mais ils sont généralement plus rapides et n'utilisent pas beaucoup de ressources CPU (c'est-à-dire qu'ils nécessitent un débit sortie avec la même qualité perceptuelle, ou ils produisent une sortie avec une qualité perceptuelle inférieure au même débit binaire.) "
michael

Réponses:

7

En utilisant le frein à main, la réponse serait non. Handbrake est un encodeur h.264 uniquement CPU, bien qu'il puisse désormais utiliser OpenCL pour la mise à l'échelle vidéo et prend en charge DXVA pour le décodage vidéo.

La question liée par slhck mentionne MediaCoder , mais elle nécessite soit une carte graphique Nvidia soit un processeur Intel avec un cœur graphique de 2ème génération.

Il y a quelques anciens produits obsolètes, en particulier Badaboom et le logiciel ATi Avivo.

Badaboom qui pourrait utiliser les processeurs graphiques Nvidia et Intel pour accélérer le processus d'encodage mais il est maintenant en fin de vie et ne prend pas en charge les cartes graphiques plus récentes.

ATi avait son propre encodeur vidéo qui s'appelait auparavant "Avivo" avant d'être fusionné dans le paquetage AMD Codec qui comprenait le convertisseur vidéo AMD bien qu'il ne soit plus disponible.

Mokubai
la source
Donc j'utilise un processeur AMD en ce moment, cela signifie-t-il que c'est une perte de temps pour moi? Peut-il s'agir de n'importe quelle carte NVIDIA - oh donc elle doit prendre en charge CUDA?
peter
J'ai trouvé ce lien, en.wikipedia.org/wiki/CUDA qui suggère que beaucoup de cartes NVIDIA prennent en charge CUDA.
peter
J'ai mis à jour ma réponse avec un lien vers le logiciel AMD qui peut vous aider à utiliser le GPU pour coder la vidéo, mais il nécessite une carte série HD2000 ou supérieure. Si vous avez un processeur particulièrement puissant mais une carte graphique économique, le frein à main peut être encore plus rapide.
Mokubai
Badaboom est en fin de vie au 18/04/2012.
HVS
2
La réponse ci-dessus n'est pas / n'est plus correcte.
totaam
4

x264 prend désormais en charge l'accélération de codage OpenCL. Le degré d'accélération que vous obtiendrez dépendra des performances de votre carte graphique, sur mon GTS 450, je n'en ai pas et avec des cartes plus lentes, cela ralentit l'encodage. De meilleures cartes peuvent aider. Il vous suffit d'ajouter --opencl à la ligne de commande x264. Je crois que le frein à main utilise les mêmes bibliothèques x264 et offre la même accélération OpenCL dans les versions plus récentes.

totaam
la source
Comment dois-je utiliser l'accélération de codage OpenCL?
Dr.jacky
2

https://trac.ffmpeg.org/wiki/HWAccelIntro

FFmpeg fournit un sous-système pour l'accélération matérielle.

L'accélération matérielle permet d'utiliser des périphériques spécifiques (généralement une carte graphique> ou d'autres périphériques spécifiques) pour effectuer un traitement multimédia. Cela permet d'utiliser du matériel dédié pour effectuer des calculs exigeants tout en libérant le CPU de ces calculs. L'accélération matérielle permet généralement à des périphériques matériels spécifiques (généralement le GPU) d'effectuer des opérations liées au décodage et au codage des flux vidéo ou au filtrage vidéo.

Lorsque vous utilisez l'outil FFmpeg, le décodage assisté par HW est activé à l'aide de l' -hwacceloption, qui active un décodeur spécifique. Chaque décodeur peut avoir des limitations spécifiques (par exemple, un décodeur H.264 peut uniquement prendre en charge le profil de base). L'encodage assisté par HW est activé grâce à l'utilisation d'un encodeur spécifique (par exemple nvenc_h264). Le filtrage du traitement assisté par matériel n'est pris en charge que dans quelques filtres et, dans ce cas, vous activez le code OpenCL via une option de filtre.

Il existe plusieurs API de normes d'accélération matérielle, dont certaines sont prises en charge dans une certaine mesure par FFmpeg.

L'option "-hwaccel auto" vous permet de sélectionner le décodage accéléré matériel à utiliser pour la session d'encodage. Vous pouvez ajouter ce paramètre avec "auto" avant la saisie (si votre x264 est compilé avec le support OpenCL, vous pouvez essayer d'ajouter le paramètre -x264opts), par exemple:

ffmpeg -hwaccel auto -i input -vcodec libx264 -x264opts opencl output

Désolé, mais je ne me souviens pas comment lister toutes les options disponibles pour "-hwaccel".

Vous pouvez également essayer ceci: https://wiki.archlinux.org/index.php/Hardware_video_acceleration

Ruslan Berozov
la source
Il ne semble pas que cela réponde spécifiquement à la question, bien qu'il semble utile. Que diriez-vous d'ajouter quelques détails qui montrent comment ffmpeg et ses arguments peuvent aider l'OP.
music2myear
Cette réponse implique d'utiliser ffmpeg au lieu du frein à main pour l'encodage h.264, ce qui est probablement correct, car la question demande probablement le moyen le plus rapide d'encoder - et suppose que le GPU permettrait cela. Notez que tous les GPU ne sont pas aussi puissants (par exemple, les GPU intégrés vs dédiés), et les CPU ont également des optimisations que les bibliothèques peuvent utiliser si la bibliothèque est compilée pour la prendre en charge. "L'accélération matérielle" est donc la bonne voie à suivre, que ce soit via CPU ou GPU.
michael
0

À l'heure actuelle, Handbrake prend en charge les encodeurs accélérés par matériel suivants pour H.264 / AVC:

  1. Intel QuickSync (sous Windows et sous Linux). Ceci est compatible avec au moins les gammes de processeurs Intel Sandybridge (2e génération Core) avec des graphiques intégrés activés et exposés au système d'exploitation. Matériel recommandé pour une qualité de codage acceptable: Haswell (Core-series de 4e génération) et au-delà, qui a introduit le concept de niveaux cibles à granularité fine (TU), de fonctions d'anticipation (comme les modes de codage LA-BRC et ICQ ) avec des performances nettement meilleures. Voir le guide d'utilisation de la documentation du frein à main ici .

  2. NVENC de NVIDIA : cela nécessite au moins les GPU de la série Kepler (GK +) de NVIDIA et au-dessus des SKU de consommation hautes performances (série GTX) et des gammes professionnelles (GPU Quadro et Tesla basés sur Kepler et au-delà). Ceci est disponible sur Windows et Linux.

Il est à noter qu'avec NVENC, vous serez artificiellement limité à au plus deux sessions d'encodage simultanées sur les SKU grand public, tandis que la gamme professionnelle n'en sera pas affectée. Pour votre référence sur les capacités spécifiques de l'encodeur, reportez-vous à la matrice GPU . Pour des performances et une qualité d'encodeur optimales, respectez la dernière itération des GPU Pascal et Volta .

En option:

  1. La prise en charge du codage d' AMD AMF est également disponible dans les versions nocturnes actuelles pour Windows UNIQUEMENT. Une note spéciale sur l'AMF d'AMD (qui exploite l' encodeur VCE intégré au matériel dans toutes les SKU GCN + ) est que sur le matériel plus récent, comme Polaris (série RX 400+) et Vega , certains réglages d'encodeur avancés pour H.264 / AVC ont été déconseillés car ils ont introduit la prise en charge du codage HEVC. AMD a abandonné le codage de trame B, sans prise en charge de la quantification adaptative (AQ), une fonctionnalité que les codeurs matériels susmentionnés (QuickSync et NVENC) ont mis en œuvre depuis des générations sans régression. Voir également ceci dans les notes concernant les mesures de débit sur ce à quoi s'attendre.

En ce qui concerne le support d'Apple, c'est au mieux, provisoire . L' API VideoToolBox , lorsqu'elle est implémentée au-delà de la portée de Handbrake, semble également avoir un ensemble très limité de contrôles. Même si Handbrake l'adopte en amont, ne vous attendez pas à des miracles en termes de rétention de qualité et de débit.

Notez que vous devrez peut-être utiliser la dernière version nocturne pour utiliser les dernières fonctionnalités de l'encodeur sur votre plate-forme, comme à l'heure actuelle. Cela va certainement changer à l'avenir.

林正浩
la source