PC HC et Media player MPV

Après quelques années d'utilisation de MPC-HC puis MPC-BE, je viens d'installer MPV (Version 0.35.0). sur mon PC Home Cinema.

PC HC: Portable Asus Premium R511LA-XO2634T

  • Processeur : Intel Core i5-5200U
  • GPU intégré Intel HD 5500
  • 4 Go de mémoire
  • Ecran 15.6" 1366 x 768 pixels
  • Sortie HDMI
  • Disque dur SSD Crucial 240 Go
  • Windows 10


Il s'agit d'une configuration modeste mais apte au visionnage Full HD (1920x1080) auquel je me cantonne pour le moment. Favorisant le visionnage de films et de concerts plutôt que les réglages et optimisations tous azimuts, j'ai hésité à investir un peu de temps dans MPV, mais début janvier, j'ai mis le doigt dans l'engrenage...




N'étant pas équipé en conséquence, je ne peux pas donner de retour sur les qualités du lecteur concernant le 4K/HDR. J'ai tout de même pu constater, après quelques tests le bon fonctionnement de la conversion HDR vers SDR.

Sur un fichier de test HDR/4K, l'affichage d'information MPV indique que que nous sommes en yuv 4:2:0 10 bits, que l'espace de couleur BT2020 ainsi que la fonction de transfert HDR (PQ) sont bien pris en charge.

On voit que l'affichage est en 60Hz car ce test a été fait sur mon PC de bureau dont le moniteur n'accepte que cette fréquence image. J'ai quelques saccades, ce que confirme le frame drop (les 138 trames jetées). Rien d'étonnant sur un PC Intel I5, sans carte graphique de 2012. Si le décodage se passe bien (0 frame drop), il faut ensuite appliquer un downscale 1920x1080. C'est couteux en CPU et toutes les trames n'ont pas le temps d'être traitées.




MPV Vs MPC-HC/BE

Ce qui est bien avant toute chose avec MPV  est son excellent niveau de documentation (en anglais) qui s'étale dans un pdf de 270 pages (une version HTML existe), contrairement aux bons mais peu explicatifs MPC-HC/BE obligeant parfois à des tâtonnements. L'absence de GUI, hormis pour le pilotage basique, peut rebuter mais s'avère plutôt une force, obligeant à comprendre ce que l'on fait et à paramétrer au plus près de ses besoins, ceci se passant principalement dans un unique fichier "mpv.conf" pour la lecture vidéo proprement dite. Aprés de premiers essais, à ma surprise, la lecture s'exécute sans problème, même en appliquant le profil "gpu-hq" intégrant notamment des algorithmes évolués de scaling,dithering et deband. L'image s'avère alors d'un niveau supérieur à celle prodiguée par MPC-BE, avec une réduction du banding comme on le constate en passant la souris sur l'image MPC-BE ci-dessous pour afficher sa lecture par MPV. Les captures d'écran sont réelles, depuis ces deux logiciels.

Images MPC-BE et MPV extraites telles quelles d'un générique UGC en début de film


MPV est en bonne partie basé sur ffmpeg. L'avantage est que plus de 300 filtres ffmpeg (-af pour l'audio et -vf pour la vidéo) sont utilisables par MPV, soit en les intégrant dans la ligne de commande lançant la lecture, soit activables/désactivables par raccourcis clavier ou à l'aide d'une télécommande exploitant ceux-ci.



Configuration

mpv.conf:

osd-font-size=20
osd-bar-h=1.5 
osd-bar-align-y=0.85
sub-scale=0.8
screenshot-format=png
demuxer-readahead-secs=5
--no-gpu-shader-cache
--no-icc-cache

ao=wasapi
audio-exclusive=yes
audio-channels=7.1,5.1,stereo
volume=100

[my-gpu-hq]
scale=spline36
#cscale=spline36
dscale=mitchell
dither-depth=auto
correct-downscaling=yes
linear-downscaling=yes
sigmoid-upscaling=yes
deband=yes

[concerts]
sub-file-paths=Subs
sub-scale=0.4
sub-align-x=left
sub-align-y=center

