3 points par GN⁺ 2024-08-18 | 1 commentaires | Partager sur WhatsApp
  • mpv est un lecteur multimédia libre et open source centré sur la ligne de commande, prenant en charge de nombreux formats de fichiers multimédias, codecs audio et vidéo, ainsi que formats de sous-titres
  • Grâce à de puissantes fonctions de script et à une collection de scripts utilisateur, il est facile d’étendre le lecteur de base selon ses besoins
  • Fidèle à une conception minimaliste, il ne propose pas de GUI distincte, mais fournit un petit contrôleur à l’écran permettant les manipulations de base par-dessus la vidéo
  • Avec une sortie vidéo de haute qualité basée sur OpenGL, Vulkan et D3D11, ainsi que la prise en charge des API de décodage matériel, il est possible d’ajuster la qualité de lecture dans divers environnements
  • Il dispose d’une API C pensée dès le départ pour l’intégration en bibliothèque, ce qui permet d’utiliser mpv au sein d’autres applications

Lecteur multimédia centré sur la ligne de commande

  • mpv est un lecteur multimédia libre qui s’utilise en ligne de commande
  • Il prend en charge divers formats de fichiers multimédias, codecs audio et vidéo, et formats de sous-titres

Script et mode d’utilisation

  • Les fonctions de script permettent d’étendre largement le comportement du lecteur
  • Dans une démarche minimaliste, aucune GUI distincte n’est fournie
  • Pour les manipulations de base, on peut utiliser un petit contrôleur à l’écran affiché par-dessus la vidéo

Sortie vidéo et décodage

  • Il propose une sortie vidéo basée sur OpenGL, Vulkan et D3D11
  • Il inclut aussi des fonctions de lecture destinées aux passionnés de vidéo
    • Mise à l’échelle vidéo reposant sur des algorithmes de haute qualité
    • Gestion des couleurs
    • Synchronisation des images
    • Interpolation
    • HDR
  • Sur la plupart des plateformes, plusieurs API de décodage matériel peuvent être utilisées
  • Le décodage matériel peut être activé à l’exécution lorsqu’il est nécessaire

Intégration applicative et état du développement

  • mpv a conçu dès le départ une API C afin de pouvoir être facilement intégré dans d’autres applications
  • Le projet est activement développé, avec un accent mis sur le refactoring et le nettoyage du code, ainsi que sur l’ajout de fonctionnalités
  • Les demandes de fonctionnalités ou les patchs peuvent être soumis via les issues GitHub de mpv

Ressources associées

