MPV: Difference between revisions

From NixOS Wiki
Layer-09 (talk | contribs)
Reviewed and included several improvements to the MPV page.
Dander (talk | contribs)
m remove unnecessary description (see MoS), clean up headings (TODO: scripts, NixOS configuration)
 
(8 intermediate revisions by 3 users not shown)
Line 1: Line 1:
== Description ==
[https://mpv.io/ MPV] is an open-source command line media player.  
MPV is an open-source media player known for its high performance, versatility, and minimalist design. It supports a wide range of video and audio formats, ensuring extensive compatibility. MPV features advanced video rendering capabilities, including high-quality scaling algorithms, color management, and HDR support, which contribute to superior video playback quality. It 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.  


== Installation ==
== Installation ==


=== Using <code>nix-env</code> ===
==== With nix-shell ====
To install mpv using <code>nix-env</code>, execute the following command:<syntaxhighlight lang="nix">
<syntaxhighlight lang="bash" start="3">
nix-env -iA nixos.mpv
</syntaxhighlight>
 
=== Using <code>nix-shell</code> ===
To use MPV in a temporary environment with <code>nix-shell</code>, run:<syntaxhighlight lang="nix">
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 ====
=== User-Specific Installation with Home Manager ===
<syntaxhighlight lang="text">
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 = [  
home.packages = [  
   pkgs.mpv  
   pkgs.mpv  
];
];
</syntaxhighlight>After updating your configuration, apply the changes by running:<syntaxhighlight lang="nix">
home-manager switch
</syntaxhighlight>
</syntaxhighlight>
== Configuration ==


== Configuration ==
=== With Home Manager ===
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">
 
programs.mpv = {
==== Basic ====
    enable = true;
<syntaxhighlight lang="nix">
};
programs.mpv.enable = true;
</syntaxhighlight>A more comprehensive configuration of MPV would look like this.<syntaxhighlight lang="nix">
</syntaxhighlight>
 
==== Advanced ====
<syntaxhighlight lang="nix">
programs.mpv = {
programs.mpv = {
   enable = true;
   enable = true;


  # Custom package configuration for MPV
   package = (
   package =
     pkgs.mpv-unwrapped.wrapper {
     (pkgs.mpv-unwrapped.wrapper {
      mpv = pkgs.mpv-unwrapped.override {
        waylandSupport = true;
        x11Support = false;
        cddaSupport = false;
        vulkanSupport = false;
        drmSupport = false;
        archiveSupport = false;
        bluraySupport = true;
        bs2bSupport = false;
        cacaSupport = false;
        cmsSupport = false;
        dvdnavSupport = false;
        dvbinSupport = false;
        jackaudioSupport = false;
        javascriptSupport = false;
        libpngSupport = false;
        openalSupport = false;
        pulseSupport = false;
        pipewireSupport = true;
        rubberbandSupport = false;
        screenSaverSupport = false;
        sdl2Support = true;
        sixelSupport = false;
        speexSupport = false;
        swiftSupport = false;
        theoraSupport = false;
        vaapiSupport = true;
        vapoursynthSupport = false;
        vdpauSupport = true;
        xineramaSupport = false;
        xvSupport = false;
        zimgSupport = false;
      };
    })
    .override {
       scripts = with pkgs.mpvScripts; [
       scripts = with pkgs.mpvScripts; [
         uosc
         uosc
         sponsorblock
         sponsorblock
       ];
       ];
    };


   # MPV configuration options
      mpv = pkgs.mpv-unwrapped.override {
        waylandSupport = true;
      };
    }
   );
 
   config = {
   config = {
     profile = "high-quality";
     profile = "high-quality";
Line 94: Line 55:
</syntaxhighlight>
</syntaxhighlight>


=== Finding MPV Scripts ===
== Tips and Tricks ==
You can find additional scripts for MPV under the <code>mpvScripts</code> attribute. To search for available scripts, use the following command:<syntaxhighlight lang="nix">
 
==== Where to get scripts ====
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 defined in the following Nixpkgs directory:<syntaxhighlight lang="nix">
==== Where to find override options ====
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].


</syntaxhighlight><h2>Error, unknown format</h2>
== 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 119: Line 84:
   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 135: Line 101:


[[Category:Applications]]
[[Category:Applications]]
[[Category:Video]]
[[Category:Media Player]]
[[Category:Audio]]

Latest revision as of 19:50, 3 November 2024

MPV is an open-source command line media player.

Installation

With nix-shell

nix-shell -p mpv

With NixOS

environment.systemPackages = [
  pkgs.mpv
];

With Home Manager

home.packages = [ 
  pkgs.mpv 
];

Configuration

With Home Manager

Basic

programs.mpv.enable = true;

Advanced

programs.mpv = {
  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;
  };
};

Tips and Tricks

Where to get scripts

To find more scripts run this in a terminal:

nix search nixpkgs mpvScripts

The scripts are also defined in the following Nixpkgs directory.

Where to find override options

The package override options are defined in the following Nixpkgs directory.

Troubleshooting

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).

$ mpv --log-file=foo.log av://v4l2:/dev/video5
[lavf] Unknown lavf format v4l2
Failed to recognize file format.

Exiting... (Errors when loading file)

To address this problem, you can use the following package configuration for ffmpeg.

programs.mpv = {
  enable = true;

  package = (
    pkgs.mpv-unwrapped.wrapper {
      mpv = pkgs.mpv-unwrapped.override {
        ffmpeg = pkgs.ffmpeg-full;
      };
    }
  );
};

References

  1. https://github.com/mpv-player/mpv/wiki
  2. https://en.wikipedia.org/wiki/Mpv_(media_player)
  3. https://mynixos.com/search?q=mpv