Jump to content

MPV: Difference between revisions

1,487 bytes removed ,  24 June
m
Removed numbering
(let's not promote nix-env anymore in 2024)
m (Removed numbering)
 
(4 intermediate revisions by 3 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.  
[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.  


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


== Installation ==
== Installation ==


=== Using <code>nix-shell</code> ===
==== Using 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 ===
==== System-Wide Installation on 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">
</syntaxhighlight>After modifying your configuration, apply the changes by running:<syntaxhighlight lang="bash">
sudo nixos-rebuild switch
sudo nixos-rebuild switch
</syntaxhighlight>
</syntaxhighlight>


=== User-Specific Installation with Home Manager ===
==== User-Specific Installation with Home Manager ====
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">
<syntaxhighlight lang="text">
home.packages = [  
home.packages = [  
   pkgs.mpv  
   pkgs.mpv  
];
];
</syntaxhighlight>After updating your configuration, apply the changes by running:<syntaxhighlight lang="nix">
</syntaxhighlight>After updating your configuration, apply the changes by running:<syntaxhighlight lang="bash">
home-manager switch
home-manager switch
</syntaxhighlight>
</syntaxhighlight>


== Configuration ==
== Configuration ==
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">
 
==== Basic ====
<syntaxhighlight lang="nix">
programs.mpv = {
programs.mpv = {
     enable = true;
     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 90: Line 63:
</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 115: Line 92:
   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>
48

edits