1 commentaires

 
GN⁺ 2024-08-18
Avis sur Hacker News
  • mpv est un excellent lecteur multimédia. Il est assez minimaliste, performant, et fait correctement ce qu’il doit faire.
    Il y a aussi un commit formidable où l’auteur pique une colère à propos des locales : https://github.com/mpv-player/mpv/commit/1e70e82baa9193f6f02... Ça vaut le coup de le lire pour rire un peu.

    • Cela peut sembler étrange, mais le fait d’éviter ce genre de problèmes est peut-être l’un des plus grands gains de productivité apportés par les nouveaux langages comme Go, Rust et Swift. Les nouveaux écosystèmes ont l’occasion de recréer leur bibliothèque standard et de se débarrasser de choix hérités catastrophiques faits avant qu’on sache mieux, comme les locales ou UTF-16.
      Les bibliothèques standard de Zig, Go, Rust et d’autres langages ont une énorme avance sur la bibliothèque standard C ou les API POSIX. Rien que cela suffit à justifier leur usage.
    • C’est un texte long et instructif, avec aussi quelques jurons. Fortement recommandé.
      Il y a 25 ans, Spolsky a écrit un article intitulé « everything you wanted to know about Unicode and character sets », qui peut encore être utile même à ceux qui n’ont connu que le monde post-Unicode/UTF.
    • À propos de l’idée d’imaginer que errno ait été traité comme l’API de locale cassée du C, il existe en fait un exemple où c’est arrivé : les fonctions de temps comme localtime, localtime_r et tzset.
      Comme elles dépendent des locales, cela reste proche du sujet, mais les fuseaux horaires sont eux aussi un état global, ce qui rend impossible, en code C multithread portable POSIX, d’obtenir l’heure dans un autre fuseau horaire en utilisant uniquement les API standard.
    • « Les locales C et wchar_t sont tous deux des héritages cassés et décérébrés. S’il y avait eu des gens compétents dans les comités de normalisation C/POSIX, ils auraient été abandonnés ou supprimés depuis longtemps. gets() a bien été supprimé, non ? Pour justifier cette explosion émotionnelle, qui peut paraître insultante à ceux qui ne savent pas, je vais écrire un long texte. Si les formulations virulentes vous mettent mal à l’aise, considérez ceci comme un texte religieux. »
      Vraiment légendaire.
    • Il faut noter que l’auteur de ce commit n’est plus impliqué dans le développement de mpv depuis plusieurs années.
  • J’ai commencé à l’utiliser sur Linux il y a quelques années, et maintenant il est installé sur tous mes appareils, jusqu’à ma tablette Android. Il est parfait. Valeurs par défaut minimalistes, configuration raisonnable, rapide, et il fonctionne tout simplement.
    Il permet même la lecture native via SSH, ce qui est génial : mpv sftp://mit@nyx/home/mit/Work/merged.mp4
    Récemment, j’avais besoin d’un raccourci pour faire pivoter une vidéo ; ça ne semblait pas facile avec d’autres lecteurs, alors qu’avec mpv il suffisait d’ajouter r cycle_values video-rotate "90" "180" "270" "0" dans input.conf.

    • Il peut aussi lire des vidéos via HTTP et prend en charge de nombreux sites web, dont YouTube : mpv
  • Sous Linux, il ne faut pas oublier d’ajouter hwdec=auto à mpv.conf pour activer l’accélération matérielle. Cela fonctionne avec AMD/Intel/NVIDIA.
    https://interfacinglinux.com/2024/01/10/hardware-acceleratio...

    • Je me suis rendu compte que je regardais des vidéos avec mpv depuis des années sans accélération matérielle. Heureusement que j’ai lu ça.
    • Je l’utilise avec ce type de configuration : vo=gpu-next, gpu-api=vulkan, hwdec=vulkan, gpu-context=waylandvk
      Si la vidéo Vulkan ne fonctionne pas, on peut remplacer hwdec=vulkan par hwdec=vaapi.
    • Je me demande pourquoi ce n’est pas activé par défaut.
    • Je ne sais pas vraiment pourquoi, mais sur Fedora, probablement avec la combinaison noyau 6.10 et Vega 64, j’ai souvent eu des performances pires, avec de la latence et des saccades. Environ une fois par an, je réessaie, ça ne marche pas bien, et je finis encore par abandonner.
    • Je viens d’installer mpv avec pacman et de lancer une vidéo 4K : le ventilateur du CPU s’est immédiatement mis en route, et top montrait plusieurs cœurs utilisés. En continuant à faire défiler ce fil HN, j’ai découvert hwdec=auto.
      En tant qu’utilisateur de mplayer et de VLC, la question qui me vient immédiatement est : « quels compromis les mainteneurs acceptent-ils en ne mettant pas ça par défaut ? »
  • Ce projet possède une très longue lignée : il était autrefois connu sous le nom de mplayer. Il compte 500 000 commits remontant jusqu’en 2001, et encore, c’est à partir du moment où le dépôt CVS a été converti en Subversion.
    Utiliser streamlink avec mpv sur un Minix z100 sans ventilateur sous Ubuntu a donné une expérience presque parfaite pour regarder les Jeux olympiques.
    https://streamlink.github.io/
    https://www.minix.com.hk/products/z100-0db-fanless-n100-mini...

    • On peut difficilement dire que mplayer et mpv sont la même chose. mpv a bien été forké à partir de mplayer et d’autres projets, mais mplayer reste un projet distinct.
  • Cela peut paraître idiot, mais pour moi, la fonctionnalité essentielle est de pouvoir afficher plusieurs sous-titres simultanément. On peut régler facilement les pistes, les décalages, la position, la taille, etc. avec quelques raccourcis clavier.
    Aucun service de streaming ne propose ça, et ils cachent activement les langues de sous-titres qu’ils jugent « non pertinentes » selon l’emplacement de l’utilisateur. Difficile de respecter ce genre de service.

    • C’est vraiment une excellente fonctionnalité. Je n’ai même pas vraiment mémorisé les raccourcis, et je devrais sans doute le faire, mais commencer avec --sid1= et --sid2= marche déjà très bien.
      Ma compagne et moi ne sommes ni l’un ni l’autre anglophones natifs, et nous n’avons pas non plus la même langue maternelle. Je suis plutôt à l’aise en anglais, mais certains dialectes me posent problème, et quand l’audio est bruyant il m’arrive de manquer des mots, donc je préfère les sous-titres anglais. Ma compagne préfère les sous-titres dans sa langue maternelle.
      Pouvoir afficher plusieurs sous-titres nous permet à tous les deux d’avoir l’expérience de visionnage que nous voulons, au prix d’un peu d’espace à l’écran, ce qui en vaut largement la peine.
    • mpv est très fort pour la gestion des sous-titres. Non seulement on peut changer de piste de sous-titres et régler leur position, mais il peut aussi trouver automatiquement des fichiers de sous-titres externes et les lire avec la vidéo.
      J’ai écrit un article à ce sujet : https://www.baeldung.com/linux/mpv-subtitles-automatic. En revanche, j’ai trouvé dommage que la documentation sur les formats de sous-titres pris en charge soit insuffisante, et j’ai dû aller regarder le code de ffmpeg pour vérifier les formats réellement supportés.
      En plus, https://subdl.com/ et https://github.com/alexanderwink/subdl sont de bonnes ressources pour chercher et télécharger des sous-titres en ligne de commande.
    • C’est particulièrement utile pour l’apprentissage des langues. Mais des services comme Amazon, par exemple, n’affichent en réalité qu’environ deux langues — l’anglais et la langue locale — parmi la trentaine de sous-titres dont ils disposent. Et je ne vais même pas commencer à parler de la différence entre sous-titres et doublage.
    • Le fait de masquer des langues de sous-titres « non pertinentes » selon l’emplacement peut aussi être dû à des questions juridiques ou à des restrictions contractuelles avec les ayants droit du contenu ou les fournisseurs de sous-titres.
  • mpv a toujours bien fonctionné, et a avalé sans difficulté presque tout ce qu’on lui lançait.
    Les choses ont peut-être changé aujourd’hui, mais quand je l’ai découvert il y a quelques années, ce qui distinguait ce projet des autres lecteurs était l’impression qu’il accordait beaucoup d’importance à l’exactitude et à une lecture fidèle. Par exemple, il m’est arrivé que des fichiers présentant dans VLC des problèmes bizarres, comme une reproduction des couleurs légèrement étrange, soient lus parfaitement dans mpv.

    • Le fait que VLC ait des problèmes atypiques alors que mpv lit parfaitement les fichiers existe depuis longtemps. C’était déjà le cas à l’époque de MPlayer, au début des années 2000.
      Je ne sais toutefois pas vraiment pourquoi, car je pensais que les deux s’appuyaient globalement sur les mêmes bibliothèques pour beaucoup de codecs.
    • Étant donné que VLC est pratiquement blindé et lit à peu près n’importe quel fichier, c’est une bonne nouvelle que mpv soit parvenu à ce niveau.
    • J’ai eu d’assez gros problèmes de rendu des couleurs lors de la lecture de médias « HDR » dans mpv.
  • mpv est excellent. Dans le désordre, voici quelques recommandations : le mpv.conf de base de Seeds of Might/JySzE, uosc, une UI riche en fonctionnalités tout en restant minimale, thumbfast, un générateur rapide de vignettes à utiliser avec uosc ou d’autres UI personnalisées, et SmartSkip d’Eisa01, qui permet de sauter les openings et autres passages sur la base de l’audio.
    [1] Windows : https://gist.github.com/JySzE/db4149cad726b3b6955dca8d47a197..., macOS : https://gist.github.com/JySzE/34ee131da3974811a9469e1e3b7d4d...
    [2] https://github.com/tomasklaen/uosc
    [3] https://github.com/po5/thumbfast
    [4] https://github.com/Eisa01/mpv-scripts#smartskip

    • Sans vouloir déprécier le travail fait sur ce plugin, c’est une implémentation « basique » du saut d’opening.
      Pour repérer de manière fiable un opening ou un générique de fin, il faut une analyse non locale. En gros, il faut trouver les segments audio communs entre les épisodes d’une saison, ou d’une œuvre complète.
      J’ai créé un outil CLI capable de faire ça, mais il n’est pas vraiment « terminé » et ne le sera sans doute jamais. Mon objectif initial était de développer un plugin Jellyfin, puis j’ai découvert plus tard qu’il en existait déjà un.
      https://github.com/aksiksi/needle
  • C’est le meilleur lecteur multimédia qui existe. J’aime son excellente UI minimaliste, son utilisation de l’accélération matérielle, et le fait qu’il se contente de lire les vidéos.
    Le fait qu’il reste aussi bon est probablement l’une des raisons pour lesquelles je continuerai à pirater toute ma vie. Les services de streaming dépensent des millions de dollars dans leurs lecteurs sans arriver à s’approcher de ce niveau.

    • YouTube semble dégrader volontairement son lecteur web pour pousser au téléchargement de l’application et à la mise à niveau vers Premium
  • MPV dispose de scripts très polyvalents. Par exemple, on peut découper ou recadrer la vidéo que l’on regarde[1]
    On peut aussi associer à des raccourcis clavier des fonctions que je n’ai jamais vues dans d’autres lecteurs. Il m’arrive d’ajouter n vf toggle normalize=smoothing=100 dans input.conf pour normaliser la luminosité et les couleurs de la scène en cours, mais cela peut ne pas fonctionner avec le décodage matériel
    La rotation de la vidéo se configure par exemple ainsi : Ctrl+r no-osd cycle-values video-rotate "90" "180" "270" "0"
    [1] <https://github.com/occivink/mpv-scripts>

    • Personnellement, j’utilise surtout MPV pour lire ma bibliothèque musicale, principalement composée de fichiers FLAC, et j’ai créé un plugin[1] en JS pour envoyer l’historique de lecture à listenbrainz.org. C’est très simple, mais cela fonctionne bien depuis ces derniers mois
      [1]: https://gist.github.com/madeindjs/f33225cf4d8fdc9f61e0fe3ebe...
    • mpv possède aussi une solide interface de scripting Lua. J’ai créé un outil en Golang et Lua pour que mpv traite les fichiers torrent et les liens magnet comme des liens HTTP, ce qui permet de streamer directement des torrents
      Un point peu connu : mpv peut non seulement streamer des vidéos YouTube, mais aussi effectuer des recherches YouTube depuis le CLI avec mpv ytdl://ytsearch:query
      Il peut également lire des vidéos directement dans le terminal en utilisant les protocoles d’image ASCII, sixel et kitty ; parmi eux, le protocole d’image kitty offre une qualité nettement supérieure
  • Jusqu’ici, ma fonctionnalité préférée de mpv est la possibilité d’appliquer en temps réel des shaders CRT au contenu. Cette méthode commence par downscaler correctement une vidéo HD vers un véritable buffer 240p, puis le shader se charge aussi de l’upscaling à la résolution de l’écran
    https://i.imgur.com/akmgzxX.png
    https://github.com/hhirtz/mpv-retro-shaders