neulab/tldr huggingface dataset:
On X11, the ID is interpreted as a Window on X11. Unlike MPlayer/mplayer2, mpv always creates its own window, and sets the wid window as parent. The window will always be resized to cover the parent window fully. The value 0 is interpreted specially, and mpv will draw directly on the root window.
On win32, the ID is interpreted as HWND. Pass it as value cast to intptr_t. mpv will create its own window, and set the wid window as parent, like with X11.
On macOS/Cocoa, the ID is interpreted as NSView*. Pass it as value cast to intptr_t. mpv will create its own sub-view. Because macOS does not support window embedding of foreign processes, this works only with libmpv, and will crash when used from the command line.
On Android, the ID is interpreted as android.view.Surface. Pass it as a value cast to intptr_t. Use with --vo=mediacodec_embed and --hwdec=mediacodec for direct rendering using MediaCodec, or with --vo=gpu --gpu-context=android (with or without --hwdec=mediacodec-copy).
--no-window-dragging Don't move the window when clicking on it and moving the mouse pointer.
--x11-name Set the window class name for X11-based video output methods.
--x11-netwm=<yes|no|auto> (X11 only) Control the use of NetWM protocol features.
This may or may not help with broken window managers. This provides some functionality that was implemented by the now removed --fstype option.  Actually, it is not known to the developers to which degree this option was needed, so feedback is welcome.
Specifically, yes will force use of NetWM fullscreen support, even if not advertised by the WM. This can be useful for WMs that are broken on purpose, like XMonad. (XMonad supposedly doesn't advertise fullscreen support, because Flash uses it. Apparently, applications which want to use fullscreen anyway are supposed to either ignore the NetWM support hints, or provide a workaround. Shame on XMonad for deliberately breaking X protocols (as if X isn't bad enough already).
By default, NetWM support is autodetected (auto).
This option might be removed in the future.
--x11-bypass-compositor=<yes|no|fs-only|never> If set to yes, then ask the compositor to unredirect the mpv window (default: fs-only). This uses the _NET_WM_BYPASS_COMPOSITOR hint.
fs-only asks the window manager to disable the compositor only in fullscreen mode.
no sets _NET_WM_BYPASS_COMPOSITOR to 0, which is the default value as declared by the EWMH specification, i.e. no change is done.
never asks the window manager to never disable the compositor.
Disc Devices --cdrom-device=<path> Specify the CD-ROM device (default: /dev/cdrom).
--dvd-device=<path> Specify the DVD device or .iso filename (default: /dev/dvd). You can also specify a directory that contains files previously copied directly from a DVD (with e.g. vobcopy).
mpv dvd:// --dvd-device=/path/to/dvd/
--bluray-device=<path> (Blu-ray only) Specify the Blu-ray disc location. Must be a directory with Blu-ray structure.
mpv bd:// --bluray-device=/path/to/bd/
--cdda-... These options can be used to tune the CD Audio reading feature of mpv.
--cdda-speed=<value> Set CD spin speed.
--cdda-paranoia=<0-2> Set paranoia level. Values other than 0 seem to break playback of anything but the first track.
0      disable checking (default)
1      overlap checking only
2      full data correction and verification
--cdda-sector-size=<value> Set atomic read size.
--cdda-overlap=<value> Force minimum overlap search during verification to <value> sectors.
--cdda-toc-bias Assume that the beginning offset of track 1 as reported in the TOC will be addressed as LBA 0. Some discs need this for getting track boundaries correctly.
--cdda-toc-offset=<value> Add <value> sectors to the values reported when addressing tracks. May be negative.
--cdda-skip=<yes|no> (Never) accept imperfect data reconstruction.
--cdda-cdtext=<yes|no> Print CD text. This is disabled by default, because it ruins performance with CD-ROM drives for unknown reasons.
--dvd-speed=<speed> Try to limit DVD speed (default: 0, no change). DVD base speed is 1385 kB/s, so an 8x drive can read at speeds up to 11080 kB/s. Slower speeds make the drive more quiet. For watching DVDs, 2700 kB/s should be quiet and fast enough. mpv resets the speed to the drive default value on close.  Values of at least 100 mean speed in kB/s. Values less than 100 mean multiples of 1385 kB/s, i.e. --dvd-speed=8 selects 11080 kB/s.
NOTE: You need write access to the DVD device to change the speed.
--dvd-angle=<ID> Some DVDs contain scenes that can be viewed from multiple angles. This option tells mpv which angle to use (default: 1).
Equalizer --brightness=<-100-100> Adjust the brightness of the video signal (default: 0). Not supported by all video output drivers.
--contrast=<-100-100> Adjust the contrast of the video signal (default: 0). Not supported by all video output drivers.
--saturation=<-100-100> Adjust the saturation of the video signal (default: 0). You can get grayscale output with this option. Not supported by all video output drivers.
--gamma=<-100-100> Adjust the gamma of the video signal (default: 0). Not supported by all video output drivers.
--hue=<-100-100> Adjust the hue of the video signal (default: 0). You can get a colored negative of the image with this option. Not supported by all video output drivers.
Demuxer --demuxer=<[+]name> Force demuxer type. Use a '+' before the name to force it; this will skip some checks. Give the demuxer name as printed by --demuxer=help.
--demuxer-lavf-analyzeduration=<value> Maximum length in seconds to analyze the stream properties.
--demuxer-lavf-probe-info=<yes|no|auto|nostreams> Whether to probe stream information (default: auto). Technically, this controls whether libavformat's avformat_find_stream_info() function is called. Usually it's safer to call it, but it can also make startup slower.
The auto choice (the default) tries to skip this for a few know-safe whitelisted formats, while calling it for everything else.
The nostreams choice only calls it if and only if the file seems to contain no streams after opening (helpful in cases when calling the function is needed to detect streams at all, such as with FLV files).
--demuxer-lavf-probescore=<1-100> Minimum required libavformat probe score. Lower values will require less data to be loaded (makes streams start faster), but makes file format detection less reliable. Can be used to force auto-detected libavformat demuxers, even if libavformat considers the detection not reliable enough. (Default: 26.)
--demuxer-lavf-allow-mimetype=<yes|no> Allow deriving the format from the HTTP MIME type (default: yes). Set this to no in case playing things from HTTP mysteriously fails, even though the same files work from local disk.
This is default in order to reduce latency when opening HTTP streams.
--demuxer-lavf-format=<name> Force a specific libavformat demuxer.
--demuxer-lavf-hacks=<yes|no> By default, some formats will be handled differently from other formats by explicitly checking for them. Most of these compensate for weird or imperfect behavior from libavformat demuxers. Passing no disables these. For debugging and testing only.
--demuxer-lavf-o=<key>=<value>[,<key>=<value>[,...]] Pass AVOptions to libavformat demuxer.
Note, a patch to make the o= unneeded and pass all unknown options through the AVOption system is welcome. A full list of AVOptions can be found in the FFmpeg manual. Note that some options may conflict with mpv options.
--demuxer-lavf-o=fflags=+ignidx
--demuxer-lavf-probesize=<value> Maximum amount of data to probe during the detection phase. In the case of MPEG-TS this value identifies the maximum number of TS packets to scan.
--demuxer-lavf-buffersize=<value> Size of the stream read buffer allocated for libavformat in bytes (default: 32768). Lowering the size could lower latency. Note that libavformat might reallocate the buffer internally, or not fully use all of it.
--demuxer-lavf-linearize-timestamps=<yes|no|auto> Attempt to linearize timestamp resets in demuxed streams (default: auto).  This was tested only for single audio streams. It's unknown whether it works correctly for video (but likely won't). Note that the implementation is slightly incorrect either way, and will introduce a discontinuity by about 1 codec frame size.
The auto mode enables this for OGG audio stream. This covers the common and annoying case of OGG web radio streams. Some of these will reset timestamps to 0 every time a new song begins. This breaks the mpv seekable cache, which can't deal with timestamp resets. Note that FFmpeg/libavformat's seeking API can't deal with this either; it's likely that if this option breaks this even more, while if it's disabled, you can at least seek within the first song in the stream. Well, you won't get anything useful either way if the seek is outside of mpv's cache.
--demuxer-lavf-propagate-opts=<yes|no> Propagate FFmpeg-level options to recursively opened connections (default: yes). This is needed because FFmpeg will apply these settings to nested AVIO contexts automatically. On the other hand, this could break in certain situations - it's the FFmpeg API, you just can't win.
This affects in particular the --timeout option and anything passed with --demuxer-lavf-o.
If this option is deemed unnecessary at some point in the future, it will be removed without notice.
--demuxer-mkv-subtitle-preroll=<yes|index|no>, --mkv-subtitle-preroll Try harder to show embedded soft subtitles when seeking somewhere. Normally, it can happen that the subtitle at the seek target is not shown due to how some container file formats are designed. The subtitles appear only if seeking before or exactly to the position a subtitle first appears. To make this worse, subtitles are often timed to appear a very small amount before the associated video frame, so that seeking to the video frame typically does not demux the subtitle at that position.
Enabling this option makes the demuxer start reading data a bit before the seek target, so that subtitles appear correctly. Note that this makes seeking slower, and is not guaranteed to always work. It only works if the subtitle is close enough to the seek target.
Works with the internal Matroska demuxer only. Always enabled for absolute and hr-seeks, and this option changes behavior with relative or imprecise seeks only.
You can use the --demuxer-mkv-subtitle-preroll-secs option to specify how much data the demuxer should pre-read at most in order to find subtitle packets that may overlap. Setting this to 0 will effectively disable this preroll mechanism. Setting a very large value can make seeking very slow, and an extremely large value would completely reread the entire file from start to seek target on every seek - seeking can become slower towards the end of the file. The details are messy, and the value is actually rounded down to the cluster with the previous video keyframe.
Some files, especially files muxed with newer mkvmerge versions, have information embedded that can be used to determine what subtitle packets overlap with a seek target. In these cases, mpv will reduce the amount of data read to a minimum. (Although it will still read all data between the cluster that contains the first wanted subtitle packet, and the seek target.) If the index choice (which is the default) is specified, then prerolling will be done only if this information is actually available. If this method is used, the maximum amount of data to skip can be additionally controlled by --demuxer-mkv-subtitle-preroll-secs-index (it still uses the value of the option without -index if that is higher).
See also --hr-seek-demuxer-offset option. This option can achieve a similar effect, but only if hr-seek is active. It works with any demuxer, but makes seeking much slower, as it has to decode audio and video data instead of just skipping over it.
--mkv-subtitle-preroll is a deprecated alias.
--demuxer-mkv-subtitle-preroll-secs=<value> See --demuxer-mkv-subtitle-preroll.
--demuxer-mkv-subtitle-preroll-secs-index=<value> See --demuxer-mkv-subtitle-preroll.
--demuxer-mkv-probe-start-time=<yes|no> Check the start time of Matroska files (default: yes). This simply reads the first cluster timestamps and assumes it is the start time. Technically, this also reads the first timestamp, which may increase latency by one frame (which may be relevant for live streams).
--demuxer-mkv-probe-video-duration=<yes|no|full> When opening the file, seek to the end of it, and check what timestamp the last video packet has, and report that as file duration. This is strictly for compatibility with Haali only. In this mode, it's possible that opening will be slower (especially when playing over http), or that behavior with broken files is much worse. So don't use this option.
The yes mode merely uses the index and reads a small number of blocks from the end of the file. The full mode actually traverses the entire file and can make a reliable estimate even without an index present (such as partial files).
--demuxer-rawaudio-channels=<value> Number of channels (or channel layout) if --demuxer=rawaudio is used (default: stereo).
--demuxer-rawaudio-format=<value> Sample format for --demuxer=rawaudio (default: s16le).  Use --demuxer-rawaudio-format=help to get a list of all formats.
--demuxer-rawaudio-rate=<value> Sample rate for --demuxer=rawaudio (default: 44 kHz).
--demuxer-rawvideo-fps=<value> Rate in frames per second for --demuxer=rawvideo (default: 25.0).
--demuxer-rawvideo-w=<value>, --demuxer-rawvideo-h=<value> Image dimension in pixels for --demuxer=rawvideo.
Play a raw YUV sample:
mpv sample-720x576.yuv --demuxer=rawvideo \ --demuxer-rawvideo-w=720 --demuxer-rawvideo-h=576
--demuxer-rawvideo-format=<value> Color space (fourcc) in hex or string for --demuxer=rawvideo (default: YV12).
--demuxer-rawvideo-mp-format=<value> Color space by internal video format for --demuxer=rawvideo. Use --demuxer-rawvideo-mp-format=help for a list of possible formats.
--demuxer-rawvideo-codec=<value> Set the video codec instead of selecting the rawvideo codec when using --demuxer=rawvideo. This uses the same values as codec names in --vd (but it does not accept decoder names).
--demuxer-rawvideo-size=<value> Frame size in bytes when using --demuxer=rawvideo.
--demuxer-cue-codepage=<codepage> Specify the CUE sheet codepage. (See --sub-codepage for details.)
--demuxer-max-bytes=<bytesize> This controls how much the demuxer is allowed to buffer ahead. The demuxer will normally try to read ahead as much as necessary, or as much is requested with --demuxer-readahead-secs. The option can be used to restrict the maximum readahead. This limits excessive readahead in case of broken files or desynced playback. The demuxer will stop reading additional packets as soon as one of the limits is reached. (The limits still can be slightly overstepped due to technical reasons.)
Set these limits higher if you get a packet queue overflow warning, and you think normal playback would be possible with a larger packet queue.
--demuxer-max-back-bytes=<bytesize> This controls how much past data the demuxer is allowed to preserve. This is useful only if the cache is enabled.
Unlike the forward cache, there is no control how many seconds are actually cached - it will simply use as much memory this option allows. Setting this option to 0 will strictly disable any back buffer, but this will lead to the situation that the forward seek range starts after the current playback position (as it removes past packets that are seek points).
If the end of the file is reached, the remaining unused forward buffer space is "donated" to the backbuffer (unless the backbuffer size is set to 0, or --demuxer-donate-buffer is set to no).  This still limits the total cache usage to the sum of the forward and backward cache, and effectively makes better use of the total allowed memory budget. (The opposite does not happen: free backward buffer is never "donated" to the forward buffer.)
Keep in mind that other buffers in the player (like decoders) will cause the demuxer to cache "future" frames in the back buffer, which can skew the impression about how much data the backbuffer contains.
See --list-options for defaults and value range.
--demuxer-donate-buffer=<yes|no> Whether to let the back buffer use part of the forward buffer (default: yes).  If set to yes, the "donation" behavior described in the option description for --demuxer-max-back-bytes is enabled. This means the back buffer may use up memory up to the sum of the forward and back buffer options, minus the active size of the forward buffer. If set to no, the options strictly limit the forward and back buffer sizes separately.
Note that if the end of the file is reached, the buffered data stays the same, even if you seek back within the cache. This is because the back buffer is only reduced when new data is read.
--demuxer-seekable-cache=<yes|no|auto> Debugging option to control whether seeking can use the demuxer cache (default: auto). Normally you don't ever need to set this; the default auto does the right thing and enables cache seeking it if --cache is set to yes (or is implied yes if --cache=auto).
If enabled, short seek offsets will not trigger a low level demuxer seek (which means for example that slow network round trips or FFmpeg seek bugs can be avoided). If a seek cannot happen within the cached range, a low level seek will be triggered. Seeking outside of the cache will start a new cached range, but can discard the old cache range if the demuxer exhibits certain unsupported behavior.
The special value auto means yes in the same situation as --cache-secs is used (i.e. when the stream appears to be a network stream or the stream cache is enabled).
--demuxer-force-retry-on-eof=<yes|no> Whether to keep retrying making the demuxer thread read more packets each time the decoder dequeues a packet, even if the end of the file was reached (default: no). This does not really make sense, but was the default behavior in mpv 0.32.0 and earlier. This option will be silently removed after a while, and exists only to restore the old behavior for testing, in case this was actually needed somewhere. This does _not_ help with files that are being appended to (in these cases use appending://, or disable the cache).
--demuxer-thread=<yes|no> Run the demuxer in a separate thread, and let it prefetch a certain amount of packets (default: yes). Having this enabled leads to smoother playback, enables features like prefetching, and prevents that stuck network freezes the player. On the other hand, it can add overhead, or the background prefetching can hog CPU resources.
Disabling this option is not recommended. Use it for debugging only.
--demuxer-termination-timeout=<seconds> Number of seconds the player should wait to shutdown the demuxer (default: 0.1). The player will wait up to this much time before it closes the stream layer forcefully. Forceful closing usually means the network I/O is given no chance to close its connections gracefully (of course the OS can still close TCP connections properly), and might result in annoying messages being logged, and in some cases, confused remote servers.
This timeout is usually only applied when loading has finished properly. If loading is aborted by the user, or in some corner cases like removing external tracks sourced from network during playback, forceful closing is always used.
--demuxer-readahead-secs=<seconds> If --demuxer-thread is enabled, this controls how much the demuxer should buffer ahead in seconds (default: 1). As long as no packet has a timestamp difference higher than the readahead amount relative to the last packet returned to the decoder, the demuxer keeps reading.
Note that enabling the cache (such as --cache=yes, or if the input is considered a network stream, and --cache=auto is used), this option is mostly ignored. (--cache-secs will override this. Technically, the maximum of both options is used.)
The main purpose of this option is to limit the readhead for local playback, since a large readahead value is not overly useful in this case.
(This value tends to be fuzzy, because many file formats don't store linear timestamps.)
--prefetch-playlist=<yes|no> Prefetch next playlist entry while playback of the current entry is ending (default: no).
This does not prefill the cache with the video data of the next URL.  Prefetching video data is supported only for the current playlist entry, and depends on the demuxer cache settings (on by default). This merely opens the URL of the next playlist entry as soon the current URL is fully read.
This does not work with URLs resolved by the youtube-dl wrapper, and it won't.
This can give subtly wrong results if per-file options are used, or if options are changed in the time window between prefetching start and next file played.
This can occasionally make wrong prefetching decisions. For example, it can't predict whether you go backwards in the playlist, and assumes you won't edit the playlist.
--force-seekable=<yes|no> If the player thinks that the media is not seekable (e.g. playing from a pipe, or it's an http stream with a server that doesn't support range requests), seeking will be disabled. This option can forcibly enable it.  For seeks within the cache, there's a good chance of success.
--demuxer-cache-wait=<yes|no> Before starting playback, read data until either the end of the file was reached, or the demuxer cache has reached maximum capacity. Only once this is done, playback starts. This intentionally happens before the initial seek triggered with --start. This does not change any runtime behavior after the initial caching. This option is useless if the file cannot be cached completely.
--rar-list-all-volumes=<yes|no> When opening multi-volume rar files, open all volumes to create a full list of contained files (default: no). If disabled, only the archive entries whose headers are located within the first volume are listed (and thus played when opening a .rar file with mpv). Doing so speeds up opening, and the typical idiotic use-case of playing uncompressed multi-volume rar files that contain a single media file is made faster.
Opening is still slow, because for unknown, idiotic, and unnecessary reasons libarchive opens all volumes anyway when playing the main file, even though mpv iterated no archive entries yet.
Input --native-keyrepeat Use system settings for keyrepeat delay and rate, instead of --input-ar-delay and --input-ar-rate. (Whether this applies depends on the VO backend and how it handles keyboard input. Does not apply to terminal input.)
--input-ar-delay Delay in milliseconds before we start to autorepeat a key (0 to disable).
--input-ar-rate Number of key presses to generate per second on autorepeat.
--input-conf=<filename> Specify input configuration file other than the default location in the mpv configuration directory (usually ~/.config/mpv/input.conf).
--no-input-default-bindings Disable default-level ("weak") key bindings. These are bindings which config files like input.conf can override. It currently affects the builtin key bindings, and keys which scripts bind using mp.add_key_binding (but not mp.add_forced_key_binding because this overrides input.conf).
--no-input-builtin-bindings Disable loading of built-in key bindings during start-up. This option is applied only during (lib)mpv initialization, and if used then it will not be not possible to enable them later. May be useful to libmpv clients.
--input-cmdlist Prints all commands that can be bound to keys.
--input-doubleclick-time=<milliseconds> Time in milliseconds to recognize two consecutive button presses as a double-click (default: 300).
--input-keylist Prints all keys that can be bound to commands.
--input-key-fifo-size=<2-65000> Specify the size of the FIFO that buffers key events (default: 7). If it is too small, some events may be lost. The main disadvantage of setting it to a very large value is that if you hold down a key triggering some particularly slow command then the player may be unresponsive while it processes all the queued commands.
--input-test Input test mode. Instead of executing commands on key presses, mpv will show the keys and the bound commands on the OSD. Has to be used with a dummy video, and the normal ways to quit the player will not work (key bindings that normally quit will be shown on OSD only, just like any other binding). See INPUT.CONF.
--input-terminal, --no-input-terminal --no-input-terminal prevents the player from reading key events from standard input. Useful when reading data from standard input. This is automatically enabled when - is found on the command line. There are situations where you have to set it manually, e.g. if you open /dev/stdin (or the equivalent on your system), use stdin in a playlist or intend to read from stdin later on via the loadfile or loadlist input commands.
--input-ipc-server=<filename> Enable the IPC support and create the listening socket at the given path.
On Linux and Unix, the given path is a regular filesystem path. On Windows, named pipes are used, so the path refers to the pipe namespace (\\.\pipe\<name>). If the \\.\pipe\ prefix is missing, mpv will add it automatically before creating the pipe, so --input-ipc-server=/tmp/mpv-socket and --input-ipc-server=\\.\pipe\tmp\mpv-socket are equivalent for IPC on Windows.
See JSON IPC for details.
--input-ipc-client=fd://<N> Connect a single IPC client to the given FD. This is somewhat similar to --input-ipc-server, except no socket is created, and instead the passed FD is treated like a socket connection received from accept(). In practice, you could pass either a FD created by socketpair(), or a pipe.  In both cases, you must sure the FD is actually inherited by mpv (do not set the POSIX CLOEXEC flag).
The player quits when the connection is closed.
This is somewhat similar to the removed --input-file option, except it supports only integer FDs, and cannot open actual paths.
--input-ipc-client=fd://123
NOTE: Does not and will not work on Windows.
WARNING: Writing to the input-ipc-server option at runtime will start another instance of an IPC client handler for the input-ipc-client option, because initialization is bundled, and this thing is stupid. This is a bug. Writing to input-ipc-client at runtime will start another IPC client handler for the new value, without stopping the old one, even if the FD value is the same (but the string is different e.g. due to whitespace). This is not a bug.
--input-gamepad=<yes|no> Enable/disable SDL2 Gamepad support. Disabled by default.
--input-cursor, --no-input-cursor Permit mpv to receive pointer events reported by the video output driver. Necessary to use the OSC, or to select the buttons in DVD menus.  Support depends on the VO in use.
--input-media-keys=<yes|no> On systems where mpv can choose between receiving media keys or letting the system handle them - this option controls whether mpv should receive them.
Default: yes (except for libmpv). macOS and Windows only, because elsewhere mpv doesn't have a choice - the system decides whether to send media keys to mpv. For instance, on X11 or Wayland, system-wide media keys are not implemented. Whether media keys work when the mpv window is focused is implementation-defined.
--input-right-alt-gr, --no-input-right-alt-gr (Cocoa and Windows only) Use the right Alt key as Alt Gr to produce special characters. If disabled, count the right Alt as an Alt modifier key. Enabled by default.
--input-vo-keyboard=<yes|no> Disable all keyboard input on for VOs which can't participate in proper keyboard input dispatching. May not affect all VOs. Generally useful for embedding only.
On X11, a sub-window with input enabled grabs all keyboard input as long as it is 1. a child of a focused window, and 2. the mouse is inside of the sub-window. It can steal away all keyboard input from the application embedding the mpv window, and on the other hand, the mpv window will receive no input if the mouse is outside of the mpv window, even though mpv has focus. Modern toolkits work around this weird X11 behavior, but naively embedding foreign windows breaks it.
The only way to handle this reasonably is using the XEmbed protocol, which was designed to solve these problems. GTK provides GtkSocket, which supports XEmbed. Qt doesn't seem to provide anything working in newer versions.
If the embedder supports XEmbed, input should work with default settings and with this option disabled. Note that input-default-bindings is disabled by default in libmpv as well - it should be enabled if you want the mpv default key bindings.
(This option was renamed from --input-x11-keyboard.)
OSD --osc, --no-osc Whether to load the on-screen-controller (default: yes).
--no-osd-bar, --osd-bar Disable display of the OSD bar.
You can configure this on a per-command basis in input.conf using osd- prefixes, see Input Command Prefixes. If you want to disable the OSD completely, use --osd-level=0.
--osd-on-seek=<no,bar,msg,msg-bar> Set what is displayed on the OSD during seeks. The default is bar.
You can configure this on a per-command basis in input.conf using osd- prefixes, see Input Command Prefixes.
--osd-duration=<time> Set the duration of the OSD messages in ms (default: 1000).
--osd-font=<name> Specify font to use for OSD. The default is sans-serif.
• --osd-font='Bitstream Vera Sans'
• --osd-font='Comic Sans MS'
--osd-font-size=<size> Specify the OSD font size. See --sub-font-size for details.
--osd-msg1=<string> Show this string as message on OSD with OSD level 1 (visible by default).  The message will be visible by default, and as long as no other message covers it, and the OSD level isn't changed (see --osd-level).  Expands properties; see Property Expansion.
--osd-msg2=<string> Similar to --osd-msg1, but for OSD level 2. If this is an empty string (default), then the playback time is shown.
--osd-msg3=<string> Similar to --osd-msg1, but for OSD level 3. If this is an empty string (default), then the playback time, duration, and some more information is shown.
This is used for the show-progress command (by default mapped to P), and when seeking if enabled with --osd-on-seek or by osd- prefixes in input.conf (see Input Command Prefixes).
--osd-status-msg is a legacy equivalent (but with a minor difference).
--osd-status-msg=<string> Show a custom string during playback instead of the standard status text.  This overrides the status text used for --osd-level=3, when using the show-progress command (by default mapped to P), and when seeking if enabled with --osd-on-seek or osd- prefixes in input.conf (see Input Command Prefixes). Expands properties. See Property Expansion.
This option has been replaced with --osd-msg3. The only difference is that this option implicitly includes ${osd-sym-cc}. This option is ignored if --osd-msg3 is not empty.
--osd-playing-msg=<string> Show a message on OSD when playback starts. The string is expanded for properties, e.g. --osd-playing-msg='file: ${filename}' will show the message file: followed by a space and the currently played filename.
See Property Expansion.
--osd-bar-align-x=<-1-1> Position of the OSD bar. -1 is far left, 0 is centered, 1 is far right.  Fractional values (like 0.5) are allowed.
--osd-bar-align-y=<-1-1> Position of the OSD bar. -1 is top, 0 is centered, 1 is bottom. Fractional values (like 0.5) are allowed.
--osd-bar-w=<1-100> Width of the OSD bar, in percentage of the screen width (default: 75).  A value of 50 means the bar is half the screen wide.
--osd-bar-h=<0.1-50> Height of the OSD bar, in percentage of the screen height (default: 3.125).
--osd-back-color=<color> See --sub-color. Color used for OSD text background.
--osd-blur=<0..20.0> Gaussian blur factor. 0 means no blur applied (default).
--osd-bold=<yes|no> Format text on bold.
--osd-italic=<yes|no> Format text on italic.
--osd-border-color=<color> See --sub-color. Color used for the OSD font border.
NOTE: ignored when --osd-back-color is specified (or more exactly: when that option is not set to completely transparent).
--osd-border-size=<size> Size of the OSD font border in scaled pixels (see --sub-font-size for details). A value of 0 disables borders.
--osd-color=<color> Specify the color used for OSD.  See --sub-color for details.
--osd-fractions Show OSD times with fractions of seconds (in millisecond precision). Useful to see the exact timestamp of a video frame.
--osd-level=<0-3> Specifies which mode the OSD should start in.
0      OSD completely disabled (subtitles only)
1      enabled (shows up only on user interaction)
2      enabled + current time visible by default
3      enabled + --osd-status-msg (current time and status by default)
--osd-margin-x=<size> Left and right screen margin for the OSD in scaled pixels (see --sub-font-size for details).
This option specifies the distance of the OSD to the left, as well as at which distance from the right border long OSD text will be broken.
--osd-margin-y=<size> Top and bottom screen margin for the OSD in scaled pixels (see --sub-font-size for details).
This option specifies the vertical margins of the OSD.
--osd-align-x=<left|center|right> Control to which corner of the screen OSD should be aligned to (default: left).
--osd-align-y=<top|center|bottom> Vertical position (default: top).  Details see --osd-align-x.
--osd-scale=<factor> OSD font size multiplier, multiplied with --osd-font-size value.
--osd-scale-by-window=<yes|no> Whether to scale the OSD with the window size (default: yes). If this is disabled, --osd-font-size and other OSD options that use scaled pixels are always in actual pixels. The effect is that changing the window size won't change the OSD font size.
--osd-shadow-color=<color> See --sub-color. Color used for OSD shadow.
--osd-shadow-offset=<size> Displacement of the OSD shadow in scaled pixels (see --sub-font-size for details). A value of 0 disables shadows.
--osd-spacing=<size> Horizontal OSD/sub font spacing in scaled pixels (see --sub-font-size for details). This value is added to the normal letter spacing. Negative values are allowed.
--video-osd=<yes|no> Enabled OSD rendering on the video window (default: yes). This can be used in situations where terminal OSD is preferred. If you just want to disable all OSD rendering, use --osd-level=0.
It does not affect subtitles or overlays created by scripts (in particular, the OSC needs to be disabled with --no-osc).
This option is somewhat experimental and could be replaced by another mechanism in the future.
--osd-font-provider=<...> See --sub-font-provider for details and accepted values. Note that unlike subtitles, OSD never uses embedded fonts from media files.
Screenshot --screenshot-format=<type> Set the image file type used for saving screenshots.
Available choices:
png    PNG
jpg    JPEG (default)
jpeg   JPEG (alias for jpg)
webp   WebP
--screenshot-tag-colorspace=<yes|no> Tag screenshots with the appropriate colorspace.
Note that not all formats are supported.
--screenshot-high-bit-depth=<yes|no> If possible, write screenshots with a bit depth similar to the source video (default: yes). This is interesting in particular for PNG, as this sometimes triggers writing 16 bit PNGs with huge file sizes. This will also include an unused alpha channel in the resulting files if 16 bit is used.
--screenshot-template=<template> Specify the filename template used to save screenshots. The template specifies the filename without file extension, and can contain format specifiers, which will be substituted when taking a screenshot.  By default, the template is mpv-shot%n, which results in filenames like mpv-shot0012.png for example.
The template can start with a relative or absolute path, in order to specify a directory location where screenshots should be saved.
If the final screenshot filename points to an already existing file, the file will not be overwritten. The screenshot will either not be saved, or if the template contains %n, saved using different, newly generated filename.
Allowed format specifiers:
%[#][0X]n A sequence number, padded with zeros to length X (default: 04). E.g.  passing the format %04n will yield 0012 on the 12th screenshot.  The number is incremented every time a screenshot is taken or if the file already exists. The length X must be in the range 0-9. With the optional # sign, mpv will use the lowest available number. For example, if you take three screenshots--0001, 0002, 0003--and delete the first two, the next two screenshots will not be 0004 and 0005, but 0001 and 0002 again.
%f     Filename of the currently played video.
%F     Same as %f, but strip the file extension, including the dot.
%x     Directory path of the currently played video. If the video is not on the filesystem (but e.g. http://), this expand to an empty string.
%X{fallback} Same as %x, but if the video file is not on the filesystem, return the fallback string inside the {...}.
%p     Current playback time, in the same format as used in the OSD. The result is a string of the form "HH:MM:SS". For example, if the video is at the time position 5 minutes and 34 seconds, %p will be replaced with "00:05:34".
%P     Similar to %p, but extended with the playback time in milliseconds.  It is formatted as "HH:MM:SS.mmm", with "mmm" being the millisecond part of the playback time.
NOTE: This is a simple way for getting unique per-frame timestamps. (Frame numbers would be more intuitive, but are not easily implementable because container formats usually use time stamps for identifying frames.)
%wX    Specify the current playback time using the format string X.  %p is like %wH:%wM:%wS, and %P is like %wH:%wM:%wS.%wT.
Valid format specifiers:
%wH    hour (padded with 0 to two digits)
%wh    hour (not padded)
%wM    minutes (00-59)
%wm    total minutes (includes hours, unlike %wM)
%wS    seconds (00-59)
%ws    total seconds (includes hours and minutes)
%wf    like %ws, but as float
%wT    milliseconds (000-999)
%tX    Specify the current local date/time using the format X. This format specifier uses the UNIX strftime() function internally, and inserts the result of passing "%X" to strftime. For example, %tm will insert the number of the current month as number. You have to use multiple %tX specifiers to build a full date/time string.
%{prop[:fallback text]} Insert the value of the input property 'prop'. E.g. %{filename} is the same as %f. If the property does not exist or is not available, an error text is inserted, unless a fallback is specified.
%%     Replaced with the % character itself.
--screenshot-directory=<path> Store screenshots in this directory. This path is joined with the filename generated by --screenshot-template. If the template filename is already absolute, the directory is ignored.
If the directory does not exist, it is created on the first screenshot. If it is not a directory, an error is generated when trying to write a screenshot.
This option is not set by default, and thus will write screenshots to the directory from which mpv was started. In pseudo-gui mode (see PSEUDO GUI MODE), this is set to the desktop.
--screenshot-jpeg-quality=<0-100> Set the JPEG quality level. Higher means better quality. The default is 90.
--screenshot-jpeg-source-chroma=<yes|no> Write JPEG files with the same chroma subsampling as the video (default: yes). If disabled, the libjpeg default is used.
--screenshot-png-compression=<0-9> Set the PNG compression level. Higher means better compression. This will affect the file size of the written screenshot file and the time it takes to write a screenshot. Too high compression might occupy enough CPU time to interrupt playback. The default is 7.
--screenshot-png-filter=<0-5> Set the filter applied prior to PNG compression. 0 is none, 1 is "sub", 2 is "up", 3 is "average", 4 is "Paeth", and 5 is "mixed". This affects the level of compression that can be achieved. For most images, "mixed" achieves the best compression ratio, hence it is the default.
--screenshot-webp-lossless=<yes|no> Write lossless WebP files. --screenshot-webp-quality is ignored if this is set. The default is no.
--screenshot-webp-quality=<0-100> Set the WebP quality level. Higher means better quality. The default is 75.
--screenshot-webp-compression=<0-6> Set the WebP compression level. Higher means better compression, but takes more CPU time. Note that this also affects the screenshot quality when used with lossy WebP files. The default is 4.
--screenshot-sw=<yes|no> Whether to use software rendering for screenshots (default: no).
If set to no, the screenshot will be rendered by the current VO if possible (only vo_gpu currently). The advantage is that this will (probably) always show up as in the video window, because the same code is used for rendering.  But since the renderer needs to be reinitialized, this can be slow and interrupt playback. (Unless the window mode is used with the screenshot command.)
If set to yes, the software scaler is used to convert the video to RGB (or whatever the target screenshot requires). In this case, conversion will run in a separate thread and will probably not interrupt playback. The software renderer may lack some capabilities, such as HDR rendering.
Software Scaler --sws-scaler=<name> Specify the software scaler algorithm to be used with --vf=scale. This also affects video output drivers which lack hardware acceleration, e.g. x11. See also --vf=scale.
To get a list of available scalers, run --sws-scaler=help.
Default: bicubic.
--sws-lgb=<0-100> Software scaler Gaussian blur filter (luma). See --sws-scaler.
--sws-cgb=<0-100> Software scaler Gaussian blur filter (chroma). See --sws-scaler.
--sws-ls=<-100-100> Software scaler sharpen filter (luma). See --sws-scaler.
--sws-cs=<-100-100> Software scaler sharpen filter (chroma). See --sws-scaler.
--sws-chs=<h> Software scaler chroma horizontal shifting. See --sws-scaler.
--sws-cvs=<v> Software scaler chroma vertical shifting. See --sws-scaler.
--sws-bitexact=<yes|no> Unknown functionality (default: no). Consult libswscale source code. The primary purpose of this, as far as libswscale API goes), is to produce exactly the same output for the same input on all platforms (output has the same "bits" everywhere, thus "bitexact"). Typically disables optimizations.
--sws-fast=<yes|no> Allow optimizations that help with performance, but reduce quality (default: no).
VOs like drm and x11 will benefit a lot from using --sws-fast. You may need to set other options, like --sws-scaler. The builtin sws-fast profile sets this option and some others to gain performance for reduced quality. Also see --sws-allow-zimg.
--sws-allow-zimg=<yes|no> Allow using zimg (if the component using the internal swscale wrapper explicitly allows so) (default: yes). In this case, zimg may be used, if the internal zimg wrapper supports the input and output formats. It will silently or noisily fall back to libswscale if one of these conditions does not apply.
If zimg is used, the other --sws- options are ignored, and the --zimg- options are used instead.
If the internal component using the swscale wrapper hooks up logging correctly, a verbose priority log message will indicate whether zimg is being used.
Most things which need software conversion can make use of this.
NOTE: Do note that zimg may be slower than libswscale. Usually, it's faster on x86 platforms, but slower on ARM (due to lack of ARM specific optimizations). The mpv zimg wrapper uses unoptimized repacking for some formats, for which zimg cannot be blamed.
--zimg-scaler=<point|bilinear|bicubic|spline16|spline36|lanczos> Zimg luma scaler to use (default: lanczos).
--zimg-scaler-param-a=<default|float>, --zimg-scaler-param-b=<default|float> Set scaler parameters. By default, these are set to the special string default, which maps to a scaler-specific default value. Ignored if the scaler is not tunable.
lanczos --zimg-scaler-param-a is the number of taps.
bicubic a and b are the bicubic b and c parameters.
--zimg-scaler-chroma=... Same as --zimg-scaler, for for chroma interpolation (default: bilinear).
--zimg-scaler-chroma-param-a, --zimg-scaler-chroma-param-b Same as --zimg-scaler-param-a / --zimg-scaler-param-b, for chroma.
--zimg-dither=<no|ordered|random|error-diffusion> Dithering (default: random).
--zimg-threads=<auto|integer> Set the maximum number of threads to use for scaling (default: auto).  auto uses the number of logical cores on the current machine. Note that the scaler may use less threads (or even just 1 thread) depending on stuff.  Passing a value of 1 disables threading and always scales the image in a single operation. Higher thread counts waste resources, but make it typically faster.
Note that some zimg git versions had bugs that will corrupt the output if threads are used.
--zimg-fast=<yes|no> Allow optimizations that help with performance, but reduce quality (default: yes). Currently, this may simplify gamma conversion operations.
Audio Resampler This controls the default options of any resampling done by mpv (but not within libavfilter, within the system audio API resampler, or any other places).
It also sets the defaults for the lavrresample audio filter.
--audio-resample-filter-size=<length> Length of the filter with respect to the lower sampling rate. (default: 16)
--audio-resample-phase-shift=<count> Log2 of the number of polyphase entries. (..., 10->1024, 11->2048, 12->4096, ...) (default: 10->1024)
--audio-resample-cutoff=<cutoff> Cutoff frequency (0.0-1.0), default set depending upon filter length.
--audio-resample-linear=<yes|no> If set then filters will be linearly interpolated between polyphase entries. (default: no)
--audio-normalize-downmix=<yes|no> Enable/disable normalization if surround audio is downmixed to stereo (default: no). If this is disabled, downmix can cause clipping. If it's enabled, the output might be too quiet. It depends on the source audio.
Technically, this changes the normalize suboption of the lavrresample audio filter, which performs the downmixing.
If downmix happens outside of mpv for some reason, or in the decoder (decoder downmixing), or in the audio output (system mixer), this has no effect.
--audio-resample-max-output-size=<length> Limit maximum size of audio frames filtered at once, in ms (default: 40).  The output size size is limited in order to make resample speed changes react faster. This is necessary especially if decoders or filters output very large frame sizes (like some lossless codecs or some DRC filters).  This option does not affect the resampling algorithm in any way.
For testing/debugging only. Can be removed or changed any time.
--audio-swresample-o=<string> Set AVOptions on the SwrContext or AVAudioResampleContext. These should be documented by FFmpeg or Libav.
Terminal --quiet Make console output less verbose; in particular, prevents the status line (i.e. AV: 3.4 (00:00:03.37) / 5320.6 ...) from being displayed.  Particularly useful on slow terminals or broken ones which do not properly handle carriage return (i.e. \r).
See also: --really-quiet and --msg-level.
--really-quiet Display even less output and status messages than with --quiet.
--no-terminal, --terminal Disable any use of the terminal and stdin/stdout/stderr. This completely silences any message output.
Unlike --really-quiet, this disables input and terminal initialization as well.
--no-msg-color Disable colorful console output on terminals.
--msg-level=<module1=level1,module2=level2,...> Control verbosity directly for each module. The all module changes the verbosity of all the modules. The verbosity changes from this option are applied in order from left to right, and each item can override a previous one.
Run mpv with --msg-level=all=trace to see all messages mpv outputs. You can use the module names printed in the output (prefixed to each line in [...]) to limit the output to interesting modules.
This also affects --log-file, and in certain cases libmpv API logging.
NOTE: Some messages are printed before the command line is parsed and are therefore not affected by --msg-level. To control these messages, you have to use the MPV_VERBOSE environment variable; see ENVIRONMENT VARIABLES for details.
Available levels:
no     complete silence
fatal  fatal messages only
error  error messages
warn   warning messages
info   informational messages
status status messages (default)
v      verbose messages
debug  debug messages
trace  very noisy debug messages
mpv --msg-level=ao/sndio=no
Completely silences the output of ao_sndio, which uses the log prefix [ao/sndio].
mpv --msg-level=all=warn,ao/alsa=error
Only show warnings or worse, and let the ao_alsa output show errors only.
--term-osd=<auto|no|force> Control whether OSD messages are shown on the console when no video output is available (default: auto).
auto   use terminal OSD if no video output active
no     disable terminal OSD