web-dev-qa-db-fra.com

Traitement vidéo accéléré par GPU avec ffmpeg

Je souhaite utiliser ffmpeg pour accélérer l’encodage et le décodage vidéo avec un processeur graphique NVIDIA.

De site Web de NVIDIA :

Les GPU NVIDIA contiennent un ou plusieurs décodeurs et codeurs matériels (distincts des cœurs CUDA) qui fournissent un décodage et un codage vidéo entièrement accélérés basés sur le matériel pour plusieurs codecs courants. Lorsque le décodage/encodage est déchargé, le moteur graphique et la CPU sont libres pour d'autres opérations.

Ma question est la suivante: puis-je utiliser les cœurs CUDA pour encoder et décoder la vidéo, peut-être plus rapidement?

15
Wang Hai

FFmpeg fournit un sous-système pour l'accélération matérielle, qui inclut NVIDIA: https://trac.ffmpeg.org/wiki/HWAccelIntro

Pour pouvoir prendre en charge le codage assisté par GPU avec un GPU NVIDIA, vous avez besoin des éléments suivants:

  • n GPU supporté
  • Pilotes pris en charge pour votre système d'exploitation
  • Le NVIDIA Codec SDK
  • ffmpeg configuré avec --enable-nvenc (valeur par défaut si les pilotes sont détectés lors de la configuration)
10
Mike Versteeg

Comme Mike l'a mentionné, ffmpeg enveloppe certaines de ces accélérations matérielles. Vous devriez l’utiliser au lieu d’opter pour d’autres approches de bas niveau (bibliothèques officielles de NVIDIA) en premier!

Le table montre que NVENC est probablement votre candidat.

Mais: Soyez prudent et faites donc des analyses comparatives. Bien que les encodeurs GPU soient très rapides, ils sont aussi pires que ceux du CPU.

La chose à vérifier ici est la suivante: un encodeur GPU est-il en concurrence avec un encodeur CPU quand une qualité à un débit donné est ciblée? Je dirais non non non (sauf pour des débits très élevés ou une qualité très médiocre), mais c'est quelque chose qui dépend de votre cas d'utilisation. L'encodage GPU n'est pas une solution miracle, il ne fournit que des avantages.

5
sascha