MPV: Difference between revisions
m Update broken nixpkgs links to point to the newer by-name package |
m style fixes |
||
| Line 19: | Line 19: | ||
==== With nix-shell ==== | ==== With nix-shell ==== | ||
<syntaxhighlight lang= | <syntaxhighlight lang=console> | ||
nix-shell -p mpv | $ nix-shell -p mpv | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==== With NixOS ==== | ==== With NixOS ==== | ||
<syntaxhighlight lang= | |||
<syntaxhighlight lang=nix> | |||
environment.systemPackages = [ | environment.systemPackages = [ | ||
pkgs.mpv | pkgs.mpv | ||
| Line 30: | Line 31: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==== With Home Manager ==== | ==== With Home Manager ==== | ||
<syntaxhighlight lang= | <syntaxhighlight lang=nix> | ||
home.packages = [ | |||
pkgs.mpv | pkgs.mpv | ||
];</syntaxhighlight>'''With mpvScripts'''<syntaxhighlight lang="nix">{ pkgs, ... }: | ]; | ||
</syntaxhighlight>'''With mpvScripts'''<syntaxhighlight lang="nix"> | |||
{ pkgs, ... }: | |||
{ | { | ||
environment.systemPackages = with pkgs; [ | environment.systemPackages = with pkgs; [ | ||
| Line 47: | Line 51: | ||
==== Basic ==== | ==== Basic ==== | ||
<syntaxhighlight lang="nix"> | <syntaxhighlight lang="nix"> | ||
programs.mpv.enable = true; | programs.mpv.enable = true; | ||
| Line 52: | Line 57: | ||
==== Advanced ==== | ==== Advanced ==== | ||
<syntaxhighlight lang="nix"> | <syntaxhighlight lang="nix"> | ||
programs.mpv = { | programs.mpv = { | ||
| Line 80: | Line 86: | ||
==== Where to get scripts ==== | ==== Where to get scripts ==== | ||
To find more scripts run this in a terminal: <syntaxhighlight lang=" | |||
nix search nixpkgs mpvScripts | To find more scripts run this in a terminal: <syntaxhighlight lang="console"> | ||
$ nix search nixpkgs mpvScripts | |||
</syntaxhighlight>The scripts are also defined in the following [https://github.com/NixOS/nixpkgs/tree/master/pkgs/by-name/mp/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 ==== | ==== 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. | 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. | ||
For example, here is an overlay showing how to enable JACK audio support: | For example, here is an overlay showing how to enable JACK audio support: | ||
<syntaxhighlight> | <syntaxhighlight lang=nix> | ||
nixpkgs.overlays = [ | nixpkgs.overlays = [ | ||
(final: prev: { | (final: prev: { | ||
| Line 103: | Line 111: | ||
or alternatively, you can define the package inline: | or alternatively, you can define the package inline: | ||
<syntaxhighlight> | <syntaxhighlight lang=nix> | ||
(pkgs.mpv.override { mpv = pkgs.mpv-unwrapped.override { jackaudioSupport = true; }; }) | (pkgs.mpv.override { mpv = pkgs.mpv-unwrapped.override { jackaudioSupport = true; }; }) | ||
</syntaxhighlight> | </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: | 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: | ||
<pre>2025/05/07 22:49:15 socat[115919] E GOPEN: /tmp/mpvsocket: Connection refused</pre> | |||
== Troubleshooting == | == Troubleshooting == | ||
==== Error, unknown format ==== | ==== 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). | 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= | <syntaxhighlight lang=console> | ||
$ mpv --log-file=foo.log av://v4l2:/dev/video5 | $ mpv --log-file=foo.log av://v4l2:/dev/video5 | ||
[lavf] Unknown lavf format v4l2 | [lavf] Unknown lavf format v4l2 | ||
| Line 125: | Line 134: | ||
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">programs.mpv = { | <syntaxhighlight lang="nix"> | ||
programs.mpv = { | |||
enable = true; | enable = true; | ||
Latest revision as of 18:00, 19 July 2026
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
];
With mpvScripts
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
( mpv.override { scripts = [
mpvScripts.uosc
mpvScripts.sponsorblock
]; } )
];
}
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.
Enabling additional features: where to find override options and using umpv
The package override options are defined in the following Nixpkgs directory. This includes a commonly used first party script called 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.
For example, here is an overlay showing how to enable JACK audio support:
nixpkgs.overlays = [
(final: prev: {
mpv = prev.mpv.override {
mpv = prev.mpv-unwrapped.override {
jackaudioSupport = true;
};
};
})
];
or alternatively, you can define the package inline:
(pkgs.mpv.override { mpv = pkgs.mpv-unwrapped.override { jackaudioSupport = true; }; })
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 echo '{"command": ["cycle", "pause"]}' | socat - /tmp/mpvsocket, it will result in an error similar to the following:
2025/05/07 22:49:15 socat[115919] E GOPEN: /tmp/mpvsocket: Connection refused
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;
};
}
);
};
On nixos-unstable, the wrapper attribute has been removed and instead a regular override can be used to adjust mpv-unwrapped:
programs.mpv = {
enable = true;
package = (
pkgs.mpv.override {
mpv-unwrapped = pkgs.mpv-unwrapped.override {
ffmpeg = pkgs.ffmpeg-full;
};
}
);
};