MPV: Difference between revisions

fix configuration example
Zeal (talk | contribs)
Wanted to show how you'd use mpvScripts without using Home Manager.
 
(13 intermediate revisions by 7 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. It has only a very basic GUI. MPV can be used with a GUI front-end like [[SMPlayer]] (package: smplayer), to have a comparable user interface like other media players for the desktop environment.
{{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 utilizes hardware-accelerated video decoding through APIs such as VA-API, VDPAU, and DXVA2, enhancing performance and reducing CPU usage. The player’s design emphasizes minimalism and efficiency, offering a streamlined user interface with extensive configurability via command-line options and scripting interfaces.
'''mpv''' is an open-source command line media player.  


== Installation ==
== Installation ==


=== Using <code>nix-shell</code> ===
==== With nix-shell ====
To use MPV in a temporary environment with <code>nix-shell</code>, run:<syntaxhighlight lang="nix">
<syntaxhighlight lang="bash" start="3">
nix-shell -p mpv
nix-shell -p mpv
</syntaxhighlight>
</syntaxhighlight>


=== System-Wide Installation on NixOS ===
==== With NixOS ====
To install MPV system-wide, add it to your system configuration. Edit your <code>/etc/nixos/configuration.nix</code> and include MPV in the <code>environment.systemPackages</code> list:<syntaxhighlight lang="nix">
<syntaxhighlight lang="text">
environment.systemPackages = [  
environment.systemPackages = [
  pkgs.mpv  
  pkgs.mpv
];
];
</syntaxhighlight>After modifying your configuration, apply the changes by running:<syntaxhighlight lang="nix">
sudo nixos-rebuild switch
</syntaxhighlight>
</syntaxhighlight>
==== With Home Manager ====
<syntaxhighlight lang="text">home.packages = [
  pkgs.mpv
];</syntaxhighlight>'''With mpvScripts'''<syntaxhighlight lang="nix">{ pkgs, ... }:
{
  environment.systemPackages = with pkgs; [
    ( mpv.override { scripts = [
      mpvScripts.uosc
      mpvScripts.sponsorblock
    ]; } )
  ];
}</syntaxhighlight>


=== User-Specific Installation with Home Manager ===
== Configuration ==
If you use Home Manager, you can add MPV to your home configuration. Edit your Home Manager configuration file (usually <code>~/.config/nixpkgs/home.nix</code>) and include MPV in the <code>home.packages</code> list:<syntaxhighlight lang="nix">
 
home.packages = [
=== With Home Manager ===
  pkgs.mpv
 
];
==== Basic ====
</syntaxhighlight>After updating your configuration, apply the changes by running:<syntaxhighlight lang="nix">
<syntaxhighlight lang="nix">
home-manager switch
programs.mpv.enable = true;
</syntaxhighlight>
</syntaxhighlight>


== Configuration ==
==== Advanced ====
The recommended way to enable and configure MPV on NixOS is through the <code>programs</code> attribute in your NixOS home configuration.<syntaxhighlight lang="nix">
<syntaxhighlight lang="nix">
programs.mpv = {
programs.mpv = {
     enable = true;
  enable = true;
 
  package = (
     pkgs.mpv-unwrapped.wrapper {
      scripts = with pkgs.mpvScripts; [
        uosc
        sponsorblock
      ];
 
      mpv = pkgs.mpv-unwrapped.override {
        waylandSupport = true;
      };
    }
  );
 
  config = {
    profile = "high-quality";
    ytdl-format = "bestvideo+bestaudio";
    cache-default = 4000000;
  };
};
};
</syntaxhighlight>A more comprehensive configuration of MPV would look like this.<syntaxhighlight lang="nix">
</syntaxhighlight>
{ pkgs, ... }:
 
{
== Tips and Tricks ==
  programs.mpv = {
    enable = true;


    # Custom package configuration for MPV
==== Where to get scripts ====
    package = (
To find more scripts run this in a terminal: <syntaxhighlight lang="bash">
      pkgs.mpv-unwrapped.wrapper {
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].


        # To find more scripts run this in a terminal: nix search nixpkgs mpvScripts
==== Enabling additional features: where to find override options and using umpv ====
        # The scripts are defined in the following Nixpkgs directory: https://github.com/NixOS/nixpkgs/tree/master/pkgs/applications/video/mpv/scripts
The package override options are defined in the following [https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/video/mpv/default.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.
        scripts = with pkgs.mpvScripts; [
          uosc
          sponsorblock
        ];


        mpv = pkgs.mpv-unwrapped.override {
For example, here is an overlay showing how to enable JACK audio support:
          # Find more override options in the expression:
          # https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/video/mpv/default.nix
          waylandSupport = true;
        };
      }
    );


    # MPV configuration options
<syntaxhighlight>
     config = {
nixpkgs.overlays = [
       profile = "high-quality";
  (final: prev: {
      ytdl-format = "bestvideo+bestaudio";
     mpv = prev.mpv.override {
       cache-default = 4000000;
       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>
</syntaxhighlight>


== Error, unknown format ==
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 ==


If you get the following sort of error, note that mpv currently uses the small ffmpeg version (ffmpeg_5) instead of the full version (ffmpeg_5-full).  
==== Error, unknown format ====
If you get the following sort of error, note that MPV currently uses the small ffmpeg version (ffmpeg_5) instead of the full version (ffmpeg_5-full).  


<syntaxhighlight lang="shell">
<syntaxhighlight lang="shell">
Line 86: Line 129:
   enable = true;
   enable = true;


   package =
   package = (
     (pkgs.mpv-unwrapped.wrapper {
     pkgs.mpv-unwrapped.wrapper {
       mpv = pkgs.mpv-unwrapped.override {
       mpv = pkgs.mpv-unwrapped.override {
         ffmpeg = pkgs.ffmpeg-full;
         ffmpeg = pkgs.ffmpeg-full;
       };
       };
     });
     }
  );
};
};
</syntaxhighlight>
</syntaxhighlight>
Line 99: Line 143:
# 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]]