# Projecteur Marantz VP-11S2
[VP11]
brightness=1
contrast=-1
saturation=10

# Moniteur Salle HC
[moniteur]
brightness=4
contrast=-4
saturation=13


Certaines options étant générées par le scipt d'appel, le fichier de paramétrage actuel "mpv.conf" s'avère court et contient:

- Une modification des fontes d'affichage de l'OSD (elles sont énormes par défaut).
- Une diminution de la taille des sous-titres, eux aussi trop envahissants.
- Une mise en mémoire cache de 5 secondes de lecture au lieu de 1 seconde par défaut.
- L'utilisation de WASAPI (Windows Audio Session Aplication Interface) en mode exclusif qui envoie drectement vers l'ampli le flux PCM.

S'en suivent des profils identifiés par des crochets:

- Une profil avec une série de filtres (my-gpu-hq) améliorant le rendu vidéo et restant compatible avec la puissance de calcul du PC,
- Des préréglages vidéo, fonction du diffuseur d'imgage utilisé.

Par exemple pour lire Dunkerque.mkv avec le profil "my-gpu-hq" sur le projecteur Marantz VP11 il suffit d'appeler MPV ainsi:

mpv --profile my-gpu-hq --profile VP11 Dunkerque.mkv


Le lancement par le script ajoute quelques options à la ligne de commande:

  - Fullscreen exclusif: --fs --ontop
  - Décodage Hardware: --hwdec=d3d11va

→ mpv --fs --ontop --hwdec=d3d11va --profile=my-gpu-hq --profile=VP11 "Dunkerque.mkv"


Les réglages image standard des diffuseurs (luminosité,contraste,teinte saturation) sont en position médiane.Les ajustements sont ensuite réalisés dans les profils MPV (VP11 et moniteur) lors d'une calibration pour afficher correctement l'espace 16-235 et obtenir une saturation et une teinte optimum à l'aide des mires AVS ainsi que d'un filtre bleu pour l'ajustement de la saturation et de la teinte.


Télécommande par smartphone avec Unified Remote

input.conf:

# mpv - Mes raccourcis clavier

# Délai audio/vidéo
c add audio-delay 0.02
y add audio-delay -0.02

# Réglage de la teinte
B add hue 1
N add hue -1

n cycle-values sub-color "#ffff00" "#ffffff" "#999999"

# Navigation 15 secondes et 5mn
Shift+PGUP seek 300
Shift+PGDWN seek -300
RIGHT seek  15
LEFT  seek -15

# Monter / Descendre l'image
g add video-pan-y 0.025
h add video-pan-y -0.025

#Egaliseurs Audio: 3 boost de basses et atténuation de 3dB au point de raccordement des RF7
F10 af toggle "lavfi=[firequalizer=gain_entry='entry(20,3);entry(100,3);entry(250,0)']"
F11 af toggle "lavfi=[firequalizer=gain_entry='entry(20,6);entry(100,6);entry(250,0)']"
F12 af toggle "lavfi=[firequalizer=gain_entry='entry(20,9);entry(100,9);entry(250,0)']"
U af toggle "equalizer=f=2200:width_type=q:width=4.25:g=-3"
Y vf toggle "format=yuv420p"

M vf toggle "format=yuv420p"

# Filtres Video: 3 augmentations de netteté et un atténuateur de grain
F6 vf toggle "unsharp=5:5:1.5"
F7 vf toggle "unsharp=5:5:2.5"
F8 vf toggle "unsharp=7:7:4"
F9 vf toggle "hqdn3d=0:0:12:10"

# Décodage CPU ou HW
ctrl+g set hwdec "yes"
ctrl+h set hwdec "no"



MPV intègre plus de 100 raccourcis clavier. Il est possible d'en ajouter ou d'en modifier les effets en créant un fichier "input.conf". J'utilise ce fichier pour ajouter des filtres audio et vidéo et quelques fonctions comme le réglage de la teinte, absent des raccourcis d'origine.

