MPV: Difference between revisions

Layer-09 (talk | contribs)
m Removed numbering
Erethon (talk | contribs)
m Update broken nixpkgs links to point to the newer by-name package
 
(12 intermediate revisions by 8 users not shown)
Line 1: Line 1:
[https://mpv.io/ MPV] is an open-source command line media player known for its high performance, versatility, and minimalist design.While it has a basic GUI, MPV can be paired with a GUI front-end like [[SMPlayer]] (package: smplayer) to offer a user-friendly interface similar to other desktop media players.  
{{DISPLAYTITLE:mpv}}
{{Infobox application
| name = mpv
| type = CLI
| image = Unofficial_Mpv_logo_(with_gradients).svg
| website = [https://mpv.io/ mpv.io]
| documentation = [https://mpv.io/manual/ mpv Manual]
| bugTracker = [https://github.com/mpv-player/mpv/issues GitHub Issues]
| github = mpv-player/mpv
| latestRelease = 0.40.0; 11 June 2025
| os = Linux, macOS, Windows
| programmingLanguage = C
| initialRelease = 7 August 2023
}}


MPV supports a wide range of video and audio formats, ensuring extensive compatibility. It features advanced video rendering capabilities, including high-quality scaling algorithms, color management, and HDR support, which contribute to superior video playback quality. MPV leverages hardware-accelerated video decoding through APIs such as VA-API, VDPAU, and DXVA2, improving performance and reducing CPU usage. The player’s minimalist design emphasizes efficiency, offering a streamlined user experience with extensive configurability through command-line options and scripting interfaces.
'''mpv''' is an open-source command line media player.  


== Installation ==
== Installation ==


==== Using nix-shell ====
==== With nix-shell ====
<syntaxhighlight lang="bash" start="3">
<syntaxhighlight lang="bash" start="3">
nix-shell -p mpv
nix-shell -p mpv
</syntaxhighlight>
</syntaxhighlight>


==== System-Wide Installation on NixOS ====
==== With NixOS ====
<syntaxhighlight lang="text">
<syntaxhighlight lang="text">
environment.systemPackages = [
environment.systemPackages = [
  pkgs.mpv
  pkgs.mpv
];
];
</syntaxhighlight>After modifying your configuration, apply the changes by running:<syntaxhighlight lang="bash">
sudo nixos-rebuild switch
</syntaxhighlight>
</syntaxhighlight>
 
==== With Home Manager ====
==== User-Specific Installation with Home Manager ====
<syntaxhighlight lang="text">home.packages = [  
<syntaxhighlight lang="text">
home.packages = [  
   pkgs.mpv  
   pkgs.mpv  
];
];</syntaxhighlight>'''With mpvScripts'''<syntaxhighlight lang="nix">{ pkgs, ... }:
</syntaxhighlight>After updating your configuration, apply the changes by running:<syntaxhighlight lang="bash">
{
home-manager switch
  environment.systemPackages = with pkgs; [
</syntaxhighlight>
    ( mpv.override { scripts = [
      mpvScripts.uosc
      mpvScripts.sponsorblock
    ]; } )
  ];
}</syntaxhighlight>


== Configuration ==
== Configuration ==
=== With Home Manager ===


==== Basic ====
==== Basic ====
<syntaxhighlight lang="nix">
<syntaxhighlight lang="nix">
programs.mpv = {
programs.mpv.enable = true;
    enable = true;
};
</syntaxhighlight>
</syntaxhighlight>


Line 68: Line 82:
To find more scripts run this in a terminal: <syntaxhighlight lang="bash">
To find more scripts run this in a terminal: <syntaxhighlight lang="bash">
nix search nixpkgs mpvScripts
nix search nixpkgs mpvScripts
</syntaxhighlight>The scripts are also defined in the following [https://github.com/NixOS/nixpkgs/tree/master/pkgs/applications/video/mpv/scripts Nixpkgs directory].
</syntaxhighlight>The scripts are also defined in the following [https://github.com/NixOS/nixpkgs/tree/master/pkgs/by-name/mp/mpv/scripts Nixpkgs directory].
 
==== Enabling additional features: where to find override options and using umpv ====
The package override options are defined in the following [https://github.com/NixOS/nixpkgs/blob/master/pkgs/by-name/mp/mpv/package.nix Nixpkgs directory]. This includes a commonly used first party script called [https://github.com/mpv-player/mpv/blob/master/TOOLS/umpv umpv] which allows additional files to be appended to the playlist of an open instance. In the nix derivation of mpv, the umpv script is bundled into the program and can be ran from the command line with `umpv foo.ogg`. Note that umpv can only be ran with the name of the file being opened and cannot be ran with additional arguments or flags.


==== Where to find override options ====
For example, here is an overlay showing how to enable JACK audio support:
The package override options are defined in the following [https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/video/mpv/default.nix Nixpkgs directory].
 
<syntaxhighlight>
nixpkgs.overlays = [
  (final: prev: {
    mpv = prev.mpv.override {
      mpv = prev.mpv-unwrapped.override {
        jackaudioSupport = true;
      };
    };
  })
];
</syntaxhighlight>
 
or alternatively, you can define the package inline:
 
<syntaxhighlight>
(pkgs.mpv.override { mpv = pkgs.mpv-unwrapped.override { jackaudioSupport = true; }; })
</syntaxhighlight>
 
Also note that commands cannot be passed to mpv using socat when mpv is ran using the umpv python wrapper. For example, if you try to pause umpv with <code>echo '{"command": ["cycle", "pause"]}' | socat - /tmp/mpvsocket</code>, it will result in an error similar to the following:
<code>2025/05/07 22:49:15 socat[115919] E GOPEN: /tmp/mpvsocket: Connection refused</code>


== Troubleshooting ==
== Troubleshooting ==
Line 88: Line 125:
To address this problem, you can use the following package configuration for ffmpeg.
To address this problem, you can use the following package configuration for ffmpeg.


<syntaxhighlight lang="nix">
<syntaxhighlight lang="nix">programs.mpv = {
programs.mpv = {
   enable = true;
   enable = true;


Line 95: Line 131:
     pkgs.mpv-unwrapped.wrapper {
     pkgs.mpv-unwrapped.wrapper {
       mpv = pkgs.mpv-unwrapped.override {
       mpv = pkgs.mpv-unwrapped.override {
        ffmpeg = pkgs.ffmpeg-full;
      };
    }
  );
};</syntaxhighlight>On <code>nixos-unstable</code>, the <code>wrapper</code> attribute has been removed and instead a regular <code>override</code> can be used to adjust <code>mpv-unwrapped</code>:<syntaxhighlight lang="nix">
programs.mpv = {
  enable = true;
  package = (
    pkgs.mpv.override {
      mpv-unwrapped = pkgs.mpv-unwrapped.override {
         ffmpeg = pkgs.ffmpeg-full;
         ffmpeg = pkgs.ffmpeg-full;
       };
       };
Line 100: Line 147:
   );
   );
};
};
</syntaxhighlight>
</syntaxhighlight>


Line 106: Line 154:
# https://github.com/mpv-player/mpv/wiki
# https://github.com/mpv-player/mpv/wiki
# https://en.wikipedia.org/wiki/Mpv_(media_player)
# https://en.wikipedia.org/wiki/Mpv_(media_player)
# https://mynixos.com/search?q=mpv
# https://search.nixos.org/packages?query=mpv
# https://home-manager-options.extranix.com/?query=mpv


[[Category:Applications]]
[[Category:Applications]]
[[Category:CLI Applications]]
[[Category:Media Player]]
[[Category:Media Player]]