3 Punkte von GN⁺ 2024-08-18 | 1 Kommentare | Auf WhatsApp teilen
  • mpv ist ein freier Open-Source-Mediaplayer mit Schwerpunkt auf der Kommandozeile, der zahlreiche Mediendateiformate, Audio- und Video-Codecs sowie Untertitelformate unterstützt
  • Dank leistungsfähiger Scripting-Funktionen und einer Sammlung von Nutzerskripten lässt sich der Standardplayer leicht nach eigenen Vorstellungen erweitern
  • Trotz seines minimalistischen Designs gibt es keine separate GUI, aber einen kleinen On-Screen-Controller für grundlegende Bedienung direkt über dem Video
  • Mit hochwertiger Videoausgabe auf Basis von OpenGL, Vulkan und D3D11 sowie Unterstützung für Hardware-Decoding-APIs lässt sich die Wiedergabequalität in unterschiedlichen Umgebungen anpassen
  • Eine von Anfang an für die Library-Integration ausgelegte C API ermöglicht es, mpv in andere Anwendungen einzubetten

Kommandozeilenorientierter Mediaplayer

  • mpv ist ein freier Mediaplayer für die Nutzung über die Kommandozeile
  • Unterstützt verschiedene Mediendateiformate, Audio- und Video-Codecs sowie Untertitelformate

Scripting und Bedienung

  • Mit Scripting lässt sich das Verhalten des Players umfassend erweitern
  • mpv verfolgt einen minimalistischen Ansatz und bietet keine separate GUI
  • Für grundlegende Bedienung kann ein kleiner On-Screen-Controller genutzt werden, der über dem Video angezeigt wird

Videoausgabe und Decoding

  • Bietet Videoausgabe auf Basis von OpenGL, Vulkan und D3D11
  • Enthält auch Wiedergabefunktionen für Video-Enthusiasten
    • Video-Scaling auf Basis hochwertiger Algorithmen
    • Farbmanagement
    • Frame-Timing
    • Interpolation
    • HDR
  • Auf den meisten Plattformen können mehrere Hardware-Decoding-APIs genutzt werden
  • Hardware-Decoding kann bei Bedarf während der Ausführung aktiviert werden

Anwendungsintegration und Entwicklungsstand

  • mpv wurde von Anfang an mit einer C API entwickelt, damit es sich leicht in andere Anwendungen integrieren lässt
  • Das Projekt wird aktiv weiterentwickelt, mit Fokus auf Code-Refactoring und Aufräumen sowie neue Funktionen
  • Feature Requests oder Patches können über die mpv GitHub issues eingereicht werden

Verwandte Ressourcen