Un raccourci passe le pas de synchronisation du son et de l'image (lip sync) à 20mS au lieu des trop élevés 100mS par défaut.

Deux boutons permettent de sélectionner le décodage CPU ou matériel. C'est utile pour appliquer un filtrage vidéo, auquel cas le décodage doit être exécuté par le CPU.

3 egaliseurs (+3, +6, +9dB) permettent de booster les basses sur les concerts qui le nécessitent, comme c'est le cas sur pas mal de Blu-Rays.


                  Réponse mesurée du filtre +9dB


Le pilotage du PC s'effectue par smartphone en Bluetooth (le Wi-Fi est aussi possible), grâce à l'application Android "Unified Remote Full" ( version payante qui coûte quelques Euros ). Une fois la partie serveur de "Unified Remote" installée sur le PC, après une petite prise en main, c'est ensuite facile à programmer: un fichier xml décrit les boutons et un script Lua contient les appels des raccourcis clavier correspondants. J'ai découpé la télécommande en trois parties plus un pad, en y intégrant les boutons les plus susceptibles d'être utilisés durant une projection.


Exemple explicatif

La pression sur la touche "Hard Decode" (3ème écran ci-dessus) du smartphone active le décodage hardware car: 1) Son bouton correspondant sur la télécommande est décrit par cette ligne dans le fichier layout.xml: <button text="Hard\nDecode" ontap="hwdecode" color="727264"> 2) L'action de ce bouton "hwdecode" est décrite ainsi dans le script remote.lua: actions.hwdecode = function () kb.stroke("ctrl", "G"); end ce code exécutera alors l'envoi du raccouci clavier CTRL/G. 3) Le raccourci clavier CTRL/G est ainsi défini dans le fichier input.conf du player MPV: ctrl+g set hwdec "yes"


Filtrage Vidéo



Cœurs Noirs

Certains films ou séries gagnent en qualité perçue en activant un filtre de netteté. J'ai mis en place trois filtres de netteté accessibles par les raccourcis clavier F6, F7 et F8 dans le fichier "input.conf". Ils vont du plus discret au plus énergique. Le second s'avère efficace sur des séries en 720p ou 1080p que je récupère parfois dans les replay de la TNT. C'est le cas de l'image ci-dessus.

Passer la souris sur la partie en taille originelle, à droite permet de visualiser l'effet lorsque l'on active le second filtre (-vf=unsharp=5:5:2.5).

J'ai ajouté une option de cropping automatique qui s'avère bien utile pour supprimer le léger liseré induit par l'utilisation d'un tel filtre au niveau des bandes noires, si bien sur il y en a. Ce cropping permet aussi de supprimer les logos de chaines et la signalétique (-16), lorsqu'elles se trouvent dans les bandes noires sur les séries au format 2.35. Cette fonctionnalité est rendue possible par chargement d'un script spécialisé: autocrop.lua. Il en existe des dizaines sur le net. Il faut lancer le cropping préalablement à l'activation du filtre sous peine de recevoir le message "Changing video frame properties on the fly is not supported by all filters.".

Un dernier filtrage temporel (hqdn3d) diminue le fourmillement via le raccourci F9 et s'avère bénéfique sur certains vieux films au grain appuyé.


Passer la souris sur l'image pour visualiser l'effet du filtre



Fréquence image

Lors du lancement de la lecture d'une vidéo, MPV ne commute pas nativement la fréquence image à la bonne valeur. Des utilitaires en ligne de commande comme "nircmd" ou "dccmd" peuvent commuter la fréquence image à une valeur souhaitée si celle-ci est compatible avec l'afficheur.

La bonne nouvelle est que des scripts Lua (autospeedwin.lua, change-refresh.lua) utilisant nircmd permettent d'ajuster la fréquence image lors du lancement de MPV. Pour ma part c'est mon script d'appel (initplay.sh) qui fait le travail avec dccmd. J'ai tout de même testé avec succès le script "change-refresh.lua".


Composition logicielle








Liens

  • MPV
  • Unified Remote
  • Scripts Lua pour MPV
  • Nircmd