J'ai installé Ubuntu 16.04 et j'ai un OC NVIDIA GTX 1070. J'ai ajouté ce PPA:
ppa:graphics-drivers/ppa
Et j'ai installé le paquet nvidia-370 pour ma GTX 1070 OC. Ensuite, j'ai lu un fichier vidéo 4K avec le codec HEVC, excepté pour permettre l’accélération matérielle du codec HEVC lors du décodage matériel, mais mpv player utilisait le mod de décodage logiciel. Comment puis-je résoudre ce problème?
Disclaimer: Désolé mais c'est une réponse pour VLC, pas un lecteur MPV. Je crois qu’il ya des bugs ou un manque de support dans mpv player car dans ma configuration, alors que VLC fonctionne correctement avec un processeur faible, mpv player ne fonctionne pas. Vous pouvez être confronté au problème du multithreading de FFmpeg (voir le point 4).
J'ai vraiment eu du mal à faire en sorte que cela fonctionne et je suis un peu déçu du support limité de NVIDIA GTX 10 * 0 (Pascal) HEVC par rapport à AMD.
Tout d'abord:
Au moment de la rédaction, le pilote NVIDIA 367.57 ne prend en charge que profil HEVCMain
name__, NOTMain 10
et autres. Voir: demande de fonctionnalité sur le forum NVIDIA . C'est une limitation du pilote Linux NVIDIA, le matériel (GTX10 * 0) le supporte techniquement (MPC-HC sous Windows lit facilement Main 10
).
Notez que la plupart des films 4K codés avec HEVC utilisent maintenant le profil HEVC Main 10
.
Vérifier le profil HEVC du fichier multimédia: Vous pouvez vérifier votre profil HEVC de fichier en cliquant avec le bouton droit de la souris sur votre fichier> Properties
name__> Audio/Video
nglet> Video
variable__> Codec
variable__.
Vérifiez la prise en charge du profil HEVC du pilote: Basculez vers les pilotes propriétaires de NVIDIA (voir ci-dessous) et exécutez:
$ vdpauinfo
Information string: NVIDIA VDPAU Driver Shared Library 367.57 [crop]
Decoder capabilities:
name level macbs width height
----------------------------------------------------
[crop]
HEVC_MAIN 153 262144 8192 8192
HEVC_MAIN_10 --- not supported ---
HEVC_MAIN_STILL --- not supported ---
HEVC_MAIN_12 --- not supported ---
HEVC_MAIN_444 --- not supported ---
Vous devez avoir au moins la version R367 (nvidia-367
).
software-properties-gtk &
Allez à l'onglet Additional drivers
, cochez NVIDIA binary driver
et Apply
les modifications.
Bien sûr, vous devez activer l'accélération matérielle dans VLC> Tools
name__> Preferences
__ (Simple
__)> Input / Codecs
> Hardware-acceleration decoding
= Auto
variable__. Pour NVIDIA, vous pouvez choisir VDPAU video decoder
explicitement.
Il existe plusieurs bogues dans VLC 2.2.2 (Ubuntu 16.04), corrigés dans les versions ultérieures (voir: journal des modifications), qui ont conduit à cette erreur trompeuse:
$ vlc --version
VLC media player 2.2.2 Weatherwax
$ vlc <file>
[crop]
[00007fa4b42cc5d8] vdpau_avcodec generic error: unsupported codec 1211250229 or profile 1
C'est clairement une erreur trompeuse et buggy. Difficile à dire, mais 1211250229
veut dire AV_CODEC_ID_HEVC
(peut être vérifié en compilant avec rustc
this code rouillé ). Et nous avons vu de vdpauinfo
que le profil HEVC 1
( = Main
name __ ) est pris en charge.
Pour le moment, VLC 2.2.4 n'est pas disponible auprès du PPA officiel de VLC (vérifiez la version stable ici). Mettez donc à niveau VLC 3.0 à partir de la branche principale (vérifiez la version principale ici), mais gardez à l'esprit qu'il s'agit d'une version nocturne:
$ Sudo add-apt-repository ppa:videolan/master-daily
$ Sudo apt update
$ Sudo apt install vlc
$ vlc --version
[crop]
VLC version 3.0.0-git Vetinari
Comme cela ne suffit pas, vous pouvez maintenant faire face à ce problème:
$ vlc <file> --verbose
[crop]
[00007f6bc4ccc688] avcodec decoder warning: thread type 1: disabling hardware acceleration
Explications sur ce fil sur le forum VLC:
Cela signifie que vous utilisez FFmpeg, ce qui ne permet plus d'activer l'accélération matérielle et le threading en même temps. Vous devez utiliser libav [mais] ceci est décidé lors de la compilation de VLC. Vous ne pouvez pas le changer au moment de l'exécution.
Une solution de contournement est disponible sur le même fil: Dans VLC> Outils> Préférences (Tous)> Entrée/Codecs> Codecs vidéo> FFmpeg, modifiez la valeur de Threads
de 0
(auto) en 1
.
Et tu as fini!
Mais il s’agit d’une solution de contournement manuelle: gardez à l’esprit que pour visionner des vidéos sans accélération GPU, vous devez réinitialiser le paramètre VLC FFmpeg Threads
pour utiliser tous vos cœurs de processeur ... ou compiler VLC à partir de la source avec libav.