1 Kommentare

 
GN⁺ 2024-08-18
Hacker-News-Kommentare
  • mpv ist ein großartiger Media-Player. Ziemlich minimalistisch, mit guter Performance, und er erledigt genau das, was er soll.
    Es gibt auch einen großartigen Commit, in dem der Autor seine Wut über Locales auslässt: https://github.com/mpv-player/mpv/commit/1e70e82baa9193f6f02... – lesenswert und ziemlich lustig.

    • Das mag seltsam klingen, aber die Möglichkeit, solche Probleme zu vermeiden, ist vielleicht einer der größten Produktivitätsgewinne neuer Sprachen wie Go, Rust, Swift. Neue Ökosysteme bekommen die Chance, die Standardbibliothek neu aufzubauen und schreckliche Altlasten wie Locale oder UTF-16 loszuwerden, die aus einer Zeit stammen, bevor man es besser wusste.
      Die Standardbibliotheken vieler Sprachen wie Zig, Go und Rust sind der C-Standardbibliothek oder der POSIX-API weit voraus. Allein das ist schon Grund genug, sie zu verwenden.
    • Ein langer und informativer Text, mit etwas Gefluche. Klare Empfehlung.
      Vor 25 Jahren schrieb Spolsky „everything you wanted to know about Unicode and character sets“ – das kann selbst für Leute nützlich sein, die nur in einer Welt nach Unicode/UTF gelebt haben.
    • Auf den Kommentar, man solle sich vorstellen, errno wäre genauso kaputt wie die C-Locale-API, kam der Hinweis, dass es dafür tatsächlich Beispiele gibt: Zeitfunktionen wie localtime, localtime_r, tzset.
      Das liegt zwar thematisch nahe an Locales, aber Zeitzonen sind ebenfalls globaler Zustand, sodass es in portablem, multithreaded POSIX-C mit nur den Standard-APIs unmöglich ist, die Zeit einer anderen Zeitzone zu bekommen.
    • „C-Locale und wchar_t sind beide kaputte Legacy-Zombies im Hirntod. Wenn im C/POSIX-Standardkomitee kompetente Leute gesessen hätten, wären sie längst deprecated oder entfernt worden. gets() haben sie ja auch entfernt. Ich werde einen langen Text schreiben, um diesen emotionalen Ausbruch zu rechtfertigen, der für Unwissende beleidigend wirken könnte. Wer mit scharfer Sprache ein Problem hat, soll das hier als religiösen Text betrachten.“
      Wirklich legendär.
    • Man sollte wissen, dass der Autor dieses Commits seit einigen Jahren nichts mehr mit der mpv-Entwicklung zu tun hat.
  • Ich habe vor ein paar Jahren angefangen, es unter Linux zu nutzen, und inzwischen ist es auf all meinen Geräten installiert, sogar auf meinem Android-Tablet. Perfekt. Minimale Standardwerte, sinnvolle Einstellungen, schnell, und es funktioniert einfach.
    Sogar native Wiedergabe über SSH ist möglich, was großartig ist: mpv sftp://mit@nyx/home/mit/Work/merged.mp4
    Kürzlich brauchte ich einen Shortcut zum Drehen eines Videos; bei anderen Playern schien das nicht leicht möglich zu sein, bei mpv musste ich nur r cycle_values video-rotate "90" "180" "270" "0" in input.conf eintragen.

    • Es kann auch Videos über HTTP abspielen und unterstützt viele Websites, einschließlich YouTube: mpv
  • Unter Linux sollte man nicht vergessen, Hardwarebeschleunigung zu aktivieren, indem man hwdec=auto zu mpv.conf hinzufügt. Funktioniert mit AMD/Intel/NVIDIA.
    https://interfacinglinux.com/2024/01/10/hardware-acceleratio...

    • Wie sich herausstellt, habe ich jahrelang Videos mit mpv geschaut, ohne Hardwarebeschleunigung zu verwenden. Gut, dass ich das hier gelesen habe.
    • Ich nutze es mit diesen Einstellungen: vo=gpu-next, gpu-api=vulkan, hwdec=vulkan, gpu-context=waylandvk
      Wenn Vulkan-Video nicht funktioniert, kann man hwdec=vulkan auf hwdec=vaapi ändern.
    • Ich frage mich, warum das nicht standardmäßig aktiviert ist.
    • Ich weiß nicht genau warum, aber unter Fedora – vermutlich mit der Kombination aus Kernel 6.10 und Vega 64 – war die Performance schlechter, mit viel Lag und Stottern. Ich probiere es etwa einmal im Jahr wieder aus, aber es klappt nie richtig, also gebe ich wieder auf.
    • Ich habe gerade mpv per pacman installiert und ein 4K-Video gestartet; sofort sprang der CPU-Lüfter an, und in top sah ich, dass mehrere Kerne genutzt wurden. Während ich weiter durch diesen HN-Thread scrollte, erfuhr ich von hwdec=auto.
      Als jemand, der von mplayer und VLC kommt, stellt sich sofort die Frage: Welchen Trade-off nehmen die Maintainer in Kauf, wenn sie das nicht zum Standard machen?
  • Dieses Projekt hat eine sehr alte Abstammungslinie und war früher als mplayer bekannt. Es gibt 500.000 Commits, die bis ins Jahr 2001 zurückreichen – und das sogar erst ab dem Zeitpunkt, nachdem das CVS-Repository in Subversion konvertiert wurde.
    Zusammen mit streamlink und mpv auf einem lüfterlosen Minix z100 mit Ubuntu war es fast die perfekte Umgebung, um die Olympischen Spiele zu schauen.
    https://streamlink.github.io/
    https://www.minix.com.hk/products/z100-0db-fanless-n100-mini...

    • Man kann mplayer und mpv kaum als dasselbe bezeichnen. Zwar wurde mpv aus mplayer und anderen Projekten geforkt, aber mplayer ist weiterhin ein separates Projekt.
  • Das mag albern klingen, aber für mich ist die Kernfunktion, dass mehrere Untertitel gleichzeitig angezeigt werden können. Track, Offset, Position, Größe usw. lassen sich mit ein paar Shortcuts leicht einstellen.
    Kein Streaming-Dienst bietet das an und Untertitelsprachen, die aufgrund des Standorts des Nutzers als „nicht relevant“ eingestuft werden, werden aktiv versteckt. Solche Dienste sind nur schwer zu respektieren.

    • Wirklich eine großartige Funktion. Ich habe die Shortcuts noch nicht richtig auswendig gelernt und sollte das wahrscheinlich tun, aber wenn man mit --sid1= und --sid2= startet, funktioniert es schon ziemlich gut.
      Mein Partner und ich sind beide keine englischen Muttersprachler, und unsere Muttersprachen sind zudem unterschiedlich. Ich komme mit Englisch ziemlich gut zurecht, aber manche Dialekte sind schwierig, und wenn die Tonspur laut oder unklar ist, verpasse ich manchmal Wörter, daher bevorzuge ich englische Untertitel. Mein Partner bevorzugt Untertitel in seiner Muttersprache.
      Wenn mehrere Untertitel angezeigt werden können, bekommen wir beide genau das Seherlebnis, das wir wollen, und das ist den etwas größeren Platzbedarf auf dem Bildschirm absolut wert.
    • mpv ist stark bei der Untertitelverarbeitung. Man kann nicht nur Untertitelspuren wechseln und ihre Position festlegen, sondern beim Abspielen eines Videos auch externe Untertiteldateien automatisch finden und laden.
      Ich habe dazu etwas geschrieben: https://www.baeldung.com/linux/mpv-subtitles-automatic. Etwas schade fand ich allerdings, dass die Dokumentation zu den unterstützten Untertitelformaten dürftig war und ich in den ffmpeg-Code schauen musste, um die tatsächlich unterstützten Formate zu prüfen.
      Zusätzlich sind https://subdl.com/ und https://github.com/alexanderwink/subdl gute Ressourcen, um Untertitel über die Kommandozeile zu finden und herunterzuladen.
    • Gerade fürs Sprachenlernen ist so eine Funktion sehr gut. Aber Dienste wie Amazon zeigen von den tatsächlich etwa 30 vorhandenen Untertiteln nur ungefähr zwei an, etwa Englisch und die lokale Sprache. Von den Unterschieden zwischen Untertiteln und Synchronfassungen will ich gar nicht erst anfangen.
    • Das Verstecken von ortsabhängig „nicht relevanten“ Untertitelsprachen könnte an rechtlichen Fragen oder vertraglichen Einschränkungen mit den Rechteinhabern des jeweiligen Inhalts oder den Untertitelanbietern liegen.
  • mpv hat bei mir immer gut funktioniert und nahezu alles problemlos abgespielt, was man ihm gegeben hat.
    Vielleicht ist das heute anders, aber als ich das Projekt vor ein paar Jahren zum ersten Mal kennengelernt habe, war das, was es von anderen Playern abhob, das Gefühl, dass Korrektheit und präzise Wiedergabe sehr ernst genommen werden. Es gab zum Beispiel Dateien, die in VLC merkwürdige Probleme wie leicht falsche Farbwiedergabe zeigten, während sie in mpv perfekt abgespielt wurden.

    • Dass VLC merkwürdige Probleme zeigt und mpv etwas perfekt abspielt, kommt schon sehr lange vor. So war es schon zu MPlayer-Zeiten in den frühen 2000ern.
      Warum das so ist, weiß ich allerdings nicht genau, denn ich glaube, beide stützen sich bei vielen Codecs im Großen und Ganzen auf dieselben Bibliotheken.
    • Wenn man bedenkt, dass VLC praktisch kugelsicher jede Datei abspielt, ist es erfreulich, dass mpv inzwischen offenbar auf diesem Niveau angekommen ist.
    • Beim Abspielen von „HDR“-Medien in mpv gab es ziemlich große Probleme bei der Farbdarstellung.
  • mpv ist großartig. Unabhängig von der Reihenfolge empfehlenswert sind: Seeds of Might/JySzEs Standard-mpv.conf, uosc als funktionsreiche und dennoch minimalistische UI, der schnelle Thumbnailer thumbfast für uosc oder andere benutzerdefinierte UIs sowie Eisa01s SmartSkip, das auf Audio basiert, um Openings usw. zu überspringen.
    [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

    • Ich will die Arbeit an diesem Plugin nicht kleinreden, aber das ist eine „grundlegende“ Implementierung zum Überspringen von Openings.
      Um Openings oder Endcredits zuverlässig zu finden, braucht man eine nichtlokale Analyse. Im Grunde muss man Audiosegmente finden, die über mehrere Episoden einer Staffel oder eines ganzen Werks hinweg gemeinsam auftreten.
      Ich habe ein CLI-Tool gebaut, das das kann, aber es ist ehrlich gesagt nicht wirklich „fertig“ und wird es vermutlich auch nie sein. Mein ursprüngliches Ziel war die Entwicklung eines Jellyfin-Plugins, aber später habe ich herausgefunden, dass es bereits ein solches Plugin gibt.
      https://github.com/aksiksi/needle
  • Der beste Media-Player überhaupt. Die minimalistische UI, die Nutzung der Hardwarebeschleunigung und die Tatsache, dass er einfach Videos abspielt, sind großartig.
    Weil er weiterhin so gut ist, ist das vermutlich einer der Gründe, warum ich wohl mein Leben lang weiter piratisieren werde. Streaming-Dienste geben Millionen für ihre Player aus und kommen trotzdem nicht einmal in die Nähe dieses Niveaus.

    • Bei YouTube wirkt es so, als würde der Web-Player absichtlich verschlechtert, um Nutzer zum Download der App und zum Upgrade auf Premium zu drängen.
  • MPV verfügt über vielseitige Skripte. Man kann zum Beispiel das gerade angesehene Video schneiden oder zuschneiden[1].
    Man kann auch Funktionen, die ich bei anderen Playern noch nie gesehen habe, auf Tastenkürzel legen. Manchmal verwende ich n vf toggle normalize=smoothing=100 in der input.conf, um Helligkeit und Farben der aktuellen Szene zu normalisieren, aber mit Hardware-Decoding funktioniert das möglicherweise nicht.
    Die Videodrehung konfiguriert man zum Beispiel mit Ctrl+r no-osd cycle-values video-rotate "90" "180" "270" "0".
    [1] <https://github.com/occivink/mpv-scripts>

    • Persönlich nutze ich MPV hauptsächlich, um meine Musikbibliothek mit FLAC-Dateien abzuspielen, und habe mit JS ein Plugin[1] gebaut, das den Wiedergabeverlauf an listenbrainz.org sendet. Es ist sehr simpel, hat aber in den letzten Monaten gut funktioniert.
      [1]: https://gist.github.com/madeindjs/f33225cf4d8fdc9f61e0fe3ebe...
    • mpv hat auch eine robuste Lua-Scripting-Schnittstelle. Ich habe mit Golang und Lua ein Tool gebaut, sodass mpv Torrent-Dateien und Magnet-Links wie HTTP-Links behandelt, wodurch sich Torrents direkt streamen lassen.
      Was viele nicht wissen: mpv kann nicht nur YouTube-Videos streamen, sondern auch auf der CLI mit mpv ytdl://ytsearch:query YouTube durchsuchen.
      Außerdem kann man mit ASCII, sixel und dem kitty image protocol Videos direkt im Terminal abspielen, wobei das kitty image protocol qualitativ mit Abstand am besten ist.
  • Meine bisherige Lieblingsfunktion in mpv ist, dass sich CRT-Shader in Echtzeit auf Inhalte anwenden lassen. Dabei wird HD-Video zunächst korrekt auf einen echten 240p-Buffer herunterskaliert, danach übernimmt der Shader auch das Hochskalieren auf die Bildschirmauflösung.
    https://i.imgur.com/akmgzxX.png
    https://github.com/hhirtz/mpv-retro-shaders