summaryrefslogtreecommitdiffstats
path: root/DOCS/man/options.rst
diff options
context:
space:
mode:
Diffstat (limited to 'DOCS/man/options.rst')
-rw-r--r--DOCS/man/options.rst7377
1 files changed, 7377 insertions, 0 deletions
diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst
new file mode 100644
index 0000000..e0445d4
--- /dev/null
+++ b/DOCS/man/options.rst
@@ -0,0 +1,7377 @@
+OPTIONS
+=======
+
+Track Selection
+---------------
+
+``--alang=<languagecode[,languagecode,...]>``
+ Specify a priority list of audio languages to use, as IETF language tags.
+ Equivalent ISO 639-1 two-letter and ISO 639-2 three-letter codes are treated the same.
+ The first tag in the list whose language matches a track in the file will be used.
+ A track that matches more subtags will be preferred over one that matches fewer,
+ with preference given to earlier subtags over later ones. See also ``--aid``.
+
+ This is a string list option. See `List Options`_ for details.
+
+ .. admonition:: Examples
+
+ - ``mpv dvd://1 --alang=hu,en`` chooses the Hungarian language track
+ on a DVD and falls back on English if Hungarian is not available.
+ - ``mpv --alang=jpn example.mkv`` plays a Matroska file with Japanese
+ audio.
+
+``--slang=<languagecode[,languagecode,...]>``
+ Equivalent to ``--alang``, for subtitle tracks.
+
+ This is a string list option. See `List Options`_ for details.
+
+ .. admonition:: Examples
+
+ - ``mpv dvd://1 --slang=hu,en`` chooses the Hungarian subtitle track on
+ a DVD and falls back on English if Hungarian is not available.
+ - ``mpv --slang=jpn example.mkv`` plays a Matroska file with Japanese
+ subtitles.
+ - ``mpv --slang=pt-BR example.mkv`` plays a Matroska file with Brazilian
+ Portuguese subtitles if available, and otherwise any Portuguese subtitles.
+
+``--vlang=<...>``
+ Equivalent to ``--alang`` and ``--slang``, for video tracks.
+
+ This is a string list option. See `List Options`_ for details.
+
+``--aid=<ID|auto|no>``
+ Select audio track. ``auto`` selects the default, ``no`` disables audio.
+ See also ``--alang``. mpv normally prints available audio tracks on the
+ terminal when starting playback of a file.
+
+ ``--audio`` is an alias for ``--aid``.
+
+ ``--aid=no`` or ``--audio=no`` or ``--no-audio`` disables audio playback.
+ (The latter variant does not work with the client API.)
+
+ .. note::
+
+ The track selection options (``--aid`` but also ``--sid`` and the
+ others) sometimes expose behavior that may appear strange. Also, the
+ behavior tends to change around with each mpv release.
+
+ The track selection properties will return the option value outside of
+ playback (as expected), but during playback, the affective track
+ selection is returned. For example, with ``--aid=auto``, the ``aid``
+ property will suddenly return ``2`` after playback initialization
+ (assuming the file has at least 2 audio tracks, and the second is the
+ default).
+
+ At mpv 0.32.0 (and some releases before), if you passed a track value
+ for which a corresponding track didn't exist (e.g. ``--aid=2`` and there
+ was only 1 audio track), the ``aid`` property returned ``no``. However if
+ another audio track was added during playback, and you tried to set the
+ ``aid`` property to ``2``, nothing happened, because the ``aid`` option
+ still had the value ``2``, and writing the same value has no effect.
+
+ With mpv 0.33.0, the behavior was changed. Now track selection options
+ are reset to ``auto`` at playback initialization, if the option had
+ tries to select a track that does not exist. The same is done if the
+ track exists, but fails to initialize. The consequence is that unlike
+ before mpv 0.33.0, the user's track selection parameters are clobbered
+ in certain situations.
+
+ Also since mpv 0.33.0, trying to select a track by number will strictly
+ select this track. Before this change, trying to select a track which
+ did not exist would fall back to track default selection at playback
+ initialization. The new behavior is more consistent.
+
+ Setting a track selection property at runtime, and then playing a new
+ file might reset the track selection to defaults, if the fingerprint
+ of the track list of the new file is different.
+
+ Be aware of tricky combinations of all of all of the above: for example,
+ ``mpv --aid=2 file_with_2_audio_tracks.mkv file_with_1_audio_track.mkv``
+ would first play the correct track, and the second file without audio.
+ If you then go back the first file, its first audio track will be played,
+ and the second file is played with audio. If you do the same thing again
+ but instead of using ``--aid=2`` you run ``set aid 2`` while the file is
+ playing, then changing to the second file will play its audio track.
+ This is because runtime selection enables the fingerprint heuristic.
+
+ Most likely this is not the end.
+
+``--sid=<ID|auto|no>``
+ Display the subtitle stream specified by ``<ID>``. ``auto`` selects
+ the default, ``no`` disables subtitles.
+
+ ``--sub`` is an alias for ``--sid``.
+
+ ``--sid=no`` or ``--sub=no`` or ``--no-sub`` disables subtitle decoding.
+ (The latter variant does not work with the client API.)
+
+``--vid=<ID|auto|no>``
+ Select video channel. ``auto`` selects the default, ``no`` disables video.
+
+ ``--video`` is an alias for ``--vid``.
+
+ ``--vid=no`` or ``--video=no`` or ``--no-video`` disables video playback.
+ (The latter variant does not work with the client API.)
+
+ If video is disabled, mpv will try to download the audio only if media is
+ streamed with youtube-dl, because it saves bandwidth. This is done by
+ setting the ytdl_format to "bestaudio/best" in the ytdl_hook.lua script.
+
+``--edition=<ID|auto>``
+ (Matroska files only)
+ Specify the edition (set of chapters) to use, where 0 is the first. If set
+ to ``auto`` (the default), mpv will choose the first edition declared as a
+ default, or if there is no default, the first edition defined.
+
+``--track-auto-selection=<yes|no>``
+ Enable the default track auto-selection (default: yes). Enabling this will
+ make the player select streams according to ``--aid``, ``--alang``, and
+ others. If it is disabled, no tracks are selected. In addition, the player
+ will not exit if no tracks are selected, and wait instead (this wait mode
+ is similar to pausing, but the pause option is not set).
+
+ This is useful with ``--lavfi-complex``: you can start playback in this
+ mode, and then set select tracks at runtime by setting the filter graph.
+ Note that if ``--lavfi-complex`` is set before playback is started, the
+ referenced tracks are always selected.
+
+``--subs-with-matching-audio=<yes|no>``
+ When autoselecting a subtitle track, select a full/non-forced one even if the selected
+ audio stream matches your preferred subtitle language (default: yes). If this option is
+ set to ``no``, a non-forced subtitle track that matches the audio language will never be
+ autoselected by mpv regardless of the value of ``--slang`` or ``--subs-fallback``.
+
+``--subs-match-os-language=<yes|no>``
+ When autoselecting a subtitle track, select the track that matches the language of your OS
+ if the audio stream is in a different language if suitable (default track or a forced track
+ under the right conditions). Note that if ``-slang`` is set, this will be completely ignored
+ (default: yes).
+
+``--subs-fallback=<yes|default|no>``
+ When autoselecting a subtitle track, if no tracks match your preferred languages,
+ select a full track even if it doesn't match your preferred subtitle language (default: default).
+ Setting this to `default` means that only streams flagged as `default` will be selected.
+
+``--subs-fallback-forced=<yes|no|always>``
+ When autoselecting a subtitle track, the default value of `yes` will prefer using a forced
+ subtitle track if the subtitle language matches the audio language and matches your list of
+ preferred languages. The special value `always` will only select forced subtitle tracks and
+ never fallback on a non-forced track. Conversely, `no` will never select a forced subtitle
+ track.
+
+
+Playback Control
+----------------
+
+``--start=<relative time>``
+ Seek to given time position.
+
+ The general format for times is ``[+|-][[hh:]mm:]ss[.ms]``. If the time is
+ prefixed with ``-``, the time is considered relative from the end of the
+ file (as signaled by the demuxer/the file). A ``+`` is usually ignored (but
+ see below).
+
+ The following alternative time specifications are recognized:
+
+ ``pp%`` seeks to percent position pp (0-100).
+
+ ``#c`` seeks to chapter number c. (Chapters start from 1.)
+
+ ``none`` resets any previously set option (useful for libmpv).
+
+ If ``--rebase-start-time=no`` is given, then prefixing times with ``+``
+ makes the time relative to the start of the file. A timestamp without
+ prefix is considered an absolute time, i.e. should seek to a frame with a
+ timestamp as the file contains it. As a bug, but also a hidden feature,
+ putting 1 or more spaces before the ``+`` or ``-`` always interprets the
+ time as absolute, which can be used to seek to negative timestamps (useful
+ for debugging at most).
+
+ .. admonition:: Examples
+
+ ``--start=+56``, ``--start=00:56``
+ Seeks to the start time + 56 seconds.
+ ``--start=-56``, ``--start=-00:56``
+ Seeks to the end time - 56 seconds.
+ ``--start=01:10:00``
+ Seeks to 1 hour 10 min.
+ ``--start=50%``
+ Seeks to the middle of the file.
+ ``--start=30 --end=40``
+ Seeks to 30 seconds, plays 10 seconds, and exits.
+ ``--start=-3:20 --length=10``
+ Seeks to 3 minutes and 20 seconds before the end of the file, plays
+ 10 seconds, and exits.
+ ``--start='#2' --end='#4'``
+ Plays chapters 2 and 3, and exits.
+
+``--end=<relative time>``
+ Stop at given time. Use ``--length`` if the time should be relative
+ to ``--start``. See ``--start`` for valid option values and examples.
+
+``--length=<relative time>``
+ Stop after a given time relative to the start time.
+ See ``--start`` for valid option values and examples.
+
+ If both ``--end`` and ``--length`` are provided, playback will stop when it
+ reaches either of the two endpoints.
+
+ Obscurity note: this does not work correctly if ``--rebase-start-time=no``,
+ and the specified time is not an "absolute" time, as defined in the
+ ``--start`` option description.
+
+``--rebase-start-time=<yes|no>``
+ Whether to move the file start time to ``00:00:00`` (default: yes). This
+ is less awkward for files which start at a random timestamp, such as
+ transport streams. On the other hand, if there are timestamp resets, the
+ resulting behavior can be rather weird. For this reason, and in case you
+ are actually interested in the real timestamps, this behavior can be
+ disabled with ``no``.
+
+``--speed=<0.01-100>``
+ Slow down or speed up playback by the factor given as parameter.
+
+ If ``--audio-pitch-correction`` (on by default) is used, playing with a
+ speed higher than normal automatically inserts the ``scaletempo2`` audio
+ filter.
+
+``--pause``
+ Start the player in paused state.
+
+``--shuffle``
+ Play files in random order.
+
+``--playlist-start=<auto|index>``
+ Set which file on the internal playlist to start playback with. The index
+ is an integer, with 0 meaning the first file. The value ``auto`` means that
+ the selection of the entry to play is left to the playback resume mechanism
+ (default). If an entry with the given index doesn't exist, the behavior is
+ unspecified and might change in future mpv versions. The same applies if
+ the playlist contains further playlists (don't expect any reasonable
+ behavior). Passing a playlist file to mpv should work with this option,
+ though. E.g. ``mpv playlist.m3u --playlist-start=123`` will work as expected,
+ as long as ``playlist.m3u`` does not link to further playlists.
+
+ The value ``no`` is a deprecated alias for ``auto``.
+
+``--playlist=<filename>``
+ Play files according to a playlist file. Supports some common formats. If
+ no format is detected, it will be treated as list of files, separated by
+ newline characters. You may need this option to load plaintext files as
+ a playlist. Note that XML playlist formats are not supported.
+
+ This option forces ``--demuxer=playlist`` to interpret the playlist file.
+ Some playlist formats, notably CUE and optical disc formats, need to use
+ different demuxers and will not work with this option. They still can be
+ played directly, without using this option.
+
+ You can play playlists directly, without this option. Before mpv version
+ 0.31.0, this option disabled any security mechanisms that might be in
+ place, but since 0.31.0 it uses the same security mechanisms as playing a
+ playlist file directly. If you trust the playlist file, you can disable
+ any security checks with ``--load-unsafe-playlists``. Because playlists
+ can load other playlist entries, consider applying this option only to the
+ playlist itself and not its entries, using something along these lines:
+
+ ``mpv --{ --playlist=filename --load-unsafe-playlists --}``
+
+ .. warning::
+
+ The way older versions of mpv played playlist files via ``--playlist``
+ was not safe against maliciously constructed files. Such files may
+ trigger harmful actions. This has been the case for all versions of
+ mpv prior to 0.31.0, and all MPlayer versions, but unfortunately this
+ fact was not well documented earlier, and some people have even
+ misguidedly recommended the use of ``--playlist`` with untrusted
+ sources. Do NOT use ``--playlist`` with random internet sources or
+ files you do not trust if you are not sure your mpv is at least 0.31.0.
+
+ In particular, playlists can contain entries using protocols other than
+ local files, such as special protocols like ``avdevice://`` (which are
+ inherently unsafe).
+
+``--chapter-merge-threshold=<number>``
+ Threshold for merging almost consecutive ordered chapter parts in
+ milliseconds (default: 100). Some Matroska files with ordered chapters
+ have inaccurate chapter end timestamps, causing a small gap between the
+ end of one chapter and the start of the next one when they should match.
+ If the end of one playback part is less than the given threshold away from
+ the start of the next one then keep playing video normally over the
+ chapter change instead of doing a seek.
+
+``--chapter-seek-threshold=<seconds>``
+ Distance in seconds from the beginning of a chapter within which a backward
+ chapter seek will go to the previous chapter (default: 5.0). Past this
+ threshold, a backward chapter seek will go to the beginning of the current
+ chapter instead. A negative value means always go back to the previous
+ chapter.
+
+``--hr-seek=<no|absolute|yes|default>``
+ Select when to use precise seeks that are not limited to keyframes. Such
+ seeks require decoding video from the previous keyframe up to the target
+ position and so can take some time depending on decoding performance. For
+ some video formats, precise seeks are disabled. This option selects the
+ default choice to use for seeks; it is possible to explicitly override that
+ default in the definition of key bindings and in input commands.
+
+ :no: Never use precise seeks.
+ :absolute: Use precise seeks if the seek is to an absolute position in the
+ file, such as a chapter seek, but not for relative seeks like
+ the default behavior of arrow keys.
+ :default: Like ``absolute``, but enable hr-seeks in audio-only cases. The
+ exact behavior is implementation specific and may change with
+ new releases (default).
+ :yes: Use precise seeks whenever possible.
+ :always: Same as ``yes`` (for compatibility).
+
+``--hr-seek-demuxer-offset=<seconds>``
+ This option exists to work around failures to do precise seeks (as in
+ ``--hr-seek``) caused by bugs or limitations in the demuxers for some file
+ formats. Some demuxers fail to seek to a keyframe before the given target
+ position, going to a later position instead. The value of this option is
+ subtracted from the time stamp given to the demuxer. Thus, if you set this
+ option to 1.5 and try to do a precise seek to 60 seconds, the demuxer is
+ told to seek to time 58.5, which hopefully reduces the chance that it
+ erroneously goes to some time later than 60 seconds. The downside of
+ setting this option is that precise seeks become slower, as video between
+ the earlier demuxer position and the real target may be unnecessarily
+ decoded.
+
+``--hr-seek-framedrop=<yes|no>``
+ Allow the video decoder to drop frames during seek, if these frames are
+ before the seek target. If this is enabled, precise seeking can be faster,
+ but if you're using video filters which modify timestamps or add new
+ frames, it can lead to precise seeking skipping the target frame. This
+ e.g. can break frame backstepping when deinterlacing is enabled.
+
+ Default: ``yes``
+
+``--index=<mode>``
+ Controls how to seek in files. Note that if the index is missing from a
+ file, it will be built on the fly by default, so you don't need to change
+ this. But it might help with some broken files.
+
+ :default: use an index if the file has one, or build it if missing
+ :recreate: don't read or use the file's index
+
+ .. note::
+
+ This option only works if the underlying media supports seeking
+ (i.e. not with stdin, pipe, etc).
+
+``--load-unsafe-playlists``
+ Load URLs from playlists which are considered unsafe (default: no). This
+ includes special protocols and anything that doesn't refer to normal files.
+ Local files and HTTP links on the other hand are always considered safe.
+
+ In addition, if a playlist is loaded while this is set, the added playlist
+ entries are not marked as originating from network or potentially unsafe
+ location. (Instead, the behavior is as if the playlist entries were provided
+ directly to mpv command line or ``loadfile`` command.)
+
+``--access-references=<yes|no>``
+ Follow any references in the file being opened (default: yes). Disabling
+ this is helpful if the file is automatically scanned (e.g. thumbnail
+ generation). If the thumbnail scanner for example encounters a playlist
+ file, which contains network URLs, and the scanner should not open these,
+ enabling this option will prevent it. This option also disables ordered
+ chapters, mov reference files, opening of archives, and a number of other
+ features.
+
+ On older FFmpeg versions, this will not work in some cases. Some FFmpeg
+ demuxers might not respect this option.
+
+ This option does not prevent opening of paired subtitle files and such. Use
+ ``--autoload-files=no`` to prevent this.
+
+ This option does not always work if you open non-files (for example using
+ ``dvd://directory`` would open a whole bunch of files in the given
+ directory). Prefixing the filename with ``./`` if it doesn't start with
+ a ``/`` will avoid this.
+
+``--loop-playlist=<N|inf|force|no>``, ``--loop-playlist``
+ Loops playback ``N`` times. A value of ``1`` plays it one time (default),
+ ``2`` two times, etc. ``inf`` means forever. ``no`` is the same as ``1`` and
+ disables looping. If several files are specified on command line, the
+ entire playlist is looped. ``--loop-playlist`` is the same as
+ ``--loop-playlist=inf``.
+
+ The ``force`` mode is like ``inf``, but does not skip playlist entries
+ which have been marked as failing. This means the player might waste CPU
+ time trying to loop a file that doesn't exist. But it might be useful for
+ playing webradios under very bad network conditions.
+
+``--loop-file=<N|inf|no>``, ``--loop=<N|inf|no>``
+ Loop a single file N times. ``inf`` means forever, ``no`` means normal
+ playback. For compatibility, ``--loop-file`` and ``--loop-file=yes`` are
+ also accepted, and are the same as ``--loop-file=inf``.
+
+ The difference to ``--loop-playlist`` is that this doesn't loop the playlist,
+ just the file itself. If the playlist contains only a single file, the
+ difference between the two option is that this option performs a seek on
+ loop, instead of reloading the file.
+
+ .. note::
+
+ ``--loop-file`` counts the number of times it causes the player to
+ seek to the beginning of the file, not the number of full playthroughs. This
+ means ``--loop-file=1`` will end up playing the file twice. Contrast with
+ ``--loop-playlist``, which counts the number of full playthroughs.
+
+ ``--loop`` is an alias for this option.
+
+``--ab-loop-a=<time>``, ``--ab-loop-b=<time>``
+ Set loop points. If playback passes the ``b`` timestamp, it will seek to
+ the ``a`` timestamp. Seeking past the ``b`` point doesn't loop (this is
+ intentional).
+
+ If ``a`` is after ``b``, the behavior is as if the points were given in
+ the right order, and the player will seek to ``b`` after crossing through
+ ``a``. This is different from old behavior, where looping was disabled (and
+ as a bug, looped back to ``a`` on the end of the file).
+
+ If either options are set to ``no`` (or unset), looping is disabled. This
+ is different from old behavior, where an unset ``a`` implied the start of
+ the file, and an unset ``b`` the end of the file.
+
+ The loop-points can be adjusted at runtime with the corresponding
+ properties. See also ``ab-loop`` command.
+
+``--ab-loop-count=<N|inf>``
+ Run A-B loops only N times, then ignore the A-B loop points (default: inf).
+ Every finished loop iteration will decrement this option by 1 (unless it is
+ set to ``inf`` or 0). ``inf`` means that looping goes on forever. If this
+ option is set to 0, A-B looping is ignored, and even the ``ab-loop`` command
+ will not enable looping again (the command will show ``(disabled)`` on the
+ OSD message if both loop points are set, but ``ab-loop-count`` is 0).
+
+``--ordered-chapters``, ``--no-ordered-chapters``
+ Enabled by default.
+ Disable support for Matroska ordered chapters. mpv will not load or
+ search for video segments from other files, and will also ignore any
+ chapter order specified for the main file.
+
+``--ordered-chapters-files=<playlist-file>``
+ Loads the given file as playlist, and tries to use the files contained in
+ it as reference files when opening a Matroska file that uses ordered
+ chapters. This overrides the normal mechanism for loading referenced
+ files by scanning the same directory the main file is located in.
+
+ Useful for loading ordered chapter files that are not located on the local
+ filesystem, or if the referenced files are in different directories.
+
+ Note: a playlist can be as simple as a text file containing filenames
+ separated by newlines.
+
+``--chapters-file=<filename>``
+ Load chapters from this file, instead of using the chapter metadata found
+ in the main file.
+
+ This accepts a media file (like mkv) or even a pseudo-format like ffmetadata
+ and uses its chapters to replace the current file's chapters. This doesn't
+ work with OGM or XML chapters directly.
+
+``--sstep=<sec>``
+ Skip <sec> seconds after every frame.
+
+ .. note::
+
+ Without ``--hr-seek``, skipping will snap to keyframes.
+
+``--stop-playback-on-init-failure=<yes|no>``
+ Stop playback if either audio or video fails to initialize (default: no).
+ With ``no``, playback will continue in video-only or audio-only mode if one
+ of them fails. This doesn't affect playback of audio-only or video-only
+ files.
+
+``--play-direction=<forward|+|backward|->``
+ Control the playback direction (default: forward). Setting ``backward``
+ will attempt to play the file in reverse direction, with decreasing
+ playback time. If this is set on playback starts, playback will start from
+ the end of the file. If this is changed at during playback, a hr-seek will
+ be issued to change the direction.
+
+ ``+`` and ``-`` are aliases for ``forward`` and ``backward``.
+
+ The rest of this option description pertains to the ``backward`` mode.
+
+ .. note::
+
+ Backward playback is extremely fragile. It may not always work, is much
+ slower than forward playback, and breaks certain other features. How
+ well it works depends mainly on the file being played. Generally, it
+ will show good results (or results at all) only if the stars align.
+
+ mpv, as well as most media formats, were designed for forward playback
+ only. Backward playback is bolted on top of mpv, and tries to make a medium
+ effort to make backward playback work. Depending on your use-case, another
+ tool may work much better.
+
+ Backward playback is not exactly a 1st class feature. Implementation
+ tradeoffs were made, that are bad for backward playback, but in turn do not
+ cause disadvantages for normal playback. Various possible optimizations are
+ not implemented in order to keep the complexity down. Normally, a media
+ player is highly pipelined (future data is prepared in separate threads, so
+ it is available in realtime when the next stage needs it), but backward
+ playback will essentially stall the pipeline at various random points.
+
+ For example, for intra-only codecs are trivially backward playable, and
+ tools built around them may make efficient use of them (consider video
+ editors or camera viewers). mpv won't be efficient in this case, because it
+ uses its generic backward playback algorithm, that on top of it is not very
+ optimized.
+
+ If you just want to quickly go backward through the video and just show
+ "keyframes", just use forward playback, and hold down the left cursor key
+ (which on CLI with default config sends many small relative seek commands).
+
+ The implementation consists of mostly 3 parts:
+
+ - Backward demuxing. This relies on the demuxer cache, so the demuxer cache
+ should (or must, didn't test it) be enabled, and its size will affect
+ performance. If the cache is too small or too large, quadratic runtime
+ behavior may result.
+
+ - Backward decoding. The decoder library used (libavcodec) does not support
+ this. It is emulated by feeding bits of data in forward, putting the
+ result in a queue, returning the queue data to the VO in reverse, and
+ then starting over at an earlier position. This can require buffering an
+ extreme amount of decoded data, and also completely breaks pipelining.
+
+ - Backward output. This is relatively simple, because the decoder returns
+ the frames in the needed order. However, this may cause various problems
+ because filters see audio and video going backward.
+
+ Known problems:
+
+ - It's fragile. If anything doesn't work, random non-useful behavior may
+ occur. In simple cases, the player will just play nonsense and artifacts.
+ In other cases, it may get stuck or heat the CPU. (Exceeding memory usage
+ significantly beyond the user-set limits would be a bug, though.)
+
+ - Performance and resource usage isn't good. In part this is inherent to
+ backward playback of normal media formats, and in parts due to
+ implementation choices and tradeoffs.
+
+ - This is extremely reliant on good demuxer behavior. Although backward
+ demuxing requires no special demuxer support, it is required that the
+ demuxer performs seeks reliably, fulfills some specific requirements
+ about packet metadata, and has deterministic behavior.
+
+ - Starting playback exactly from the end may or may not work, depending on
+ seeking behavior and file duration detection.
+
+ - Some container formats, audio, and video codecs are not supported due to
+ their behavior. There is no list, and the player usually does not detect
+ them. Certain live streams (including TV captures) may exhibit problems
+ in particular, as well as some lossy audio codecs. h264 intra-refresh is
+ known not to work due to problems with libavcodec. WAV and some other raw
+ audio formats tend to have problems - there are hacks for dealing with
+ them, which may or may not work.
+
+ - Backward demuxing of subtitles is not supported. Subtitle display still
+ works for some external text subtitle formats. (These are fully read into
+ memory, and only backward display is needed.) Text subtitles that are
+ cached in the subtitle renderer also have a chance to be displayed
+ correctly.
+
+ - Some features dealing with playback of broken or hard to deal with files
+ will not work fully (such as timestamp correction).
+
+ - If demuxer low level seeks (i.e. seeking the actual demuxer instead of
+ just within the demuxer cache) are performed by backward playback, the
+ created seek ranges may not join, because not enough overlap is achieved.
+
+ - Trying to use this with hardware video decoding will probably exhaust all
+ your GPU memory and then crash a thing or two. Or it will fail because
+ ``--hwdec-extra-frames`` will certainly be set too low.
+
+ - Stream recording is broken. ``--stream-record`` may keep working if you
+ backward play within a cached region only.
+
+ - Relative seeks may behave weird. Small seeks backward (towards smaller
+ time, i.e. ``seek -1``) may not really seek properly, and audio will
+ remain muted for a while. Using hr-seek is recommended, which should have
+ none of these problems.
+
+ - Some things are just weird. For example, while seek commands manipulate
+ playback time in the expected way (provided they work correctly), the
+ framestep commands are transposed. Backstepping will perform very
+ expensive work to step forward by 1 frame.
+
+ Tuning:
+
+ - Remove all ``--vf``/``--af`` filters you have set. Disable hardware
+ decoding. Disable functions like SPDIF passthrough.
+
+ - Increasing ``--video-reversal-buffer`` might help if reversal queue
+ overflow is reported, which may happen in high bitrate video, or video
+ with large GOP. Hardware decoding mostly ignores this, and you need to
+ increase ``--hwdec-extra-frames`` instead (until you get playback without
+ logged errors).
+
+ - The demuxer cache is essential for backward demuxing. Make sure to set
+ ``--cache=yes``. The cache size might matter. If it's too small, a queue
+ overflow will be logged, and backward playback cannot continue, or it
+ performs too many low level seeks. If it's too large, implementation
+ tradeoffs may cause general performance issues. Use
+ ``--demuxer-max-bytes`` to potentially increase the amount of packets the
+ demuxer layer can queue for reverse demuxing (basically it's the
+ ``--video-reversal-buffer`` equivalent for the demuxer layer).
+
+ - Setting ``--vd-queue-enable=yes`` can help a lot to make playback smooth
+ (once it works).
+
+ - ``--demuxer-backward-playback-step`` also factors into how many seeks may
+ be performed, and whether backward demuxing could break due to queue
+ overflow. If it's set too high, the backstep operation needs to search
+ through more packets all the time, even if the cache is large enough.
+
+ - Setting ``--demuxer-cache-wait`` may be useful to cache the entire file
+ into the demuxer cache. Set ``--demuxer-max-bytes`` to a large size to
+ make sure it can read the entire cache; ``--demuxer-max-back-bytes``
+ should also be set to a large size to prevent that tries to trim the
+ cache.
+
+ - If audio artifacts are audible, even though the AO does not underrun,
+ increasing ``--audio-backward-overlap`` might help in some cases.
+
+``--video-reversal-buffer=<bytesize>``, ``--audio-reversal-buffer=<bytesize>``
+ For backward decoding. Backward decoding decodes forward in steps, and then
+ reverses the decoder output. These options control the approximate maximum
+ amount of bytes that can be buffered. The main use of this is to avoid
+ unbounded resource usage; during normal backward playback, it's not supposed
+ to hit the limit, and if it does, it will drop frames and complain about it.
+
+ Use this option if you get reversal queue overflow errors during backward
+ playback. Increase the size until the warning disappears. Usually, the video
+ buffer will overflow first, especially if it's high resolution video.
+
+ This does not work correctly if video hardware decoding is used. The video
+ frame size will not include the referenced GPU and driver memory. Some
+ hardware decoders may also be limited by ``--hwdec-extra-frames``.
+
+ How large the queue size needs to be depends entirely on the way the media
+ was encoded. Audio typically requires a very small buffer, while video can
+ require excessively large buffers.
+
+ (Technically, this allows the last frame to exceed the limit. Also, this
+ does not account for other buffered frames, such as inside the decoder or
+ the video output.)
+
+ This does not affect demuxer cache behavior at all.
+
+ See ``--list-options`` for defaults and value range. ``<bytesize>`` options
+ accept suffixes such as ``KiB`` and ``MiB``.
+
+``--video-backward-overlap=<auto|number>``, ``--audio-backward-overlap=<auto|number>``
+ Number of overlapping keyframe ranges to use for backward decoding (default:
+ auto) ("keyframe" to be understood as in the mpv/ffmpeg specific meaning).
+ Backward decoding works by forward decoding in small steps. Some codecs
+ cannot restart decoding from any packet (even if it's marked as seek point),
+ which becomes noticeable with backward decoding (in theory this is a problem
+ with seeking too, but ``--hr-seek-demuxer-offset`` can fix it for seeking).
+ In particular, MDCT based audio codecs are affected.
+
+ The solution is to feed a previous packet to the decoder each time, and then
+ discard the output. This option controls how many packets to feed. The
+ ``auto`` choice is currently hardcoded to 0 for video, and uses 1 for lossy
+ audio, 0 for lossless audio. For some specific lossy audio codecs, this is
+ set to 2.
+
+ ``--video-backward-overlap`` can potentially handle intra-refresh video,
+ depending on the exact conditions. You may have to use the
+ ``--vd-lavc-show-all`` option as well.
+
+``--video-backward-batch=<number>``, ``--audio-backward-batch=<number>``
+ Number of keyframe ranges to decode at once when backward decoding (default:
+ 1 for video, 10 for audio). Another pointless tuning parameter nobody should
+ use. This should affect performance only. In theory, setting a number higher
+ than 1 for audio will reduce overhead due to less frequent backstep
+ operations and less redundant decoding work due to fewer decoded overlap
+ frames (see ``--audio-backward-overlap``). On the other hand, it requires
+ a larger reversal buffer, and could make playback less smooth due to
+ breaking pipelining (e.g. by decoding a lot, and then doing nothing for a
+ while).
+
+ It probably never makes sense to set ``--video-backward-batch``. But in
+ theory, it could help with intra-only video codecs by reducing backstep
+ operations.
+
+``--demuxer-backward-playback-step=<seconds>``
+ Number of seconds the demuxer should seek back to get new packets during
+ backward playback (default: 60). This is useful for tuning backward
+ playback, see ``--play-direction`` for details.
+
+ Setting this to a very low value or 0 may make the player think seeking is
+ broken, or may make it perform multiple seeks.
+
+ Setting this to a high value may lead to quadratic runtime behavior.
+
+Program Behavior
+----------------
+
+``--help``, ``--h``
+ Show short summary of options.
+
+ You can also pass a string to this option, which will list all top-level
+ options which contain the string in the name, e.g. ``--h=scale`` for all
+ options that contain the word ``scale``. The special string ``*`` lists
+ all top-level options.
+
+``-v``
+ Increment verbosity level, one level for each ``-v`` found on the command
+ line.
+
+``--version, -V``
+ Print version string and exit.
+
+``--no-config``
+ Do not load default configuration or any user files. This prevents loading of
+ both the user-level and system-wide ``mpv.conf`` and ``input.conf`` files. Other
+ user files are blocked as well, such as resume playback files and cache files.
+ This option only takes effect when used as a command line flag.
+
+ .. note::
+
+ Files explicitly requested by command line options, like
+ ``--include`` or ``--use-filedir-conf``, will still be loaded.
+
+ See also: ``--config-dir``.
+
+``--list-options``
+ Prints all available options.
+
+``--list-properties``
+ Print a list of the available properties.
+
+``--list-protocols``
+ Print a list of the supported protocols.
+
+``--log-file=<path>``
+ Opens the given path for writing, and print log messages to it. Existing
+ files will be truncated. The log level is at least ``-v -v``, but
+ can be raised via ``--msg-level`` (the option cannot lower it below the
+ forced minimum log level).
+
+ A special case is the macOS bundle, it will create a log file at
+ ``~/Library/Logs/mpv.log`` by default.
+
+``--config-dir=<path>``
+ Force a different configuration directory. If this is set, the given
+ directory is used to load configuration files, and all other configuration
+ directories are ignored. This means the global mpv configuration directory
+ as well as per-user directories are ignored, and overrides through
+ environment variables (``MPV_HOME``) are also ignored.
+
+ Note that the cache and state paths (``~~/cache``, ``~~/state``) are not
+ considered "configuration" and keep their auto-detection logic.
+
+ Note that the ``--no-config`` option takes precedence over this option.
+
+``--dump-stats=<filename>``
+ Write certain statistics to the given file. The file is truncated on
+ opening. The file will contain raw samples, each with a timestamp. To
+ make this file into a readable, the script ``TOOLS/stats-conv.py`` can be
+ used (which currently displays it as a graph).
+
+ This option is useful for debugging only.
+
+``--idle=<no|yes|once>``
+ Makes mpv wait idly instead of quitting when there is no file to play.
+ Mostly useful in input mode, where mpv can be controlled through input
+ commands. (Default: ``no``)
+
+ ``once`` will only idle at start and let the player close once the
+ first playlist has finished playing back.
+
+``--include=<configuration-file>``
+ Specify configuration file to be parsed after the default ones.
+
+``--load-scripts=<yes|no>``
+ If set to ``no``, don't auto-load scripts from the ``scripts``
+ configuration subdirectory (usually ``~/.config/mpv/scripts/``).
+ (Default: ``yes``)
+
+``--script=<filename>``, ``--scripts=file1.lua:file2.lua:...``
+ Load a Lua script. The second option allows you to load multiple scripts by
+ separating them with the path separator (``:`` on Unix, ``;`` on Windows).
+
+ ``--scripts`` is a path list option. See `List Options`_ for details.
+
+``--script-opts=key1=value1,key2=value2,...``
+ Set options for scripts. A script can query an option by key. If an
+ option is used and what semantics the option value has depends entirely on
+ the loaded scripts. Values not claimed by any scripts are ignored.
+
+ This is a key/value list option. See `List Options`_ for details.
+
+``--merge-files``
+ Pretend that all files passed to mpv are concatenated into a single, big
+ file. This uses timeline/EDL support internally.
+
+``--profile=<profile1,profile2,...>``
+ Use the given profile(s), ``--profile=help`` displays a list of the
+ defined profiles.
+
+``--reset-on-next-file=<all|option1,option2,...>``
+ Normally, mpv will try to keep all settings when playing the next file on
+ the playlist, even if they were changed by the user during playback. (This
+ behavior is the opposite of MPlayer's, which tries to reset all settings
+ when starting next file.)
+
+ Default: Do not reset anything.
+
+ This can be changed with this option. It accepts a list of options, and
+ mpv will reset the value of these options on playback start to the initial
+ value. The initial value is either the default value, or as set by the
+ config file or command line.
+
+ The special name ``all`` resets as many options as possible.
+
+ This is a string list option. See `List Options`_ for details.
+
+ .. admonition:: Examples
+
+ - ``--reset-on-next-file=pause``
+ Reset pause mode when switching to the next file.
+ - ``--reset-on-next-file=fullscreen,speed``
+ Reset fullscreen and playback speed settings if they were changed
+ during playback.
+ - ``--reset-on-next-file=all``
+ Try to reset all settings that were changed during playback.
+
+``--show-profile=<profile>``
+ Show the description and content of a profile. Lists all profiles if no
+ parameter is provided.
+
+``--use-filedir-conf``
+ Look for a file-specific configuration file in the same directory as the
+ file that is being played. See `File-specific Configuration Files`_.
+
+ .. warning::
+
+ May be dangerous if playing from untrusted media.
+
+``--ytdl``, ``--no-ytdl``
+ Enable the youtube-dl hook-script. It will look at the input URL, and will
+ play the video located on the website. This works with many streaming sites,
+ not just the one that the script is named after. This requires a recent
+ version of youtube-dl to be installed on the system. (Enabled by default.)
+
+ If the script can't do anything with an URL, it will do nothing.
+
+ This accepts a set of options, which can be passed to it with the
+ ``--script-opts`` option (using ``ytdl_hook-`` as prefix):
+
+ ``try_ytdl_first=<yes|no>``
+ If 'yes' will try parsing the URL with youtube-dl first, instead of the
+ default where it's only after mpv failed to open it. This mostly depends
+ on whether most of your URLs need youtube-dl parsing.
+
+ ``exclude=<URL1|URL2|...``
+ A ``|``-separated list of URL patterns which mpv should not use with
+ youtube-dl. The patterns are matched after the ``http(s)://`` part of
+ the URL.
+
+ ``^`` matches the beginning of the URL, ``$`` matches its end, and you
+ should use ``%`` before any of the characters ``^$()%|,.[]*+-?`` to
+ match that character.
+
+ .. admonition:: Examples
+
+ - ``--script-opts=ytdl_hook-exclude='^youtube%.com'``
+ will exclude any URL that starts with ``http://youtube.com`` or
+ ``https://youtube.com``.
+ - ``--script-opts=ytdl_hook-exclude='%.mkv$|%.mp4$'``
+ will exclude any URL that ends with ``.mkv`` or ``.mp4``.
+
+ See more lua patterns here: https://www.lua.org/manual/5.1/manual.html#5.4.1
+
+ ``all_formats=<yes|no>``
+ If 'yes' will attempt to add all formats found reported by youtube-dl
+ (default: no). Each format is added as a separate track. In addition,
+ they are delay-loaded, and actually opened only when a track is selected
+ (this should keep load times as low as without this option).
+
+ It adds average bitrate metadata, if available, which means you can use
+ ``--hls-bitrate`` to decide which track to select. (HLS used to be the
+ only format whose alternative quality streams were exposed in a similar
+ way, thus the option name.)
+
+ Tracks which represent formats that were selected by youtube-dl as
+ default will have the default flag set. This means mpv should generally
+ still select formats chosen with ``--ytdl-format`` by default.
+
+ Although this mechanism makes it possible to switch streams at runtime,
+ it's not suitable for this purpose for various technical reasons. (It's
+ slow, which can't be really fixed.) In general, this option is not
+ useful, and was only added to show that it's possible.
+
+ There are two cases that must be considered when doing quality/bandwidth
+ selection:
+
+ 1. Completely separate audio and video streams (DASH-like). Each of
+ these streams contain either only audio or video, so you can
+ mix and combine audio/video bandwidths without restriction. This
+ intuitively matches best with the concept of selecting quality
+ by track (what ``all_formats`` is supposed to do).
+
+ 2. Separate sets of muxed audio and video streams. Each version of
+ the media contains both an audio and video stream, and they are
+ interleaved. In order not to waste bandwidth, you should only
+ select one of these versions (if, for example, you select an
+ audio stream, then video will be downloaded, even if you selected
+ video from a different stream).
+
+ mpv will still represent them as separate tracks, but will set
+ the title of each track to ``muxed-N``, where ``N`` is replaced
+ with the youtube-dl format ID of the originating stream.
+
+ Some sites will mix 1. and 2., but we assume that they do so for
+ compatibility reasons, and there is no reason to use them at all.
+
+ ``force_all_formats=<yes|no>``
+ If set to 'yes', and ``all_formats`` is also set to 'yes', this will
+ try to represent all youtube-dl reported formats as tracks, even if
+ mpv would normally use the direct URL reported by it (default: yes).
+
+ It appears this normally makes a difference if youtube-dl works on a
+ master HLS playlist.
+
+ If this is set to 'no', this specific kind of stream is treated like
+ ``all_formats`` is set to 'no', and the stream selection as done by
+ youtube-dl (via ``--ytdl-format``) is used.
+
+ ``thumbnails=<all|best|none>``
+ Add thumbnails as video tracks (default: none).
+
+ Thumbnails get downloaded when they are added as tracks, so 'all' can
+ have a noticable impact on how long it takes to open the video when
+ there are a lot of thumbnails.
+
+ ``use_manifests=<yes|no>``
+ Make mpv use the master manifest URL for formats like HLS and DASH,
+ if available, allowing for video/audio selection in runtime (default:
+ no). It's disabled ("no") by default for performance reasons.
+
+ ``ytdl_path=youtube-dl``
+ Configure paths to youtube-dl's executable or a compatible fork's. The
+ paths should be separated by : on Unix and ; on Windows. mpv looks in
+ order for the configured paths in PATH and in mpv's config directory.
+ The defaults are "yt-dlp", "yt-dlp_x86" and "youtube-dl". On Windows
+ the suffix extension is not necessary, but only ".exe" is acceptable.
+
+ .. admonition:: Why do the option names mix ``_`` and ``-``?
+
+ I have no idea.
+
+``--ytdl-format=<ytdl|best|worst|mp4|webm|...>``
+ Video format/quality that is directly passed to youtube-dl. The possible
+ values are specific to the website and the video, for a given url the
+ available formats can be found with the command
+ ``youtube-dl --list-formats URL``. See youtube-dl's documentation for
+ available aliases.
+ (Default: ``bestvideo+bestaudio/best``)
+
+ The ``ytdl`` value does not pass a ``--format`` option to youtube-dl at all,
+ and thus does not override its default. Note that sometimes youtube-dl
+ returns a format that mpv cannot use, and in these cases the mpv default
+ may work better.
+
+``--ytdl-raw-options=<key>=<value>[,<key>=<value>[,...]]``
+ Pass arbitrary options to youtube-dl. Parameter and argument should be
+ passed as a key-value pair. Options without argument must include ``=``.
+
+ There is no sanity checking so it's possible to break things (i.e.
+ passing invalid parameters to youtube-dl).
+
+ A proxy URL can be passed for youtube-dl to use it in parsing the website.
+ This is useful for geo-restricted URLs. After youtube-dl parsing, some
+ URLs also require a proxy for playback, so this can pass that proxy
+ information to mpv. Take note that SOCKS proxies aren't supported and
+ https URLs also bypass the proxy. This is a limitation in FFmpeg.
+
+ This is a key/value list option. See `List Options`_ for details.
+
+ .. admonition:: Example
+
+ - ``--ytdl-raw-options=username=user,password=pass``
+ - ``--ytdl-raw-options=force-ipv6=``
+ - ``--ytdl-raw-options=proxy=[http://127.0.0.1:3128]``
+ - ``--ytdl-raw-options-append=proxy=http://127.0.0.1:3128``
+
+``--js-memory-report=<yes|no>``
+ Enable memory reporting for javascript scripts in the stats overlay.
+ This is disabled by default because it has an overhead and increases
+ memory usage. This option will only work if it is enabled before mpv is
+ started.
+
+``--load-stats-overlay=<yes|no>``
+ Enable the builtin script that shows useful playback information on a key
+ binding (default: yes). By default, the ``i`` key is used (``I`` to make
+ the overlay permanent).
+
+``--load-osd-console=<yes|no>``
+ Enable the built-in script that shows a console on a key binding and lets
+ you enter commands (default: yes). The ````` key is used to show the
+ console by default, and ``ESC`` to hide it again.
+
+``--load-auto-profiles=<yes|no|auto>``
+ Enable the builtin script that does auto profiles (default: auto). See
+ `Conditional auto profiles`_ for details. ``auto`` will load the script,
+ but immediately unload it if there are no conditional profiles.
+
+``--player-operation-mode=<cplayer|pseudo-gui>``
+ For enabling "pseudo GUI mode", which means that the defaults for some
+ options are changed. This option should not normally be used directly, but
+ only by mpv internally, or mpv-provided scripts, config files, or .desktop
+ files. See `PSEUDO GUI MODE`_ for details.
+
+Watch Later
+-----------
+
+``--save-position-on-quit``
+ Always save the current playback position on quit. When this file is
+ played again later, the player will seek to the old playback position on
+ start. This does not happen if playback of a file is stopped in any other
+ way than quitting. For example, going to the next file in the playlist
+ will not save the position, and start playback at beginning the next time
+ the file is played.
+
+ This behavior is disabled by default, but is always available when quitting
+ the player with Shift+Q.
+
+ See `RESUMING PLAYBACK`_.
+
+``--watch-later-dir=<path>``
+ The directory in which to store the "watch later" temporary files.
+
+ ``--watch-later-directory`` is an alias for ``--watch-later-dir``.
+
+ If this option is unset, the files will be stored in a subdirectory
+ named "watch_later" underneath the local state directory
+ (usually ``~/.local/state/mpv/``).
+
+``--no-resume-playback``
+ Do not restore playback position from the ``watch_later`` configuration
+ subdirectory (usually ``~/.config/mpv/watch_later/``).
+
+``--resume-playback-check-mtime``
+ Only restore the playback position from the ``watch_later`` configuration
+ subdirectory (usually ``~/.config/mpv/watch_later/``) if the file's
+ modification time is the same as at the time of saving. This may prevent
+ skipping forward in files with the same name which have different content.
+ (Default: ``no``)
+
+``--watch-later-options=option1,option2,...``
+ The options that are saved in "watch later" files if they have been changed
+ since when mpv started. These values will be restored the next time the
+ files are played. Note that the playback position is saved via the ``start``
+ option.
+
+ When removing options, existing watch later data won't be modified and will
+ still be applied fully, but new watch later data won't contain these
+ options.
+
+ See ``--help=watch-later-options`` for the list of the properties that are
+ restored by default.
+
+ This is a string list option. See `List Options`_ for details.
+
+ .. admonition:: Examples
+
+ - ``--watch-later-options-remove=sid``
+ The subtitle track selection will not be restored.
+ - ``--watch-later-options-remove=volume``
+ ``--watch-later-options-remove=mute``
+ The volume and mute state won't be saved to watch later files.
+ - ``--watch-later-options=start``
+ No option will be saved to watch later files, except the playback
+ position.
+
+``--write-filename-in-watch-later-config``
+ Prepend the watch later config files with the name of the file they refer
+ to. This is simply written as comment on the top of the file.
+
+ .. warning::
+
+ This option may expose privacy-sensitive information and is thus
+ disabled by default.
+
+``--ignore-path-in-watch-later-config``
+ Ignore path (i.e. use filename only) when using watch later feature.
+ (Default: disabled)
+
+Video
+-----
+
+``--vo=<driver>``
+ Specify the video output backend to be used. See `VIDEO OUTPUT DRIVERS`_ for
+ details and descriptions of available drivers.
+
+``--vd=<...>``
+ Specify a priority list of video decoders to be used, according to their
+ family and name. See ``--ad`` for further details. Both of these options
+ use the same syntax and semantics; the only difference is that they
+ operate on different codec lists.
+
+ .. note::
+
+ See ``--vd=help`` for a full list of available decoders.
+
+``--vf=<filter1[=parameter1:parameter2:...],filter2,...>``
+ Specify a list of video filters to apply to the video stream. See
+ `VIDEO FILTERS`_ for details and descriptions of the available filters.
+ The option variants ``--vf-add``, ``--vf-pre``, and ``--vf-clr`` exist
+ to modify a previously specified list, but you should not need these for
+ typical use.
+
+``--untimed``
+ Do not sleep when outputting video frames. Useful for benchmarks when used
+ with ``--no-audio.``
+
+``--framedrop=<mode>``
+ Skip displaying some frames to maintain A/V sync on slow systems, or
+ playing high framerate video on video outputs that have an upper framerate
+ limit.
+
+ The argument selects the drop methods, and can be one of the following:
+
+ <no>
+ Disable any frame dropping. Not recommended, for testing only.
+ <vo>
+ Drop late frames on video output (default). This still decodes and
+ filters all frames, but doesn't render them on the VO. Drops are
+ indicated in the terminal status line as ``Dropped:`` field.
+
+ In audio sync. mode, this drops frames that are outdated at the time of
+ display. If the decoder is too slow, in theory all frames would have to
+ be dropped (because all frames are too late) - to avoid this, frame
+ dropping stops if the effective framerate is below 10 FPS.
+
+ In display-sync. modes (see ``--video-sync``), this affects only how
+ A/V drops or repeats frames. If this mode is disabled, A/V desync will
+ in theory not affect video scheduling anymore (much like the
+ ``display-resample-desync`` mode). However, even if disabled, frames
+ will still be skipped (i.e. dropped) according to the ratio between
+ video and display frequencies.
+
+ This is the recommended mode, and the default.
+ <decoder>
+ Old, decoder-based framedrop mode. (This is the same as ``--framedrop=yes``
+ in mpv 0.5.x and before.) This tells the decoder to skip frames (unless
+ they are needed to decode future frames). May help with slow systems,
+ but can produce unwatchable choppy output, or even freeze the display
+ completely.
+
+ This uses a heuristic which may not make sense, and in general cannot
+ achieve good results, because the decoder's frame dropping cannot be
+ controlled in a predictable manner. Not recommended.
+
+ Even if you want to use this, prefer ``decoder+vo`` for better results.
+
+ The ``--vd-lavc-framedrop`` option controls what frames to drop.
+ <decoder+vo>
+ Enable both modes. Not recommended. Better than just ``decoder`` mode.
+
+ .. note::
+
+ ``--vo=vdpau`` has its own code for the ``vo`` framedrop mode. Slight
+ differences to other VOs are possible.
+
+``--video-latency-hacks=<yes|no>``
+ Enable some things which tend to reduce video latency by 1 or 2 frames
+ (default: no). Note that this option might be removed without notice once
+ the player's timing code does not inherently need to do these things
+ anymore. Using this option is known to break other options such as
+ interpolation, so it is not recommended to enable this.
+
+ This does:
+
+ - Use the demuxer reported FPS for frame dropping. This avoids the
+ player needing to decode 1 frame in advance, lowering total latency in
+ effect. This also means that if the demuxer reported FPS is wrong, or
+ the video filter chain changes FPS (e.g. deinterlacing), then it could
+ drop too many or not enough frames.
+ - Disable waiting for the first video frame. Normally the player waits for
+ the first video frame to be fully rendered before starting playback
+ properly. Some VOs will lazily initialize stuff when rendering the first
+ frame, so if this is not done, there is some likeliness that the VO has
+ to drop some frames if rendering the first frame takes longer than needed.
+
+``--display-fps-override=<fps>``
+ Set the display FPS used with the ``--video-sync=display-*`` modes. By
+ default, a detected value is used. Keep in mind that setting an incorrect
+ value (even if slightly incorrect) can ruin video playback. On multi-monitor
+ systems, there is a chance that the detected value is from the wrong
+ monitor.
+
+ Set this option only if you have reason to believe the automatically
+ determined value is wrong.
+
+``--hwdec=<api1,api2,...|no|auto|auto-safe|auto-copy>``
+ Specify the hardware video decoding API that should be used if possible.
+ Whether hardware decoding is actually done depends on the video codec. If
+ hardware decoding is not possible, mpv will fall back on software decoding.
+
+ Hardware decoding is not enabled by default, to keep the out-of-the-box
+ configuration as reliable as possible. However, when using modern hardware,
+ hardware video decoding should work correctly, offering reduced CPU usage,
+ and possibly lower power consumption. On older systems, it may be necessary
+ to use hardware decoding due to insufficient CPU resources; and even on
+ modern systems, sufficiently complex content (eg: 4K60 AV1) may require it.
+
+ .. note::
+
+ Use the ``Ctrl+h`` shortcut to toggle hardware decoding at runtime. It
+ toggles this option between ``auto-safe`` and ``no``.
+
+ If you decide you want to use hardware decoding by default, the general
+ recommendation is to try out decoding with the command line option, and
+ prove to yourself that it works as desired for the content you care
+ about. After that, you can add it to your config file.
+
+ When testing, you should start by using ``hwdec=auto-safe`` as it will
+ limit itself to choosing from hwdecs that are actively supported by the
+ development team. If that doesn't result in working hardware decoding,
+ you can try ``hwdec=auto`` to have it attempt to load every possible
+ hwdec, but if ``auto-safe`` didn't work, you will probably need to know
+ exactly which hwdec matches your hardware and read up on that entry
+ below.
+
+ If ``auto-safe`` or ``auto`` produced the desired results, we recommend
+ just sticking with that and only setting a specific hwdec in your config
+ file if it is really necessary.
+
+ If you use the Ubuntu package, keep in mind that their
+ ``/etc/mpv/mpv.conf`` contains ``hwdec=vaapi``, which is less than
+ ideal as it may not be the right choice for your system, and it may end
+ up using an inefficient wrapper library under the covers. We recommend
+ removing this line or deleting the file altogether.
+
+ .. note::
+
+ Even if enabled, hardware decoding is still only white-listed for some
+ codecs. See ``--hwdec-codecs`` to enable hardware decoding in more cases.
+
+ .. admonition:: Which method to choose?
+
+ - If you only want to enable hardware decoding at runtime, don't set the
+ parameter, or put ``hwdec=no`` into your ``mpv.conf`` (relevant on
+ distros which force-enable it by default, such as on Ubuntu). Use the
+ ``Ctrl+h`` default binding to enable it at runtime.
+ - If you're not sure, but want hardware decoding always enabled by
+ default, put ``hwdec=auto-safe`` into your ``mpv.conf``, and
+ acknowledge that this may cause problems.
+ - If you want to test available hardware decoding methods, pass
+ ``--hwdec=auto --hwdec-codecs=all`` and look at the terminal output.
+ - If you're a developer, or want to perform elaborate tests, you may
+ need any of the other possible option values.
+
+ This option accepts a comma delimited list of ``api`` types, along with certain
+ special values:
+
+ :no: always use software decoding (default)
+ :auto-safe: enable any whitelisted hw decoder (see below)
+ :auto: forcibly enable any hw decoder found (see below)
+ :yes: exactly the same as ``auto-safe``
+ :auto-copy: enable best hw decoder with copy-back (see below)
+
+ .. note::
+
+ Special values can be mixed with api names. eg: ``vaapi,auto`` will try
+ and use the ``vaapi`` hwdec, and if that fails, will run through the
+ normal ``auto`` logic.
+
+ Actively supported hwdecs:
+
+ :d3d11va: requires ``--vo=gpu`` with ``--gpu-context=d3d11`` or
+ ``--gpu-context=angle`` (Windows 8+ only)
+ :d3d11va-copy: copies video back to system RAM (Windows 8+ only)
+ :videotoolbox: requires ``--vo=gpu`` (macOS 10.8 and up),
+ or ``--vo=libmpv`` (iOS 9.0 and up)
+ :videotoolbox-copy: copies video back into system RAM (macOS 10.8 or iOS 9.0 and up)
+ :vaapi: requires ``--vo=gpu``, ``--vo=vaapi`` or ``--vo=dmabuf-wayland`` (Linux only)
+ :vaapi-copy: copies video back into system RAM (Linux with some GPUs only)
+ :nvdec: requires ``--vo=gpu`` (Any platform CUDA is available)
+ :nvdec-copy: copies video back to system RAM (Any platform CUDA is available)
+ :drm: requires ``--vo=gpu`` (Linux only)
+ :drm-copy: copies video back to system RAM (Linux only)
+ :vulkan: requires ``--vo=gpu-next`` (Any platform with Vulkan Video Decoding)
+ :vulkan-copy: copies video back to system RAM (Any platform with Vulkan Video Decoding)
+
+ Other hwdecs (only use if you know you have to):
+
+ :dxva2: requires ``--vo=gpu`` with ``--gpu-context=d3d11``,
+ ``--gpu-context=angle`` or ``--gpu-context=dxinterop``
+ (Windows only)
+ :dxva2-copy: copies video back to system RAM (Windows only)
+ :vdpau: requires ``--vo=gpu`` with ``--gpu-context=x11``, or
+ ``--vo=vdpau`` (Linux only)
+ :vdpau-copy: copies video back into system RAM (Linux with some GPUs only)
+ :mediacodec: requires ``--vo=gpu --gpu-context=android``
+ or ``--vo=mediacodec_embed`` (Android only)
+ :mediacodec-copy: copies video back to system RAM (Android only)
+ :mmal: requires ``--vo=gpu`` (Raspberry Pi only - default if available)
+ :mmal-copy: copies video back to system RAM (Raspberry Pi only)
+ :cuda: requires ``--vo=gpu`` (Any platform CUDA is available)
+ :cuda-copy: copies video back to system RAM (Any platform CUDA is available)
+ :crystalhd: copies video back to system RAM (Any platform supported by hardware)
+ :rkmpp: requires ``--vo=gpu`` (some RockChip devices only)
+
+ ``auto`` tries to automatically enable hardware decoding using the first
+ available method. This still depends what VO you are using. For example,
+ if you are not using ``--vo=gpu`` or ``--vo=vdpau``, vdpau decoding will
+ never be enabled. Also note that if the first found method doesn't actually
+ work, it will always fall back to software decoding, instead of trying the
+ next method (might matter on some Linux systems).
+
+ ``auto-safe`` is similar to ``auto``, but allows only whitelisted methods
+ that are considered "safe". This is supposed to be a reasonable way to
+ enable hardware decdoding by default in a config file (even though you
+ shouldn't do that anyway; prefer runtime enabling with ``Ctrl+h``). Unlike
+ ``auto``, this will not try to enable unknown or known-to-be-bad methods. In
+ addition, this may disable hardware decoding in other situations when it's
+ known to cause problems, but currently this mechanism is quite primitive.
+ (As an example for something that still causes problems: certain
+ combinations of HEVC and Intel chips on Windows tend to cause mpv to crash,
+ most likely due to driver bugs.)
+
+ ``auto-copy-safe`` selects the union of methods selected with ``auto-safe``
+ and ``auto-copy``.
+
+ ``auto-copy`` selects only modes that copy the video data back to system
+ memory after decoding. This selects modes like ``vaapi-copy`` (and so on).
+ If none of these work, hardware decoding is disabled. This mode is usually
+ guaranteed to incur no additional quality loss compared to software
+ decoding (assuming modern codecs and an error free video stream), and will
+ allow CPU processing with video filters. This mode works with all video
+ filters and VOs.
+
+ Because these copy the decoded video back to system RAM, they're often less
+ efficient than the direct modes, and may not help too much over software
+ decoding if you are short on CPU resources.
+
+ .. note::
+
+ Most non-copy methods only work with the OpenGL GPU backend. Currently,
+ only the ``vaapi``, ``nvdec``, ``cuda`` and ``vulkan`` methods work with
+ Vulkan.
+
+ The ``vaapi`` mode, if used with ``--vo=gpu``, requires Mesa 11, and most
+ likely works with Intel and AMD GPUs only. It also requires the opengl EGL
+ backend.
+
+ ``nvdec`` and ``nvdec-copy`` are the newest, and recommended method to do
+ hardware decoding on Nvidia GPUs.
+
+ ``cuda`` and ``cuda-copy`` are an older implementation of hardware decoding
+ on Nvidia GPUs that uses Nvidia's bitstream parsers rather than FFmpeg's.
+ This can lead to feature deficiencies, such as incorrect playback of HDR
+ content, and ``nvdec``/``nvdec-copy`` should always be preferred unless you
+ specifically need Nvidia's deinterlacing algorithms. To use this
+ deinterlacing you must pass the option:
+ ``vd-lavc-o=deint=[weave|bob|adaptive]``.
+ Pass ``weave`` (or leave the option unset) to not attempt any
+ deinterlacing.
+
+ .. admonition:: Quality reduction with hardware decoding
+
+ In theory, hardware decoding does not reduce video quality (at least
+ for the codecs h264 and HEVC). However, due to restrictions in video
+ output APIs, as well as bugs in the actual hardware decoders, there can
+ be some loss, or even blatantly incorrect results. This has largely
+ ceased to be a problem with modern hardware, but there is a lot of
+ hardware out there, so caveat emptor. Known problems are discussed
+ below, but the list cannot be considered exhaustive, as even hwdecs that
+ work well on certain hardware generations may be problematic on other
+ ones.
+
+ In some cases, RGB conversion is forced, which means the RGB conversion
+ is performed by the hardware decoding API, instead of the shaders
+ used by ``--vo=gpu``. This means certain colorspaces may not display
+ correctly, and certain filtering (such as debanding) cannot be applied
+ in an ideal way. This will also usually force the use of low quality
+ chroma scalers instead of the one specified by ``--cscale``. In other
+ cases, hardware decoding can also reduce the bit depth of the decoded
+ image, which can introduce banding or precision loss for 10-bit files.
+
+ ``vdpau`` always does RGB conversion in hardware, which does not
+ support newer colorspaces like BT.2020 correctly. However, ``vdpau``
+ doesn't support 10 bit or HDR encodings, so these limitations are
+ unlikely to be relevant.
+
+ ``dxva2`` is not safe. It appears to always use BT.601 for forced RGB
+ conversion, but actual behavior depends on the GPU drivers. Some drivers
+ appear to convert to limited range RGB, which gives a faded appearance.
+ In addition to driver-specific behavior, global system settings might
+ affect this additionally. This can give incorrect results even with
+ completely ordinary video sources.
+
+ ``rpi`` always uses the hardware overlay renderer, even with
+ ``--vo=gpu``.
+
+ ``mediacodec`` is not safe. It forces RGB conversion (not with ``-copy``)
+ and how well it handles non-standard colorspaces is not known.
+ In the rare cases where 10-bit is supported the bit depth of the output
+ will be reduced to 8.
+
+ ``cuda`` should usually be safe, but depending on how a file/stream
+ has been mixed, it has been reported to corrupt the timestamps causing
+ glitched, flashing frames. It can also sometimes cause massive
+ framedrops for unknown reasons. Caution is advised, and ``nvdec``
+ should always be preferred.
+
+ ``crystalhd`` is not safe. It always converts to 4:2:2 YUV, which
+ may be lossy, depending on how chroma sub-sampling is done during
+ conversion. It also discards the top left pixel of each frame for
+ some reason.
+
+ If you run into any weird decoding issues, frame glitches or
+ discoloration, and you have ``--hwdec`` turned on, the first thing you
+ should try is disabling it.
+
+``--gpu-hwdec-interop=<auto|all|no|name>``
+ This option is for troubleshooting hwdec interop issues. Since it's a
+ debugging option, its semantics may change at any time.
+
+ This is useful for the ``gpu`` and ``libmpv`` VOs for selecting which
+ hwdec interop context to use exactly. Effectively it also can be used
+ to block loading of certain backends.
+
+ If set to ``auto`` (default), the behavior depends on the VO: for ``gpu``,
+ it does nothing, and the interop context is loaded on demand (when the
+ decoder probes for ``--hwdec`` support). For ``libmpv``, which has
+ has no on-demand loading, this is equivalent to ``all``.
+
+ The empty string is equivalent to ``auto``.
+
+ If set to ``all``, it attempts to load all interop contexts at GL context
+ creation time.
+
+ Other than that, a specific backend can be set, and the list of them can
+ be queried with ``help`` (mpv CLI only).
+
+ Runtime changes to this are ignored (the current option value is used
+ whenever the renderer is created).
+
+``--hwdec-extra-frames=<N>``
+ Number of GPU frames hardware decoding should preallocate (default: see
+ ``--list-options`` output). If this is too low, frame allocation may fail
+ during decoding, and video frames might get dropped and/or corrupted.
+ Setting it too high simply wastes GPU memory and has no advantages.
+
+ This value is used only for hardware decoding APIs which require
+ preallocating surfaces (known examples include ``d3d11va`` and ``vaapi``).
+ For other APIs, frames are allocated as needed. The details depend on the
+ libavcodec implementations of the hardware decoders.
+
+ The required number of surfaces depends on dynamic runtime situations. The
+ default is a fixed value that is thought to be sufficient for most uses. But
+ in certain situations, it may not be enough.
+
+``--hwdec-image-format=<name>``
+ Set the internal pixel format used by hardware decoding via ``--hwdec``
+ (default ``no``). The special value ``no`` selects an implementation
+ specific standard format. Most decoder implementations support only one
+ format, and will fail to initialize if the format is not supported.
+
+ Some implementations might support multiple formats. In particular,
+ videotoolbox is known to require ``uyvy422`` for good performance on some
+ older hardware. d3d11va can always use ``yuv420p``, which uses an opaque
+ format, with likely no advantages.
+
+``--cuda-decode-device=<auto|0..>``
+ Choose the GPU device used for decoding when using the ``cuda`` or
+ ``nvdec`` hwdecs with the OpenGL GPU backend, and with the ``cuda-copy``
+ or ``nvdec-copy`` hwdecs in all cases.
+
+ For the OpenGL GPU backend, the default device used for decoding is the one
+ being used to provide ``gpu`` output (and in the vast majority of cases,
+ only one GPU will be present).
+
+ For the ``copy`` hwdecs, the default device will be the first device
+ enumerated by the CUDA libraries - however that is done.
+
+ For the Vulkan GPU backend, decoding must always happen on the display
+ device, and this option has no effect.
+
+``--vaapi-device=<device file>``
+ Choose the DRM device for ``vaapi-copy``. This should be the path to a
+ DRM device file. (Default: ``/dev/dri/renderD128``)
+
+``--panscan=<0.0-1.0>``
+ Enables pan-and-scan functionality (cropping the sides of e.g. a 16:9
+ video to make it fit a 4:3 display without black bands). The range
+ controls how much of the image is cropped. May not work with all video
+ output drivers.
+
+ This option has no effect if ``--video-unscaled`` option is used.
+
+``--video-aspect-override=<ratio|no>``
+ Override video aspect ratio, in case aspect information is incorrect or
+ missing in the file being played.
+
+ These values have special meaning:
+
+ :0: disable aspect ratio handling, pretend the video has square pixels
+ :no: same as ``0``
+ :-1: use the video stream or container aspect (default)
+
+ But note that handling of these special values might change in the future.
+
+ .. admonition:: Examples
+
+ - ``--video-aspect-override=4:3`` or ``--video-aspect-override=1.3333``
+ - ``--video-aspect-override=16:9`` or ``--video-aspect-override=1.7777``
+ - ``--no-video-aspect-override`` or ``--video-aspect-override=no``
+
+``--video-aspect-method=<bitstream|container>``
+ This sets the default video aspect determination method (if the aspect is
+ _not_ overridden by the user with ``--video-aspect-override`` or others).
+
+ :container: Strictly prefer the container aspect ratio. This is apparently
+ the default behavior with VLC, at least with Matroska. Note that
+ if the container has no aspect ratio set, the behavior is the
+ same as with bitstream.
+ :bitstream: Strictly prefer the bitstream aspect ratio, unless the bitstream
+ aspect ratio is not set. This is apparently the default behavior
+ with XBMC/kodi, at least with Matroska.
+
+ The current default for mpv is ``container``.
+
+ Normally you should not set this. Try the various choices if you encounter
+ video that has the wrong aspect ratio in mpv, but seems to be correct in
+ other players.
+
+``--video-unscaled=<no|yes|downscale-big>``
+ Disable scaling of the video. If the window is larger than the video,
+ black bars are added. Otherwise, the video is cropped, unless the option
+ is set to ``downscale-big``, in which case the video is fit to window. The
+ video still can be influenced by the other ``--video-...`` options. This
+ option disables the effect of ``--panscan``.
+
+ Note that the scaler algorithm may still be used, even if the video isn't
+ scaled. For example, this can influence chroma conversion. The video will
+ also still be scaled in one dimension if the source uses non-square pixels
+ (e.g. anamorphic widescreen DVDs).
+
+ This option is disabled if the ``--no-keepaspect`` option is used.
+
+``--video-pan-x=<value>``, ``--video-pan-y=<value>``
+ Moves the displayed video rectangle by the given value in the X or Y
+ direction. The unit is in fractions of the size of the scaled video (the
+ full size, even if parts of the video are not visible due to panscan or
+ other options).
+
+ For example, displaying a video fullscreen on a 1920x1080 screen with
+ ``--video-pan-x=-0.1`` would move the video 192 pixels to the left and
+ ``--video-pan-y=-0.1`` would move the video 108 pixels up.
+
+ This option is disabled if the ``--no-keepaspect`` option is used.
+
+``--video-rotate=<0-359|no>``
+ Rotate the video clockwise, in degrees. If ``no`` is given, the video is
+ never rotated, even if the file has rotation metadata. (The rotation value
+ is added to the rotation metadata, which means the value ``0`` would rotate
+ the video according to the rotation metadata.)
+
+ When using hardware decoding without copy-back, only 90° steps work, while
+ software decoding and hardware decoding methods that copy the video back to
+ system memory support all values between 0 and 359.
+
+``--video-crop=<[W[xH]][+x+y]>``, ``--video-crop=<x:y>``
+ Crop the video by starting at the x, y offset for w, h pixels. The crop is
+ applied to the source video rectangle (before anamorphic stretch) by the VO.
+ A crop rectangle that is not within the video rectangle will be ignored.
+ This works with hwdec, unlike the equivalent 'lavfi-crop'. When offset is
+ omitted, the central area will be cropped. Setting the crop to empty one
+ ``--video-crop=0x0+0+0`` overrides container crop and disables cropping.
+ Setting the crop to ``--video-crop=""`` disables manual cropping and restores
+ the container crop if it's specified.
+
+``--video-zoom=<value>``
+ Adjust the video display scale factor by the given value. The parameter is
+ given log 2. For example, ``--video-zoom=0`` is unscaled,
+ ``--video-zoom=1`` is twice the size, ``--video-zoom=-2`` is one fourth of
+ the size, and so on.
+
+ This option is disabled if the ``--no-keepaspect`` option is used.
+
+``--video-scale-x=<value>``, ``--video-scale-y=<value>``
+ Multiply the video display size with the given value (default: 1.0). If a
+ non-default value is used, this will be different from the window size, so
+ video will be either cut off, or black bars are added.
+
+ This value is multiplied with the value derived from ``--video-zoom`` and
+ the normal video aspect ratio. This option is disabled if the
+ ``--no-keepaspect`` option is used.
+
+``--video-align-x=<-1-1>``, ``--video-align-y=<-1-1>``
+ Moves the video rectangle within the black borders, which are usually added
+ to pad the video to screen if video and screen aspect ratios are different.
+ ``--video-align-y=-1`` would move the video to the top of the screen
+ (leaving a border only on the bottom), a value of ``0`` centers it
+ (default), and a value of ``1`` would put the video at the bottom of the
+ screen.
+
+ If video and screen aspect match perfectly, these options do nothing.
+
+ This option is disabled if the ``--no-keepaspect`` option is used.
+
+``--video-margin-ratio-left=<val>``, ``--video-margin-ratio-right=<val>``, ``--video-margin-ratio-top=<val>``, ``--video-margin-ratio-bottom=<val>``
+ Set extra video margins on each border (default: 0). Each value is a ratio
+ of the window size, using a range 0.0-1.0. For example, setting the option
+ ``--video-margin-ratio-right=0.2`` at a window size of 1000 pixels will add
+ a 200 pixels border on the right side of the window.
+
+ The video is "boxed" by these margins. The window size is not changed. In
+ particular it does not enlarge the window, and the margins will cause the
+ video to be downscaled by default. This may or may not change in the future.
+
+ The margins are applied after 90° video rotation, but before any other video
+ transformations.
+
+ This option is disabled if the ``--no-keepaspect`` option is used.
+
+ Subtitles still may use the margins, depending on ``--sub-use-margins`` and
+ similar options.
+
+ These options were created for the OSC. Some odd decisions, such as making
+ the margin values a ratio (instead of pixels), were made for the sake of
+ the OSC. It's possible that these options may be replaced by ones that are
+ more generally useful. The behavior of these options may change to fit
+ OSC requirements better, too.
+
+``--correct-pts``, ``--no-correct-pts``
+ ``--no-correct-pts`` switches mpv to a mode where video timing is
+ determined using a fixed framerate value (either using the
+ ``--container-fps-override`` option, or using file information). Sometimes,
+ files with very broken timestamps can be played somewhat well in this mode.
+ Note that video filters, subtitle rendering, seeking (including hr-seeks and
+ backstepping), and audio synchronization can be completely broken in this mode.
+
+``--container-fps-override=<float>``
+ Override video framerate. Useful if the original value is wrong or missing.
+
+ .. note::
+
+ Works in ``--no-correct-pts`` mode only.
+
+``--deinterlace=<yes|no>``
+ Enable or disable interlacing (default: no).
+ Interlaced video shows ugly comb-like artifacts, which are visible on
+ fast movement. Enabling this typically inserts the yadif video filter in
+ order to deinterlace the video, or lets the video output apply deinterlacing
+ if supported.
+
+ This behaves exactly like the ``deinterlace`` input property (usually
+ mapped to ``d``).
+
+ Keep in mind that this **will** conflict with manually inserted
+ deinterlacing filters, unless you take care. (Since mpv 0.27.0, even the
+ hardware deinterlace filters will conflict. Also since that version,
+ ``--deinterlace=auto`` was removed, which used to mean that the default
+ interlacing option of possibly inserted video filters was used.)
+
+ Note that this will make video look worse if it's not actually interlaced.
+
+``--frames=<number>``
+ Play/convert only first ``<number>`` video frames, then quit.
+
+ ``--frames=0`` loads the file, but immediately quits before initializing
+ playback. (Might be useful for scripts which just want to determine some
+ file properties.)
+
+ For audio-only playback, any value greater than 0 will quit playback
+ immediately after initialization. The value 0 works as with video.
+
+``--video-output-levels=<outputlevels>``
+ RGB color levels used with YUV to RGB conversion. Normally, output devices
+ such as PC monitors use full range color levels. However, some TVs and
+ video monitors expect studio RGB levels. Providing full range output to a
+ device expecting studio level input results in crushed blacks and whites,
+ the reverse in dim gray blacks and dim whites.
+
+ Not all VOs support this option. Some will silently ignore it.
+
+ Available color ranges are:
+
+ :auto: automatic selection (equals to full range) (default)
+ :limited: limited range (16-235 per component), studio levels
+ :full: full range (0-255 per component), PC levels
+
+ .. note::
+
+ It is advisable to use your graphics driver's color range option
+ instead, if available.
+
+``--hwdec-codecs=<codec1,codec2,...|all>``
+ Allow hardware decoding for a given list of codecs only. The special value
+ ``all`` always allows all codecs.
+
+ You can get the list of allowed codecs with ``mpv --vd=help``. Remove the
+ prefix, e.g. instead of ``lavc:h264`` use ``h264``.
+
+ By default, this is set to ``h264,vc1,hevc,vp8,vp9,av1``. Note that
+ the hardware acceleration special codecs like ``h264_vdpau`` are not
+ relevant anymore, and in fact have been removed from Libav in this form.
+
+ This is usually only needed with broken GPUs, where a codec is reported
+ as supported, but decoding causes more problems than it solves.
+
+ .. admonition:: Example
+
+ ``mpv --hwdec=vdpau --vo=vdpau --hwdec-codecs=h264,mpeg2video``
+ Enable vdpau decoding for h264 and mpeg2 only.
+
+``--vd-lavc-check-hw-profile=<yes|no>``
+ Check hardware decoder profile (default: yes). If ``no`` is set, the
+ highest profile of the hardware decoder is unconditionally selected, and
+ decoding is forced even if the profile of the video is higher than that.
+ The result is most likely broken decoding, but may also help if the
+ detected or reported profiles are somehow incorrect.
+
+``--vd-lavc-software-fallback=<yes|no|N>``
+ Fallback to software decoding if the hardware-accelerated decoder fails
+ (default: 3). If this is a number, then fallback will be triggered if
+ N frames fail to decode in a row. 1 is equivalent to ``yes``.
+
+ Setting this to a higher number might break the playback start fallback: if
+ a fallback happens, parts of the file will be skipped, approximately by to
+ the number of packets that could not be decoded. Values below an unspecified
+ count will not have this problem, because mpv retains the packets.
+
+``--vd-lavc-film-grain=<auto|cpu|gpu>``
+ Enables film grain application on the GPU. If video decoding is done on
+ the CPU, doing film grain application on the GPU can speed up decoding.
+ This option can also help hardware decoding, as it can reduce the number
+ of frame copies done.
+
+ By default, it's set to ``auto``, so if the VO supports film grain
+ application, then it will be treated as ``gpu``. If the VO does not
+ support this, then it will be treated as ``cpu``, regardless of the setting.
+ Currently, only ``gpu-next`` supports film grain application.
+
+``--vd-lavc-dr=<auto|yes|no>``
+ Enable direct rendering (default: auto). If this is set to ``yes``, the
+ video will be decoded directly to GPU video memory (or staging buffers).
+ This can speed up video upload, and may help with large resolutions or
+ slow hardware. This works only with the following VOs:
+
+ - ``gpu``: requires at least OpenGL 4.4 or Vulkan.
+ - ``libmpv``: The libmpv render API has optional support.
+
+ The ``auto`` option will try to guess whether DR can improve performance
+ on your particular hardware. Currently this enables it on AMD or NVIDIA
+ if using OpenGL or unconditionally if using Vulkan.
+
+ Using video filters of any kind that write to the image data (or output
+ newly allocated frames) will silently disable the DR code path.
+
+``--vd-lavc-bitexact``
+ Only use bit-exact algorithms in all decoding steps (for codec testing).
+
+``--vd-lavc-fast`` (MPEG-1/2 and H.264 only)
+ Enable optimizations which do not comply with the format specification and
+ potentially cause problems, like simpler dequantization, simpler motion
+ compensation, assuming use of the default quantization matrix, assuming YUV
+ 4:2:0 and skipping a few checks to detect damaged bitstreams.
+
+``--vd-lavc-o=<key>=<value>[,<key>=<value>[,...]]``
+ Pass AVOptions to libavcodec decoder. 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.
+
+ Some options which used to be direct options can be set with this
+ mechanism, like ``bug``, ``gray``, ``idct``, ``ec``, ``vismv``,
+ ``skip_top`` (was ``st``), ``skip_bottom`` (was ``sb``), ``debug``.
+
+ This is a key/value list option. See `List Options`_ for details.
+
+ .. admonition:: Example
+
+ ``--vd-lavc-o=debug=pict``
+
+``--vd-lavc-show-all=<yes|no>``
+ Show even broken/corrupt frames (default: no). If this option is set to
+ no, libavcodec won't output frames that were either decoded before an
+ initial keyframe was decoded, or frames that are recognized as corrupted.
+
+``--vd-lavc-skiploopfilter=<skipvalue>`` (H.264, HEVC only)
+ Skips the loop filter (AKA deblocking) during decoding. Since
+ the filtered frame is supposed to be used as reference for decoding
+ dependent frames, this has a worse effect on quality than not doing
+ deblocking on e.g. MPEG-2 video. But at least for high bitrate HDTV,
+ this provides a big speedup with little visible quality loss.
+ Codecs other than H.264 or HEVC may have partial support for this option
+ (often only ``all`` and ``none``).
+
+ ``<skipvalue>`` can be one of the following:
+
+ :none: Never skip.
+ :default: Skip useless processing steps (e.g. 0 size packets in AVI).
+ :nonref: Skip frames that are not referenced (i.e. not used for
+ decoding other frames, the error cannot "build up").
+ :bidir: Skip B-Frames.
+ :nonkey: Skip all frames except keyframes.
+ :all: Skip all frames.
+
+``--vd-lavc-skipidct=<skipvalue>`` (MPEG-1/2/4 only)
+ Skips the IDCT step. This degrades quality a lot in almost all cases
+ (see skiploopfilter for available skip values).
+
+``--vd-lavc-skipframe=<skipvalue>``
+ Skips decoding of frames completely. Big speedup, but jerky motion and
+ sometimes bad artifacts (see skiploopfilter for available skip values).
+
+``--vd-lavc-framedrop=<skipvalue>``
+ Set framedropping mode used with ``--framedrop`` (see skiploopfilter for
+ available skip values).
+
+``--vd-lavc-threads=<N>``
+ Number of threads to use for decoding. Whether threading is actually
+ supported depends on codec (default: 0). 0 means autodetect number of cores
+ on the machine and use that, up to the maximum of 16. You can set more than
+ 16 threads manually.
+
+``--vd-lavc-assume-old-x264=<yes|no>``
+ Assume the video was encoded by an old, buggy x264 version (default: no).
+ Normally, this is autodetected by libavcodec. But if the bitstream contains
+ no x264 version info (or it was somehow skipped), and the stream was in fact
+ encoded by an old x264 version (build 150 or earlier), and if the stream
+ uses 4:4:4 chroma, then libavcodec will by default show corrupted video.
+ This option sets the libavcodec ``x264_build`` option to ``150``, which
+ means that if the stream contains no version info, or was not encoded by
+ x264 at all, it assumes it was encoded by the old version. Enabling this
+ option is pretty safe if you want your broken files to work, but in theory
+ this can break on streams not encoded by x264, or if a stream encoded by a
+ newer x264 version contains no version info.
+
+``--vd-apply-cropping``
+ Certain video codecs support cropping, meaning that only a sub-rectangle of
+ the decoded frame is intended for display. This option controls how cropping
+ is handled by libavcodec. Cropping during decoding has certain limitations
+ with regards to alignment and hardware decoding. If this option is enabled,
+ decoder will apply the crop, else VO will handle it. Enabled by default.
+
+``--swapchain-depth=<N>``
+ Allow up to N in-flight frames. This essentially controls the frame
+ latency. Increasing the swapchain depth can improve pipelining and prevent
+ missed vsyncs, but increases visible latency. This option only mandates an
+ upper limit, the implementation can use a lower latency than requested
+ internally. A setting of 1 means that the VO will wait for every frame to
+ become visible before starting to render the next frame. (Default: 3)
+
+Audio
+-----
+
+``--audio-pitch-correction=<yes|no>``
+ If this is enabled (default), playing with a speed different from normal
+ automatically inserts the ``scaletempo2`` audio filter. You can insert
+ filters besides ``scaletempo2`` and modify their params using
+ `Conditional auto profiles`:
+
+ ::
+
+ [af_insert]
+ profile-cond=speed ~= 1
+ profile-restore=copy
+ af-add=scaletempo2=search-interval=50 # Insert filter and params here.
+
+ Filters set this way replace the ``scaletempo2`` default, instead of
+ overlapping with it. If there are multiple audio filters inserted that can do
+ pitch correction, then only the last one in the filter chain is used.
+ For details on the specifics of each available filter, see the audio filter
+ section.
+
+``--audio-device=<name>``
+ Use the given audio device. This consists of the audio output name, e.g.
+ ``alsa``, followed by ``/``, followed by the audio output specific device
+ name. The default value for this option is ``auto``, which tries every audio
+ output in preference order with the default device.
+
+ You can list audio devices with ``--audio-device=help``. This outputs the
+ device name in quotes, followed by a description. The device name is what
+ you have to pass to the ``--audio-device`` option. The list of audio devices
+ can be retrieved by API by using the ``audio-device-list`` property.
+
+ While the option normally takes one of the strings as indicated by the
+ methods above, you can also force the device for most AOs by building it
+ manually. For example ``name/foobar`` forces the AO ``name`` to use the
+ device ``foobar``. However, the ``--ao`` option will strictly force a
+ specific AO. To avoid confusion, don't use ``--ao`` and ``--audio-device``
+ together.
+
+ .. admonition:: Example for ALSA
+
+ MPlayer and mplayer2 required you to replace any ',' with '.' and
+ any ':' with '=' in the ALSA device name. For example, to use the
+ device named ``dmix:default``, you had to do:
+
+ ``-ao alsa:device=dmix=default``
+
+ In mpv you could instead use:
+
+ ``--audio-device=alsa/dmix:default``
+
+
+``--audio-exclusive=<yes|no>``
+ Enable exclusive output mode. In this mode, the system is usually locked
+ out, and only mpv will be able to output audio.
+
+ This only works for some audio outputs, such as ``wasapi``, ``coreaudio``
+ and ``pipewire``. Other audio outputs silently ignore this option.
+ They either have no concept of exclusive mode, or the mpv side of the
+ implementation is missing.
+
+``--audio-fallback-to-null=<yes|no>``
+ If no audio device can be opened, behave as if ``--ao=null`` was given. This
+ is useful in combination with ``--audio-device``: instead of causing an
+ error if the selected device does not exist, the client API user (or a
+ Lua script) could let playback continue normally, and check the
+ ``current-ao`` and ``audio-device-list`` properties to make high-level
+ decisions about how to continue.
+
+``--ao=<driver>``
+ Specify the audio output drivers to be used. See `AUDIO OUTPUT DRIVERS`_ for
+ details and descriptions of available drivers.
+
+``--af=<filter1[=parameter1:parameter2:...],filter2,...>``
+ Specify a list of audio filters to apply to the audio stream. See
+ `AUDIO FILTERS`_ for details and descriptions of the available filters.
+ The option variants ``--af-add``, ``--af-pre``, and ``--af-clr`` exist
+ to modify a previously specified list, but you should not need these for
+ typical use.
+
+``--audio-spdif=<codecs>``
+ List of codecs for which compressed audio passthrough should be used. This
+ works for both classic S/PDIF and HDMI.
+
+ Possible codecs are ``ac3``, ``dts``, ``dts-hd``, ``eac3``, ``truehd``.
+ Multiple codecs can be specified by separating them with ``,``. ``dts``
+ refers to low bitrate DTS core, while ``dts-hd`` refers to DTS MA (receiver
+ and OS support varies). If both ``dts`` and ``dts-hd`` are specified, it
+ behaves equivalent to specifying ``dts-hd`` only.
+
+ In earlier mpv versions you could use ``--ad`` to force the spdif wrapper.
+ This does not work anymore.
+
+ .. admonition:: Warning
+
+ There is not much reason to use this. HDMI supports uncompressed
+ multichannel PCM, and mpv supports lossless DTS-HD decoding via
+ FFmpeg's new DCA decoder (based on libdcadec).
+
+``--ad=<decoder1,decoder2,...[-]>``
+ Specify a priority list of audio decoders to be used, according to their
+ decoder name. When determining which decoder to use, the first decoder that
+ matches the audio format is selected. If that is unavailable, the next
+ decoder is used. Finally, it tries all other decoders that are not
+ explicitly selected or rejected by the option.
+
+ ``-`` at the end of the list suppresses fallback on other available
+ decoders not on the ``--ad`` list. ``+`` in front of an entry forces the
+ decoder. Both of these should not normally be used, because they break
+ normal decoder auto-selection! Both of these methods are deprecated.
+
+ .. admonition:: Examples
+
+ ``--ad=mp3float``
+ Prefer the FFmpeg/Libav ``mp3float`` decoder over all other MP3
+ decoders.
+
+ ``--ad=help``
+ List all available decoders.
+
+ .. admonition:: Warning
+
+ Enabling compressed audio passthrough (AC3 and DTS via SPDIF/HDMI) with
+ this option is not possible. Use ``--audio-spdif`` instead.
+
+``--volume=<value>``
+ Set the startup volume. 0 means silence, 100 means no volume reduction or
+ amplification. Negative values can be passed for compatibility, but are
+ treated as 0.
+
+ Since mpv 0.18.1, this always controls the internal mixer (aka "softvol").
+
+``--replaygain=<no|track|album>``
+ Adjust volume gain according to replaygain values stored in the file
+ metadata. With ``--replaygain=no`` (the default), perform no adjustment.
+ With ``--replaygain=track``, apply track gain. With ``--replaygain=album``,
+ apply album gain if present and fall back to track gain otherwise.
+
+``--replaygain-preamp=<db>``
+ Pre-amplification gain in dB to apply to the selected replaygain gain
+ (default: 0).
+
+``--replaygain-clip=<yes|no>``
+ Prevent clipping caused by replaygain by automatically lowering the
+ gain (default). Use ``--replaygain-clip=no`` to disable this.
+
+``--replaygain-fallback=<db>``
+ Gain in dB to apply if the file has no replay gain tags. This option
+ is always applied if the replaygain logic is somehow inactive. If this
+ is applied, no other replaygain options are applied.
+
+``--audio-delay=<sec>``
+ Audio delay in seconds (positive or negative float value). Positive values
+ delay the audio, and negative values delay the video.
+
+``--mute=<yes|no|auto>``
+ Set startup audio mute status (default: no).
+
+ ``auto`` is a deprecated possible value that is equivalent to ``no``.
+
+ See also: ``--volume``.
+
+``--softvol=<no|yes|auto>``
+ Deprecated/unfunctional. Before mpv 0.18.1, this used to control whether
+ to use the volume controls of the audio output driver or the internal mpv
+ volume filter.
+
+ The current behavior is that softvol is always enabled, i.e. as if this
+ option is set to ``yes``. The other behaviors are not available anymore,
+ although ``auto`` almost matches current behavior in most cases.
+
+ The ``no`` behavior is still partially available through the ``ao-volume``
+ and ``ao-mute`` properties. But there are no options to reset these.
+
+``--audio-demuxer=<[+]name>``
+ Use this audio demuxer type when using ``--audio-file``. Use a '+' before
+ the name to force it; this will skip some checks. Give the demuxer name as
+ printed by ``--audio-demuxer=help``.
+
+``--ad-lavc-ac3drc=<level>``
+ Select the Dynamic Range Compression level for AC-3 audio streams.
+ ``<level>`` is a float value ranging from 0 to 1, where 0 means no
+ compression (which is the default) and 1 means full compression (make loud
+ passages more silent and vice versa). Values up to 6 are also accepted, but
+ are purely experimental. This option only shows an effect if the AC-3 stream
+ contains the required range compression information.
+
+ The standard mandates that DRC is enabled by default, but mpv (and some
+ other players) ignore this for the sake of better audio quality.
+
+``--ad-lavc-downmix=<yes|no>``
+ Whether to request audio channel downmixing from the decoder (default: no).
+ Some decoders, like AC-3, AAC and DTS, can remix audio on decoding. The
+ requested number of output channels is set with the ``--audio-channels`` option.
+ Useful for playing surround audio on a stereo system.
+
+``--ad-lavc-threads=<0-16>``
+ Number of threads to use for decoding. Whether threading is actually
+ supported depends on codec. As of this writing, it's supported for some
+ lossless codecs only. 0 means autodetect number of cores on the
+ machine and use that, up to the maximum of 16 (default: 1).
+
+``--ad-lavc-o=<key>=<value>[,<key>=<value>[,...]]``
+ Pass AVOptions to libavcodec decoder. 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.
+
+ This is a key/value list option. See `List Options`_ for details.
+
+``--ad-spdif-dtshd=<yes|no>``, ``--dtshd``, ``--no-dtshd``
+ If DTS is passed through, use DTS-HD.
+
+ .. admonition:: Warning
+
+ This and enabling passthrough via ``--ad`` are deprecated in favor of
+ using ``--audio-spdif=dts-hd``.
+
+``--audio-channels=<auto-safe|auto|layouts>``
+ Control which audio channels are output (e.g. surround vs. stereo). There
+ are the following possibilities:
+
+ - ``--audio-channels=auto-safe``
+ Use the system's preferred channel layout. If there is none (such
+ as when accessing a hardware device instead of the system mixer),
+ force stereo. Some audio outputs might simply accept any layout and
+ do downmixing on their own.
+
+ This is the default.
+ - ``--audio-channels=auto``
+ Send the audio device whatever it accepts, preferring the audio's
+ original channel layout. Can cause issues with HDMI (see the warning
+ below).
+ - ``--audio-channels=layout1,layout2,...``
+ List of ``,``-separated channel layouts which should be allowed.
+ Technically, this only adjusts the filter chain output to the best
+ matching layout in the list, and passes the result to the audio API.
+ It's possible that the audio API will select a different channel
+ layout.
+
+ Using this mode is recommended for direct hardware output, especially
+ over HDMI (see HDMI warning below).
+ - ``--audio-channels=<stereo|mono>``
+ Force a downmix to stereo or mono. These are special-cases of the
+ previous item. (See paragraphs below for implications.)
+
+ If a list of layouts is given, each item can be either an explicit channel
+ layout name (like ``5.1``), or a channel number. Channel numbers refer to
+ default layouts, e.g. 2 channels refer to stereo, 6 refers to 5.1.
+
+ See ``--audio-channels=help`` output for defined default layouts. This also
+ lists speaker names, which can be used to express arbitrary channel
+ layouts (e.g. ``fl-fr-lfe`` is 2.1).
+
+ If the list of channel layouts has only 1 item, the decoder is asked to
+ produce according output. This sometimes triggers decoder-downmix, which
+ might be different from the normal mpv downmix. (Only some decoders support
+ remixing audio, like AC-3, AAC or DTS. You can use ``--ad-lavc-downmix=no``
+ to make the decoder always output its native layout.) One consequence is
+ that ``--audio-channels=stereo`` triggers decoder downmix, while ``auto``
+ or ``auto-safe`` never will, even if they end up selecting stereo. This
+ happens because the decision whether to use decoder downmix happens long
+ before the audio device is opened.
+
+ If the channel layout of the media file (i.e. the decoder) and the AO's
+ channel layout don't match, mpv will attempt to insert a conversion filter.
+ You may need to change the channel layout of the system mixer to achieve
+ your desired output as mpv does not have control over it. Another
+ work-around for this on some AOs is to use ``--audio-exclusive=yes`` to
+ circumvent the system mixer entirely.
+
+ .. admonition:: Warning
+
+ Using ``auto`` can cause issues when using audio over HDMI. The OS will
+ typically report all channel layouts that _can_ go over HDMI, even if
+ the receiver does not support them. If a receiver gets an unsupported
+ channel layout, random things can happen, such as dropping the
+ additional channels, or adding noise.
+
+ You are recommended to set an explicit whitelist of the layouts you
+ want. For example, most A/V receivers connected via HDMI and that can
+ do 7.1 would be served by: ``--audio-channels=7.1,5.1,stereo``
+
+``--audio-display=<no|embedded-first|external-first>``
+ Determines whether to display cover art when playing audio files and with
+ what priority. It will display the first image found, and additional images
+ are available as video tracks.
+
+ :no: Disable display of video entirely when playing audio
+ files.
+ :embedded-first: Display embedded images and external cover art, giving
+ priority to embedded images (default).
+ :external-first: Display embedded images and external cover art, giving
+ priority to external files.
+
+ This option has no influence on files with normal video tracks.
+
+``--audio-files=<files>``
+ Play audio from an external file while viewing a video.
+
+ This is a path list option. See `List Options`_ for details.
+
+``--audio-file=<file>``
+ CLI/config file only alias for ``--audio-files-append``. Each use of this
+ option will add a new audio track. The details are similar to how
+ ``--sub-file`` works.
+
+``--audio-format=<format>``
+ Select the sample format used for output from the audio filter layer to
+ the sound card. The values that ``<format>`` can adopt are listed below in
+ the description of the ``format`` audio filter.
+
+``--audio-samplerate=<Hz>``
+ Select the output sample rate to be used (of course sound cards have
+ limits on this). If the sample frequency selected is different from that
+ of the current media, the lavrresample audio filter will be inserted into
+ the audio filter layer to compensate for the difference.
+
+``--gapless-audio=<no|yes|weak>``
+ Try to play consecutive audio files with no silence or disruption at the
+ point of file change. Default: ``weak``.
+
+ :no: Disable gapless audio.
+ :yes: The audio device is opened using parameters chosen for the first
+ file played and is then kept open for gapless playback. This
+ means that if the first file for example has a low sample rate, then
+ the following files may get resampled to the same low sample rate,
+ resulting in reduced sound quality. If you play files with different
+ parameters, consider using options such as ``--audio-samplerate``
+ and ``--audio-format`` to explicitly select what the shared output
+ format will be.
+ :weak: Normally, the audio device is kept open (using the format it was
+ first initialized with). If the audio format the decoder output
+ changes, the audio device is closed and reopened. This means that
+ you will normally get gapless audio with files that were encoded
+ using the same settings, but might not be gapless in other cases.
+ The exact conditions under which the audio device is kept open is
+ an implementation detail, and can change from version to version.
+ Currently, the device is kept even if the sample format changes,
+ but the sample formats are convertible.
+ If video is still going on when there is still audio, trying to use
+ gapless is also explicitly given up.
+
+ .. note::
+
+ This feature is implemented in a simple manner and relies on audio
+ output device buffering to continue playback while moving from one file
+ to another. If playback of the new file starts slowly, for example
+ because it is played from a remote network location or because you have
+ specified cache settings that require time for the initial cache fill,
+ then the buffered audio may run out before playback of the new file
+ can start.
+
+``--initial-audio-sync``, ``--no-initial-audio-sync``
+ When starting a video file or after events such as seeking, mpv will by
+ default modify the audio stream to make it start from the same timestamp
+ as video, by either inserting silence at the start or cutting away the
+ first samples. Disabling this option makes the player behave like older
+ mpv versions did: video and audio are both started immediately even if
+ their start timestamps differ, and then video timing is gradually adjusted
+ if necessary to reach correct synchronization later.
+
+``--volume-max=<100.0-1000.0>``
+ Set the maximum amplification level in percent (default: 130). A value of
+ 130 will allow you to adjust the volume up to about double the normal level.
+
+``--audio-file-auto=<no|exact|fuzzy|all>``, ``--no-audio-file-auto``
+ Load additional audio files matching the video filename. The parameter
+ specifies how external audio files are matched.
+
+ :no: Don't automatically load external audio files (default).
+ :exact: Load the media filename with audio file extension.
+ :fuzzy: Load all audio files containing the media filename.
+ :all: Load all audio files in the current and ``--audio-file-paths``
+ directories.
+
+``--audio-file-auto-exts=ext1,ext2,...``
+ Audio file extentions to try and match when using ``audio-file-auto``.
+
+ This is a string list option. See `List Options`_ for details.
+
+``--audio-file-paths=<path1:path2:...>``
+ Equivalent to ``--sub-file-paths`` option, but for auto-loaded audio files.
+
+ This is a path list option. See `List Options`_ for details.
+
+``--audio-client-name=<name>``
+ The application name the player reports to the audio API. Can be useful
+ if you want to force a different audio profile (e.g. with PulseAudio),
+ or to set your own application name when using libmpv.
+
+``--audio-buffer=<seconds>``
+ Set the audio output minimum buffer. The audio device might actually create
+ a larger buffer if it pleases. If the device creates a smaller buffer,
+ additional audio is buffered in an additional software buffer.
+
+ Making this larger will make soft-volume and other filters react slower,
+ introduce additional issues on playback speed change, and block the
+ player on audio format changes. A smaller buffer might lead to audio
+ dropouts.
+
+ This option should be used for testing only. If a non-default value helps
+ significantly, the mpv developers should be contacted.
+
+ Default: 0.2 (200 ms).
+
+``--audio-stream-silence=<yes|no>``
+ Cash-grab consumer audio hardware (such as A/V receivers) often ignore
+ initial audio sent over HDMI. This can happen every time audio over HDMI
+ is stopped and resumed. In order to compensate for this, you can enable
+ this option to not to stop and restart audio on seeks, and fill the gaps
+ with silence. Likewise, when pausing playback, audio is not stopped, and
+ silence is played while paused. Note that if no audio track is selected,
+ the audio device will still be closed immediately.
+
+ Not all AOs support this.
+
+ .. admonition:: Warning
+
+ This modifies certain subtle player behavior, like A/V-sync and underrun
+ handling. Enabling this option is strongly discouraged.
+
+``--audio-wait-open=<secs>``
+ This makes sense for use with ``--audio-stream-silence=yes``. If this option
+ is given, the player will wait for the given amount of seconds after opening
+ the audio device before sending actual audio data to it. Useful if your
+ expensive hardware discards the first 1 or 2 seconds of audio data sent to
+ it. If ``--audio-stream-silence=yes`` is not set, this option will likely
+ just waste time.
+
+Subtitles
+---------
+
+.. note::
+
+ Changing styling and position does not work with all subtitles. Image-based
+ subtitles (DVD, Bluray/PGS, DVB) cannot changed for fundamental reasons.
+ Subtitles in ASS format are normally not changed intentionally, but
+ overriding them can be controlled with ``--sub-ass-override``.
+
+``--sub-demuxer=<[+]name>``
+ Force subtitle demuxer type for ``--sub-file``. Give the demuxer name as
+ printed by ``--sub-demuxer=help``.
+
+``--sub-delay=<sec>``
+ Delays subtitles by ``<sec>`` seconds. Can be negative.
+
+``--sub-files=<file-list>``, ``--sub-file=<filename>``
+ Add a subtitle file to the list of external subtitles.
+
+ If you use ``--sub-file`` only once, this subtitle file is displayed by
+ default.
+
+ If ``--sub-file`` is used multiple times, the subtitle to use can be
+ switched at runtime by cycling subtitle tracks. It's possible to show
+ two subtitles at once: use ``--sid`` to select the first subtitle index,
+ and ``--secondary-sid`` to select the second index. (The index is printed
+ on the terminal output after the ``--sid=`` in the list of streams.)
+
+ ``--sub-files`` is a path list option (see `List Options`_ for details), and
+ can take multiple file names separated by ``:`` (Unix) or ``;`` (Windows),
+ while ``--sub-file`` takes a single filename, but can be used multiple
+ times to add multiple files. Technically, ``--sub-file`` is a CLI/config
+ file only alias for ``--sub-files-append``.
+
+``--secondary-sid=<ID|auto|no>``
+ Select a secondary subtitle stream. This is similar to ``--sid``. If a
+ secondary subtitle is selected, it will be rendered as toptitle (i.e. on
+ the top of the screen) alongside the normal subtitle, and provides a way
+ to render two subtitles at once.
+
+ There are some caveats associated with this feature. For example, bitmap
+ subtitles will always be rendered in their usual position, so selecting a
+ bitmap subtitle as secondary subtitle will result in overlapping subtitles.
+ Secondary subtitles are never shown on the terminal if video is disabled.
+
+ .. note::
+
+ Styling and interpretation of any formatting tags is disabled for the
+ secondary subtitle. Internally, the same mechanism as ``--no-sub-ass``
+ is used to strip the styling.
+
+ .. note::
+
+ If the main subtitle stream contains formatting tags which display the
+ subtitle at the top of the screen, it will overlap with the secondary
+ subtitle. To prevent this, you could use ``--no-sub-ass`` to disable
+ styling in the main subtitle stream.
+
+``--sub-scale=<0-100>``
+ Factor for the text subtitle font size (default: 1).
+
+ .. note::
+
+ This affects ASS subtitles as well, and may lead to incorrect subtitle
+ rendering. Use with care, or use ``--sub-font-size`` instead.
+
+``--sub-scale-by-window=<yes|no>``
+ Whether to scale subtitles with the window size (default: yes). If this is
+ disabled, changing the window size won't change the subtitle font size.
+
+ Like ``--sub-scale``, this can break ASS subtitles.
+
+``--sub-scale-with-window=<yes|no>``
+ Make the subtitle font size relative to the window, instead of the video.
+ This is useful if you always want the same font size, even if the video
+ doesn't cover the window fully, e.g. because screen aspect and window
+ aspect mismatch (and the player adds black bars).
+
+ Default: yes.
+
+ This option is misnamed. The difference to the confusingly similar sounding
+ option ``--sub-scale-by-window`` is that ``--sub-scale-with-window`` still
+ scales with the approximate window size, while the other option disables
+ this scaling.
+
+ Affects plain text subtitles only (or ASS if ``--sub-ass-override`` is set
+ high enough).
+
+``--sub-ass-scale-with-window=<yes|no>``
+ Like ``--sub-scale-with-window``, but affects subtitles in ASS format only.
+ Like ``--sub-scale``, this can break ASS subtitles.
+
+ Default: no.
+
+``--embeddedfonts=<yes|no>``
+ Use fonts embedded in Matroska container files and ASS scripts (default:
+ yes). These fonts can be used for SSA/ASS subtitle rendering.
+
+``--sub-pos=<0-150>``
+ Specify the position of subtitles on the screen. The value is the vertical
+ position of the subtitle in % of the screen height. 100 is the original
+ position, which is often not the absolute bottom of the screen, but with
+ some margin between the bottom and the subtitle. Values above 100 move the
+ subtitle further down.
+
+ .. admonition:: Warning
+
+ Text subtitles (as opposed to image subtitles) may be cut off if the
+ value of the option is above 100. This is a libass restriction.
+
+ This affects ASS subtitles as well, and may lead to incorrect subtitle
+ rendering in addition to the problem above.
+
+ Using ``--sub-margin-y`` can achieve this in a better way.
+
+``--sub-speed=<0.1-10.0>``
+ Multiply the subtitle event timestamps with the given value. Can be used
+ to fix the playback speed for frame-based subtitle formats. Affects text
+ subtitles only.
+
+ .. admonition:: Example
+
+ ``--sub-speed=25/23.976`` plays frame based subtitles which have been
+ loaded assuming a framerate of 23.976 at 25 FPS.
+
+``--sub-ass-style-overrides=<[Style.]Param=Value[,...]>``
+ Override some style or script info parameters.
+
+ This is a string list option. See `List Options`_ for details.
+
+ .. admonition:: Examples
+
+ - ``--sub-ass-style-overrides=FontName=Arial,Default.Bold=1``
+ - ``--sub-ass-style-overrides=PlayResY=768``
+
+ .. note::
+
+ Using this option may lead to incorrect subtitle rendering.
+
+``--sub-ass-hinting=<none|light|normal|native>``
+ Set font hinting type. <type> can be:
+
+ :none: no hinting (default)
+ :light: FreeType autohinter, light mode
+ :normal: FreeType autohinter, normal mode
+ :native: font native hinter
+
+ .. admonition:: Warning
+
+ Enabling hinting can lead to mispositioned text (in situations it's
+ supposed to match up video background), or reduce the smoothness
+ of animations with some badly authored ASS scripts. It is recommended
+ to not use this option, unless really needed.
+
+``--sub-ass-line-spacing=<value>``
+ Set line spacing value for SSA/ASS renderer.
+
+``--sub-ass-shaper=<simple|complex>``
+ Set the text layout engine used by libass.
+
+ :simple: uses Fribidi only, fast, doesn't render some languages correctly
+ :complex: uses HarfBuzz, slower, wider language support
+
+ ``complex`` is the default. If libass hasn't been compiled against HarfBuzz,
+ libass silently reverts to ``simple``.
+
+``--sub-ass-styles=<filename>``
+ Load all SSA/ASS styles found in the specified file and use them for
+ rendering text subtitles. The syntax of the file is exactly like the ``[V4
+ Styles]`` / ``[V4+ Styles]`` section of SSA/ASS.
+
+ .. note::
+
+ Using this option may lead to incorrect subtitle rendering.
+
+``--sub-ass-override=<yes|no|force|scale|strip>``
+ Control whether user style overrides should be applied. Note that all of
+ these overrides try to be somewhat smart about figuring out whether or not
+ a subtitle is considered a "sign".
+
+ :no: Render subtitles as specified by the subtitle scripts, without
+ overrides.
+ :yes: Apply all the ``--sub-ass-*`` style override options. Changing the
+ default for any of these options can lead to incorrect subtitle
+ rendering (default).
+ :force: Like ``yes``, but also force all ``--sub-*`` options. Can break
+ rendering easily.
+ :scale: Like ``yes``, but also apply ``--sub-scale``.
+ :strip: Radically strip all ASS tags and styles from the subtitle. This
+ is equivalent to the old ``--no-ass`` / ``--no-sub-ass`` options.
+
+ This also controls some bitmap subtitle overrides, as well as HTML tags in
+ formats like SRT, despite the name of the option.
+
+``--sub-ass-force-margins``
+ Enables placing toptitles and subtitles in black borders when they are
+ available, if the subtitles are in the ASS format.
+
+ Default: no.
+
+``--sub-use-margins``
+ Enables placing toptitles and subtitles in black borders when they are
+ available, if the subtitles are in a plain text format (or ASS if
+ ``--sub-ass-override`` is set high enough).
+
+ Default: yes.
+
+``--sub-ass-vsfilter-aspect-compat=<yes|no>``
+ Stretch SSA/ASS subtitles when playing anamorphic videos for compatibility
+ with traditional VSFilter behavior. This switch has no effect when the
+ video is stored with square pixels.
+
+ The renderer historically most commonly used for the SSA/ASS subtitle
+ formats, VSFilter, had questionable behavior that resulted in subtitles
+ being stretched too if the video was stored in anamorphic format that
+ required scaling for display. This behavior is usually undesirable and
+ newer VSFilter versions may behave differently. However, many existing
+ scripts compensate for the stretching by modifying things in the opposite
+ direction. Thus, if such scripts are displayed "correctly", they will not
+ appear as intended. This switch enables emulation of the old VSFilter
+ behavior (undesirable but expected by many existing scripts).
+
+ Enabled by default.
+
+``--sub-ass-vsfilter-blur-compat=<yes|no>``
+ Scale ``\blur`` tags by video resolution instead of script resolution
+ (enabled by default). This is bug in VSFilter, which according to some,
+ can't be fixed anymore in the name of compatibility.
+
+ Note that this uses the actual video resolution for calculating the
+ offset scale factor, not what the video filter chain or the video output
+ use.
+
+``--sub-ass-vsfilter-color-compat=<basic|full|force-601|no>``
+ Mangle colors like (xy-)vsfilter do (default: basic). Historically, VSFilter
+ was not color space aware. This was no problem as long as the color space
+ used for SD video (BT.601) was used. But when everything switched to HD
+ (BT.709), VSFilter was still converting RGB colors to BT.601, rendered
+ them into the video frame, and handled the frame to the video output, which
+ would use BT.709 for conversion to RGB. The result were mangled subtitle
+ colors. Later on, bad hacks were added on top of the ASS format to control
+ how colors are to be mangled.
+
+ :basic: Handle only BT.601->BT.709 mangling, if the subtitles seem to
+ indicate that this is required (default).
+ :full: Handle the full ``YCbCr Matrix`` header with all video color spaces
+ supported by libass and mpv. This might lead to bad breakages in
+ corner cases and is not strictly needed for compatibility
+ (hopefully), which is why this is not default.
+ :force-601: Force BT.601->BT.709 mangling, regardless of subtitle headers
+ or video color space.
+ :no: Disable color mangling completely. All colors are RGB.
+
+ Choosing anything other than ``no`` will make the subtitle color depend on
+ the video color space, and it's for example in theory not possible to reuse
+ a subtitle script with another video file. The ``--sub-ass-override``
+ option doesn't affect how this option is interpreted.
+
+``--stretch-dvd-subs=<yes|no>``
+ Stretch DVD subtitles when playing anamorphic videos for better looking
+ fonts on badly mastered DVDs. This switch has no effect when the
+ video is stored with square pixels - which for DVD input cannot be the case
+ though.
+
+ Many studios tend to use bitmap fonts designed for square pixels when
+ authoring DVDs, causing the fonts to look stretched on playback on DVD
+ players. This option fixes them, however at the price of possibly
+ misaligning some subtitles (e.g. sign translations).
+
+ Disabled by default.
+
+``--stretch-image-subs-to-screen=<yes|no>``
+ Stretch DVD and other image subtitles to the screen, ignoring the video
+ margins. This has a similar effect as ``--sub-use-margins`` for text
+ subtitles, except that the text itself will be stretched, not only just
+ repositioned. (At least in general it is unavoidable, as an image bitmap
+ can in theory consist of a single bitmap covering the whole screen, and
+ the player won't know where exactly the text parts are located.)
+
+ This option does not display subtitles correctly. Use with care.
+
+ Disabled by default.
+
+``--image-subs-video-resolution=<yes|no>``
+ Override the image subtitle resolution with the video resolution
+ (default: no). Normally, the subtitle canvas is fit into the video canvas
+ (e.g. letterboxed). Setting this option uses the video size as subtitle
+ canvas size. Can be useful to test broken subtitles, which often happen
+ when the video was trancoded, while attempting to keep the old subtitles.
+
+``--sub-ass``, ``--no-sub-ass``
+ Render ASS subtitles natively (enabled by default).
+
+ .. note::
+
+ This has been deprecated by ``--sub-ass-override=strip``. You also
+ may need ``--embeddedfonts=no`` to get the same behavior. Also,
+ using ``--sub-ass-override=style`` should give better results
+ without breaking subtitles too much.
+
+ If ``--no-sub-ass`` is specified, all tags and style declarations are
+ stripped and ignored on display. The subtitle renderer uses the font style
+ as specified by the ``--sub-`` options instead.
+
+ .. note::
+
+ Using ``--no-sub-ass`` may lead to incorrect or completely broken
+ rendering of ASS/SSA subtitles. It can sometimes be useful to forcibly
+ override the styling of ASS subtitles, but should be avoided in general.
+
+``--sub-auto=<no|exact|fuzzy|all>``, ``--no-sub-auto``
+ Load additional subtitle files matching the video filename. The parameter
+ specifies how external subtitle files are matched. ``exact`` is enabled by
+ default.
+
+ :no: Don't automatically load external subtitle files.
+ :exact: Load the media filename with subtitle file extension and possibly
+ language suffixes (default).
+ :fuzzy: Load all subs containing the media filename.
+ :all: Load all subs in the current and ``--sub-file-paths`` directories.
+
+``--sub-auto-exts=ext1,ext2,...``
+ Subtitle extentions to try and match when using ``--sub-auto``. Note that
+ modifying this list will also affect what mpv recognizes as subtitles when
+ using drag and drop.
+
+ This is a string list option. See `List Options`_ for details.
+
+``--sub-codepage=<codepage>``
+ You can use this option to specify the subtitle codepage. uchardet will be
+ used to guess the charset. (If mpv was not compiled with uchardet, then
+ ``utf-8`` is the effective default.)
+
+ The default value for this option is ``auto``, which enables autodetection.
+
+ The following steps are taken to determine the final codepage, in order:
+
+ - if the specific codepage has a ``+``, use that codepage
+ - if the data looks like UTF-8, assume it is UTF-8
+ - if ``--sub-codepage`` is set to a specific codepage, use that
+ - run uchardet, and if successful, use that
+ - otherwise, use ``UTF-8-BROKEN``
+
+ .. admonition:: Examples
+
+ - ``--sub-codepage=latin2`` Use Latin 2 if input is not UTF-8.
+ - ``--sub-codepage=+cp1250`` Always force recoding to cp1250.
+
+ The pseudo codepage ``UTF-8-BROKEN`` is used internally. If it's set,
+ subtitles are interpreted as UTF-8 with "Latin 1" as fallback for bytes
+ which are not valid UTF-8 sequences. iconv is never involved in this mode.
+
+ .. note::
+
+ This works for text subtitle files only. Other types of subtitles (in
+ particular subtitles in mkv files) are always assumed to be UTF-8.
+
+
+``--sub-stretch-durations=<yes|no>``
+ Stretch a subtitle duration so it ends when the next one starts.
+ Should help with subtitles which erroneously have zero durations.
+
+ .. note::
+
+ Only applies to text subtitles.
+
+``--sub-fix-timing=<yes|no>``
+ Adjust subtitle timing is to remove minor gaps or overlaps between
+ subtitles (if the difference is smaller than 210 ms, the gap or overlap
+ is removed).
+
+``--sub-forced-events-only=<yes|no>``
+ Enabling this displays only forced events within subtitle streams. Only
+ some bitmap subtitle formats (such as DVD or PGS) are capable of having a
+ mixture of forced and unforced events within the stream. Enabling this on
+ text subtitles will cause no subtitles to be displayed (default: ``no``).
+
+``--sub-fps=<rate>``
+ Specify the framerate of the subtitle file (default: video fps). Affects
+ text subtitles only.
+
+ .. note::
+
+ ``<rate>`` > video fps speeds the subtitles up for frame-based
+ subtitle files and slows them down for time-based ones.
+
+ See also: ``--sub-speed``.
+
+``--sub-gauss=<0.0-3.0>``
+ Apply Gaussian blur to image subtitles (default: 0). This can help to make
+ pixelated DVD/Vobsubs look nicer. A value other than 0 also switches to
+ software subtitle scaling. Might be slow.
+
+ .. note::
+
+ Never applied to text subtitles.
+
+``--sub-gray``
+ Convert image subtitles to grayscale. Can help to make yellow DVD/Vobsubs
+ look nicer.
+
+ .. note::
+
+ Never applied to text subtitles.
+
+``--sub-file-paths=<path-list>``
+ Specify extra directories to search for subtitles matching the video.
+ Multiple directories can be separated by ":" (";" on Windows).
+ Paths can be relative or absolute. Relative paths are interpreted relative
+ to video file directory.
+ If the file is a URL, only absolute paths and ``sub`` configuration
+ subdirectory will be scanned.
+
+ .. admonition:: Example
+
+ Assuming that ``/path/to/video/video.avi`` is played and
+ ``--sub-file-paths=sub:subtitles`` is specified, mpv
+ searches for subtitle files in these directories:
+
+ - ``/path/to/video/``
+ - ``/path/to/video/sub/``
+ - ``/path/to/video/subtitles/``
+ - the ``sub`` configuration subdirectory (usually ``~/.config/mpv/sub/``)
+
+ This is a path list option. See `List Options`_ for details.
+
+``--sub-visibility``, ``--no-sub-visibility``
+ Can be used to disable display of subtitles, but still select and decode
+ them.
+
+``--secondary-sub-visibility``, ``--no-secondary-sub-visibility``
+ Can be used to disable display of secondary subtitles, but still select and
+ decode them.
+
+``--sub-clear-on-seek``
+ (Obscure, rarely useful.) Can be used to play broken mkv files with
+ duplicate ReadOrder fields. ReadOrder is the first field in a
+ Matroska-style ASS subtitle packets. It should be unique, and libass
+ uses it for fast elimination of duplicates. This option disables caching
+ of subtitles across seeks, so after a seek libass can't eliminate subtitle
+ packets with the same ReadOrder as earlier packets.
+
+``--teletext-page=<1-999>``
+ This works for ``dvb_teletext`` subtitle streams, and if FFmpeg has been
+ compiled with support for it.
+
+``--sub-past-video-end``
+ After the last frame of video, if this option is enabled, subtitles will
+ continue to update based on audio timestamps. Otherwise, the subtitles
+ for the last video frame will stay onscreen.
+
+ Default: disabled
+
+``--sub-font=<name>``
+ Specify font to use for subtitles that do not themselves
+ specify a particular font. The default is ``sans-serif``.
+
+ .. admonition:: Examples
+
+ - ``--sub-font='Bitstream Vera Sans'``
+ - ``--sub-font='Comic Sans MS'``
+
+ .. note::
+
+ The ``--sub-font`` option (and many other style related ``--sub-``
+ options) are ignored when ASS-subtitles are rendered, unless the
+ ``--no-sub-ass`` option is specified.
+
+ This used to support fontconfig patterns. Starting with libass 0.13.0,
+ this stopped working.
+
+``--sub-font-size=<size>``
+ Specify the sub font size. The unit is the size in scaled pixels at a
+ window height of 720. The actual pixel size is scaled with the window
+ height: if the window height is larger or smaller than 720, the actual size
+ of the text increases or decreases as well.
+
+ Default: 55.
+
+``--sub-back-color=<color>``
+ See ``--sub-color``. Color used for sub text background. You can use
+ ``--sub-shadow-offset`` to change its size relative to the text.
+
+``--sub-blur=<0..20.0>``
+ Gaussian blur factor. 0 means no blur applied (default).
+
+``--sub-bold=<yes|no>``
+ Format text on bold.
+
+``--sub-italic=<yes|no>``
+ Format text on italic.
+
+``--sub-border-color=<color>``
+ See ``--sub-color``. Color used for the sub font border.
+
+``--sub-border-size=<size>``
+ Size of the sub font border in scaled pixels (see ``--sub-font-size``
+ for details). A value of 0 disables borders.
+
+ Default: 3.
+
+``--sub-color=<color>``
+ Specify the color used for unstyled text subtitles.
+
+ The color is specified in the form ``r/g/b``, where each color component
+ is specified as number in the range 0.0 to 1.0. It's also possible to
+ specify the transparency by using ``r/g/b/a``, where the alpha value 0
+ means fully transparent, and 1.0 means opaque. If the alpha component is
+ not given, the color is 100% opaque.
+
+ Passing a single number to the option sets the sub to gray, and the form
+ ``gray/a`` lets you specify alpha additionally.
+
+ .. admonition:: Examples
+
+ - ``--sub-color=1.0/0.0/0.0`` set sub to opaque red
+ - ``--sub-color=1.0/0.0/0.0/0.75`` set sub to opaque red with 75% alpha
+ - ``--sub-color=0.5/0.75`` set sub to 50% gray with 75% alpha
+
+ Alternatively, the color can be specified as a RGB hex triplet in the form
+ ``#RRGGBB``, where each 2-digit group expresses a color value in the
+ range 0 (``00``) to 255 (``FF``). For example, ``#FF0000`` is red.
+ This is similar to web colors. Alpha is given with ``#AARRGGBB``.
+
+ .. admonition:: Examples
+
+ - ``--sub-color='#FF0000'`` set sub to opaque red
+ - ``--sub-color='#C0808080'`` set sub to 50% gray with 75% alpha
+
+``--sub-margin-x=<size>``
+ Left and right screen margin for the subs in scaled pixels (see
+ ``--sub-font-size`` for details).
+
+ This option specifies the distance of the sub to the left, as well as at
+ which distance from the right border long sub text will be broken.
+
+ Default: 25.
+
+``--sub-margin-y=<size>``
+ Top and bottom screen margin for the subs in scaled pixels (see
+ ``--sub-font-size`` for details).
+
+ This option specifies the vertical margins of unstyled text subtitles.
+ If you just want to raise the vertical subtitle position, use ``--sub-pos``.
+
+ Default: 22.
+
+``--sub-align-x=<left|center|right>``
+ Control to which corner of the screen text subtitles should be
+ aligned to (default: ``center``).
+
+ Never applied to ASS subtitles, except in ``--no-sub-ass`` mode. Likewise,
+ this does not apply to image subtitles.
+
+``--sub-align-y=<top|center|bottom>``
+ Vertical position (default: ``bottom``).
+ Details see ``--sub-align-x``.
+
+``--sub-justify=<auto|left|center|right>``
+ Control how multi line subs are justified irrespective of where they
+ are aligned (default: ``auto`` which justifies as defined by
+ ``--sub-align-x``).
+ Left justification is recommended to make the subs easier to read
+ as it is easier for the eyes.
+
+``--sub-ass-justify=<yes|no>``
+ Applies justification as defined by ``--sub-justify`` on ASS subtitles
+ if ``--sub-ass-override`` is not set to ``no``.
+ Default: ``no``.
+
+``--sub-shadow-color=<color>``
+ See ``--sub-color``. Color used for sub text shadow.
+
+ .. note::
+
+ ignored when ``--sub-back-color`` is
+ specified (or more exactly: when that option is not set to completely
+ transparent).
+
+``--sub-shadow-offset=<size>``
+ Displacement of the sub text shadow in scaled pixels (see
+ ``--sub-font-size`` for details). A value of 0 disables shadows.
+
+ Default: 0.
+
+``--sub-spacing=<size>``
+ Horizontal 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.
+
+ Default: 0.
+
+``--sub-filter-sdh=<yes|no>``
+ Applies filter removing subtitle additions for the deaf or hard-of-hearing (SDH).
+ This is intended for English, but may in part work for other languages too.
+ The intention is that it can be always enabled so may not remove
+ all parts added.
+ It removes speaker labels (like MAN:), upper case text in parentheses and
+ any text in brackets.
+
+ Default: ``no``.
+
+``--sub-filter-sdh-harder=<yes|no>``
+ Do harder SDH filtering (if enabled by ``--sub-filter-sdh``).
+ Will also remove speaker labels and text within parentheses using both
+ lower and upper case letters.
+
+ Default: ``no``.
+
+``--sub-filter-regex-...=...``
+ Set a list of regular expressions to match on text subtitles, and remove any
+ lines that match (default: empty). This is a string list option. See
+ `List Options`_ for details. Normally, you should use
+ ``--sub-filter-regex-append=<regex>``, where each option use will append a
+ new regular expression, without having to fight escaping problems.
+
+ List items are matched in order. If a regular expression matches, the
+ process is stopped, and the subtitle line is discarded. The text matched
+ against is, by default, the ``Text`` field of ASS events (if the
+ subtitle format is different, it is always converted). This may include
+ formatting tags. Matching is case-insensitive, but how this is done depends
+ on the libc, and most likely works in ASCII only. It does not work on
+ bitmap/image subtitles. Unavailable on inferior OSes (requires POSIX regex
+ support).
+
+ .. admonition:: Example
+
+ ``--sub-filter-regex-append=opensubtitles\.org`` filters some ads.
+
+ Technically, using a list for matching is redundant, since you could just
+ use a single combined regular expression. But it helps with diagnosis,
+ ease of use, and temporarily disabling or enabling individual filters.
+
+ .. warning::
+
+ This is experimental. The semantics most likely will change, and if you
+ use this, you should be prepared to update the option later. Ideas
+ include replacing the regexes with a very primitive and small subset of
+ sed, or some method to control case-sensitivity.
+
+``--sub-filter-jsre-...=...``
+ Same as ``--sub-filter-regex`` but with JavaScript regular expressions.
+ Shares/affected-by all ``--sub-filter-regex-*`` control options (see below),
+ and also experimental. Requires only JavaScript support.
+
+``--sub-filter-regex-plain=<yes|no>``
+ Whether to first convert the ASS "Text" field to plain-text (default: no).
+ This strips ASS tags and applies ASS directives, like ``\N`` to new-line.
+ If the result is multi-line then the regexp anchors ``^`` and ``$`` match
+ each line, but still any match discards all lines.
+
+``--sub-filter-regex-warn=<yes|no>``
+ Log dropped lines with warning log level, instead of verbose (default: no).
+ Helpful for testing.
+
+``--sub-filter-regex-enable=<yes|no>``
+ Whether to enable regex filtering (default: yes). Note that if no regexes
+ are added to the ``--sub-filter-regex`` list, setting this option to ``yes``
+ has no effect. It's meant to easily disable or enable filtering
+ temporarily.
+
+``--sub-create-cc-track=<yes|no>``
+ For every video stream, create a closed captions track (default: no). The
+ only purpose is to make the track available for selection at the start of
+ playback, instead of creating it lazily. This applies only to
+ ``ATSC A53 Part 4 Closed Captions`` (displayed by mpv as subtitle tracks
+ using the codec ``eia_608``). The CC track is marked "default" and selected
+ according to the normal subtitle track selection rules. You can then use
+ ``--sid`` to explicitly select the correct track too.
+
+ If the video stream contains no closed captions, or if no video is being
+ decoded, the CC track will remain empty and will not show any text.
+
+``--sub-font-provider=<auto|none|fontconfig>``
+ Which libass font provider backend to use (default: auto). ``auto`` will
+ attempt to use the native font provider: fontconfig on Linux, CoreText on
+ macOS, DirectWrite on Windows. ``fontconfig`` forces fontconfig, if libass
+ was built with support (if not, it behaves like ``none``).
+
+ The ``none`` font provider effectively disables system fonts. It will still
+ attempt to use embedded fonts (unless ``--embeddedfonts=no`` is set; this is
+ the same behavior as with all other font providers), ``subfont.ttf`` if
+ provided, and fonts in the ``fonts`` sub-directory if provided. (The
+ fallback is more strict than that of other font providers, and if a font
+ name does not match, it may prefer not to render any text that uses the
+ missing font.)
+
+``--sub-fonts-dir=<path>``
+ Font files in this directory are used by mpv/libass for subtitles. Useful
+ if you do not want to install fonts to your system. Note that files in this
+ directory are loaded into memory before being used by mpv. If you have a
+ lot of fonts, consider using fonts.conf (see `FILES`_ section) to include
+ additional mpv user settings.
+
+ If this option is not specified, ``~~/fonts`` will be used by default.
+
+Window
+------
+
+``--title=<string>``
+ Set the window title. This is used for the video window, and if possible,
+ also sets the audio stream title.
+
+ Properties are expanded. (See `Property Expansion`_.)
+
+ .. warning::
+
+ There is a danger of this causing significant CPU usage, depending on
+ the properties used. Changing the window title is often a slow
+ operation, and if the title changes every frame, playback can be ruined.
+
+``--screen=<default|0-32>``
+ In multi-monitor configurations (i.e. a single desktop that spans across
+ multiple displays), this option tells mpv which screen to display the
+ video on.
+
+ .. admonition:: Note (X11)
+
+ This option does not work properly with all window managers. In these
+ cases, you can try to use ``--geometry`` to position the window
+ explicitly. It's also possible that the window manager provides native
+ features to control which screens application windows should use.
+
+ .. admonition:: Note (Wayland)
+
+ This option does not actually work on wayland since window placement is
+ not allowed. However setting this option does influence mpv's initial
+ guess at finding an output which may be useful for options like
+ ``--geometry`` or ``--autofit`` which depend on the monitor resolution.
+
+ See also ``--fs-screen``.
+
+``--screen-name=<string>``
+ In multi-monitor configurations, this option tells mpv which screen to
+ display the video on based on the screen name from the video backend. The
+ same caveats in the ``--screen`` option also apply here. This option is
+ ignored and does nothing if ``--screen`` is explicitly set.
+
+``--fullscreen``, ``--fs``
+ Fullscreen playback.
+
+``--fs-screen=<all|current|0-32>``
+ In multi-monitor configurations (i.e. a single desktop that spans across
+ multiple displays), this option tells mpv which screen to go fullscreen to.
+ If ``current`` is used mpv will fallback on what the user provided with
+ the ``screen`` option.
+
+ .. admonition:: Note (X11)
+
+ This option works properly only with window managers which
+ understand the EWMH ``_NET_WM_FULLSCREEN_MONITORS`` hint.
+
+ .. admonition:: Note (macOS)
+
+ ``all`` does not work on macOS and will behave like ``current``.
+
+ See also ``--screen``.
+
+``--fs-screen-name=<string>``
+ In multi-monitor configurations, this option tells mpv which screen to go
+ fullscreen to based on the screen name from the video backend. The same
+ caveats in the ``--fs-screen`` option also apply here. This option is
+ ignored and does nothing if ``--fs-screen`` is explicitly set.
+
+``--keep-open=<yes|no|always>``
+ Do not terminate when playing or seeking beyond the end of the file, and
+ there is no next file to be played (and ``--loop`` is not used).
+ Instead, pause the player. When trying to seek beyond end of the file, the
+ player will attempt to seek to the last frame.
+
+ Normally, this will act like ``set pause yes`` on EOF, unless the
+ ``--keep-open-pause=no`` option is set.
+
+ The following arguments can be given:
+
+ :no: If the current file ends, go to the next file or terminate.
+ (Default.)
+ :yes: Don't terminate if the current file is the last playlist entry.
+ Equivalent to ``--keep-open`` without arguments.
+ :always: Like ``yes``, but also applies to files before the last playlist
+ entry. This means playback will never automatically advance to
+ the next file.
+
+ .. note::
+
+ This option is not respected when using ``--frames``. Explicitly
+ skipping to the next file if the binding uses ``force`` will terminate
+ playback as well.
+
+ Also, if errors or unusual circumstances happen, the player can quit
+ anyway.
+
+ Since mpv 0.6.0, this doesn't pause if there is a next file in the playlist,
+ or the playlist is looped. Approximately, this will pause when the player
+ would normally exit, but in practice there are corner cases in which this
+ is not the case (e.g. ``mpv --keep-open file.mkv /dev/null`` will play
+ file.mkv normally, then fail to open ``/dev/null``, then exit). (In
+ mpv 0.8.0, ``always`` was introduced, which restores the old behavior.)
+
+``--keep-open-pause=<yes|no>``
+ If set to ``no``, instead of pausing when ``--keep-open`` is active, just
+ stop at end of file and continue playing forward when you seek backwards
+ until end where it stops again. Default: ``yes``.
+
+``--image-display-duration=<seconds|inf>``
+ If the current file is an image, play the image for the given amount of
+ seconds (default: 1). ``inf`` means the file is kept open forever (until
+ the user stops playback manually).
+
+ Unlike ``--keep-open``, the player is not paused, but simply continues
+ playback until the time has elapsed. (It should not use any resources
+ during "playback".)
+
+ This affects image files, which are defined as having only 1 video frame
+ and no audio. The player may recognize certain non-images as images, for
+ example if ``--length`` is used to reduce the length to 1 frame, or if
+ you seek to the last frame.
+
+ This option does not affect the framerate used for ``mf://`` or
+ ``--merge-files``. For that, use ``--mf-fps`` instead.
+
+ Setting ``--image-display-duration`` hides the OSC and does not track
+ playback time on the command-line output, and also does not duplicate
+ the image frame when encoding. To force the player into "dumb mode"
+ and actually count out seconds, or to duplicate the image when
+ encoding, you need to use ``--demuxer=lavf --demuxer-lavf-o=loop=1``,
+ and use ``--length`` or ``--frames`` to stop after a particular time.
+
+``--force-window=<yes|no|immediate>``
+ Create a video output window even if there is no video. This can be useful
+ when pretending that mpv is a GUI application. Currently, the window
+ always has the size 640x480, and is subject to ``--geometry``,
+ ``--autofit``, and similar options.
+
+ .. warning::
+
+ The window is created only after initialization (to make sure default
+ window placement still works if the video size is different from the
+ ``--force-window`` default window size). This can be a problem if
+ initialization doesn't work perfectly, such as when opening URLs with
+ bad network connection, or opening broken video files. The ``immediate``
+ mode can be used to create the window always on program start, but this
+ may cause other issues.
+
+``--taskbar-progress``, ``--no-taskbar-progress``
+ (Windows only)
+ Enable/disable playback progress rendering in taskbar (Windows 7 and above).
+
+ Enabled by default.
+
+``--snap-window``
+ (Windows only) Snap the player window to screen edges.
+
+``--drag-and-drop=<no|auto|replace|append>``
+ (X11, Wayland and Windows only)
+ Controls the default behavior of drag and drop on platforms that support this.
+ ``auto`` will obey what the underlying os/platform gives mpv. Typically, holding
+ shift during the drag and drop will append the item to the playlist. Otherwise,
+ it will completely replace it. ``replace`` and ``append`` always force replacing
+ and appending to the playlist respectively. ``no`` disables all drag and drop
+ behavior.
+
+``--ontop``
+ Makes the player window stay on top of other windows.
+
+ On Windows, if combined with fullscreen mode, this causes mpv to be
+ treated as exclusive fullscreen window that bypasses the Desktop Window
+ Manager.
+
+``--ontop-level=<window|system|desktop|level>``
+ (macOS only)
+ Sets the level of an ontop window (default: window).
+
+ :window: On top of all other windows.
+ :system: On top of system elements like Taskbar, Menubar and Dock.
+ :desktop: On top of the Desktop behind windows and Desktop icons.
+ :level: A level as integer.
+
+``--focus-on-open``, ``--no-focus-on-open``
+ (macOS only)
+ Focus the video window on creation and makes it the front most window. This
+ is on by default.
+
+``--window-corners=<default|donotround|round|roundsmall>``
+ (Windows only)
+ Set the preference for window corner rounding.
+
+ :default: Let the system decide whether or not to round window corners
+ :donotround: Never round window corners
+ :round: Round the corners if appropriate
+ :roundsmall: Round the corners if appropriate, with a small radius
+
+``--border``, ``--no-border``
+ Play video with window border and decorations. Since this is on by
+ default, use ``--no-border`` to disable the standard window decorations.
+
+``--title-bar``, ``--no-title-bar``
+ (Windows only)
+ Play video with the window title bar. Since this is on by default,
+ use --no-title-bar to hide the title bar. The --no-border option takes
+ precedence.
+
+``--on-all-workspaces``
+ (X11 and macOS only)
+ Show the video window on all virtual desktops.
+
+``--geometry=<[W[xH]][+-x+-y][/WS]>``, ``--geometry=<x:y>``
+ Adjust the initial window position or size. ``W`` and ``H`` set the window
+ size in pixels. ``x`` and ``y`` set the window position, measured in pixels
+ from the top-left corner of the screen to the top-left corner of the image
+ being displayed. If a percentage sign (``%``) is given after the argument,
+ it turns the value into a percentage of the screen size in that direction.
+ Positions are specified similar to the standard X11 ``--geometry`` option
+ format, in which e.g. +10-50 means "place 10 pixels from the left border and
+ 50 pixels from the lower border" and "--20+-10" means "place 20 pixels
+ beyond the right and 10 pixels beyond the top border". A trailing ``/``
+ followed by an integer denotes on which workspace (virtual desktop) the
+ window should appear (X11 only).
+
+ If an external window is specified using the ``--wid`` option, this
+ option is ignored.
+
+ The coordinates are relative to the screen given with ``--screen`` for the
+ video output drivers that fully support ``--screen``.
+
+ .. note::
+
+ Generally only supported by GUI VOs. Ignored for encoding.
+
+ .. admonition:: Note (macOS)
+
+ On macOS, the origin of the screen coordinate system is located on the
+ bottom-left corner. For instance, ``0:0`` will place the window at the
+ bottom-left of the screen.
+
+ .. admonition:: Note (X11)
+
+ This option does not work properly with all window managers.
+
+ .. admonition:: Examples
+
+ ``50:40``
+ Places the window at x=50, y=40.
+ ``50%:50%``
+ Places the window in the middle of the screen.
+ ``100%:100%``
+ Places the window at the bottom right corner of the screen.
+ ``50%``
+ Sets the window width to half the screen width. Window height is set
+ so that the window has the video aspect ratio.
+ ``50%x50%``
+ Forces the window width and height to half the screen width and
+ height. Will show black borders to compensate for the video aspect
+ ratio (with most VOs and without ``--no-keepaspect``).
+ ``50%+10+10/2``
+ Sets the window to half the screen widths, and positions it 10
+ pixels below/left of the top left corner of the screen, on the
+ second workspace.
+
+ See also ``--autofit`` and ``--autofit-larger`` for fitting the window into
+ a given size without changing aspect ratio.
+
+``--autofit=<[W[xH]]>``
+ Set the initial window size to a maximum size specified by ``WxH``, without
+ changing the window's aspect ratio. The size is measured in pixels, or if
+ a number is followed by a percentage sign (``%``), in percents of the
+ screen size.
+
+ This option never changes the aspect ratio of the window. If the aspect
+ ratio mismatches, the window's size is reduced until it fits into the
+ specified size.
+
+ Window position is not taken into account, nor is it modified by this
+ option (the window manager still may place the window differently depending
+ on size). Use ``--geometry`` to change the window position. Its effects
+ are applied after this option.
+
+ See ``--geometry`` for details how this is handled with multi-monitor
+ setups.
+
+ Use ``--autofit-larger`` instead if you just want to limit the maximum size
+ of the window, rather than always forcing a window size.
+
+ Use ``--geometry`` if you want to force both window width and height to a
+ specific size.
+
+ .. note::
+
+ Generally only supported by GUI VOs. Ignored for encoding.
+
+ .. admonition:: Examples
+
+ ``70%``
+ Make the window width 70% of the screen size, keeping aspect ratio.
+ ``1000``
+ Set the window width to 1000 pixels, keeping aspect ratio.
+ ``70%x60%``
+ Make the window as large as possible, without being wider than 70%
+ of the screen width, or higher than 60% of the screen height.
+
+``--autofit-larger=<[W[xH]]>``
+ This option behaves exactly like ``--autofit``, except the window size is
+ only changed if the window would be larger than the specified size.
+
+ .. admonition:: Example
+
+ ``90%x80%``
+ If the video is larger than 90% of the screen width or 80% of the
+ screen height, make the window smaller until either its width is 90%
+ of the screen, or its height is 80% of the screen.
+
+``--autofit-smaller=<[W[xH]]>``
+ This option behaves exactly like ``--autofit``, except that it sets the
+ minimum size of the window (just as ``--autofit-larger`` sets the maximum).
+
+ .. admonition:: Example
+
+ ``500x500``
+ Make the window at least 500 pixels wide and 500 pixels high
+ (depending on the video aspect ratio, the width or height will be
+ larger than 500 in order to keep the aspect ratio the same).
+
+``--window-scale=<factor>``
+ Resize the video window to a multiple (or fraction) of the video size. This
+ option is applied before ``--autofit`` and other options are applied (so
+ they override this option).
+
+ For example, ``--window-scale=0.5`` would show the window at half the
+ video size.
+
+``--window-minimized=<yes|no>``
+ Whether the video window is minimized or not. Setting this will minimize,
+ or unminimize, the video window if the current VO supports it. Note that
+ some VOs may support minimization while not supporting unminimization
+ (eg: Wayland).
+
+ Whether this option and ``--window-maximized`` work on program start or
+ at runtime, and whether they're (at runtime) updated to reflect the actual
+ window state, heavily depends on the VO and the windowing system. Some VOs
+ simply do not implement them or parts of them, while other VOs may be
+ restricted by the windowing systems (especially Wayland).
+
+``--window-maximized=<yes|no>``
+ Whether the video window is maximized or not. Setting this will maximize,
+ or unmaximize, the video window if the current VO supports it. See
+ ``--window-minimized`` for further remarks.
+
+``--cursor-autohide=<number|no|always>``
+ Make mouse cursor automatically hide after given number of milliseconds
+ (default: 1000 ms). ``no`` will disable cursor autohide. ``always``
+ means the cursor will stay hidden.
+
+``--cursor-autohide-fs-only``
+ If this option is given, the cursor is always visible in windowed mode. In
+ fullscreen mode, the cursor is shown or hidden according to
+ ``--cursor-autohide``.
+
+``--force-rgba-osd-rendering``
+ Change how some video outputs render the OSD and text subtitles. This
+ does not change appearance of the subtitles and only has performance
+ implications. For VOs which support native ASS rendering (like ``gpu``,
+ ``vdpau``, ``direct3d``), this can be slightly faster or slower,
+ depending on GPU drivers and hardware. For other VOs, this just makes
+ rendering slower.
+
+``--force-render``
+ Forces mpv to always render frames regardless of the visibility of the
+ window. Currently only affects X11 and Wayland VOs since they are the
+ only ones that have this optimization (i.e. everything else always renders
+ regardless of visibility).
+
+``--force-window-position``
+ Forcefully move mpv's video output window to default location whenever
+ there is a change in video parameters, video stream or file. This used to
+ be the default behavior. Currently only affects X11 and SDL VOs.
+
+``--auto-window-resize=<yes|no>``
+ (Wayland, Win32, and X11)
+ By default, mpv will automatically resize itself if the video's size changes
+ (i.e. advancing forward in a playlist). Setting this to ``no`` disables this
+ behavior so the window size never changes automatically. This option does
+ not have any impact on the ``--autofit`` or ``--geometry`` options.
+
+``--no-keepaspect``, ``--keepaspect``
+ ``--no-keepaspect`` will always stretch the video to window size, and will
+ disable the window manager hints that force the window aspect ratio.
+ (Ignored in fullscreen mode.)
+
+``--no-keepaspect-window``, ``--keepaspect-window``
+ ``--keepaspect-window`` (the default) will lock the window size to the
+ video aspect. ``--no-keepaspect-window`` disables this behavior, and will
+ instead add black bars if window aspect and video aspect mismatch. Whether
+ this actually works depends on the VO backend.
+ (Ignored in fullscreen mode.)
+
+``--monitoraspect=<ratio>``
+ Set the aspect ratio of your monitor or TV screen. A value of 0 disables a
+ previous setting (e.g. in the config file). Overrides the
+ ``--monitorpixelaspect`` setting if enabled.
+
+ See also ``--monitorpixelaspect`` and ``--video-aspect-override``.
+
+ .. admonition:: Examples
+
+ - ``--monitoraspect=4:3`` or ``--monitoraspect=1.3333``
+ - ``--monitoraspect=16:9`` or ``--monitoraspect=1.7777``
+
+``--hidpi-window-scale``, ``--no-hidpi-window-scale``
+ (macOS, Windows, X11, and Wayland only)
+ Scale the window size according to the backing scale factor (default: yes).
+ On regular HiDPI resolutions the window opens with double the size but appears
+ as having the same size as on non-HiDPI resolutions.
+
+``--native-fs``, ``--no-native-fs``
+ (macOS only)
+ Uses the native fullscreen mechanism of the OS (default: yes).
+
+``--monitorpixelaspect=<ratio>``
+ Set the aspect of a single pixel of your monitor or TV screen (default:
+ 1). A value of 1 means square pixels (correct for (almost?) all LCDs). See
+ also ``--monitoraspect`` and ``--video-aspect-override``.
+
+``--stop-screensaver=<yes|no|always>``
+ Turns off the screensaver (or screen blanker and similar mechanisms) at
+ startup and turns it on again on exit (default: yes). When using ``yes``,
+ the screensaver will re-enable when playback is not active. ``always`` will
+ always disable the screensaver. Note that stopping the screensaver is only
+ possible if a video output is available (i.e. there is an open mpv window).
+
+ This is not supported on all video outputs or platforms. Sometimes it is
+ implemented, but does not work (especially with Linux "desktops"). Read the
+ `Disabling Screensaver`_ section very carefully.
+
+``--wid=<ID>``
+ This tells mpv to attach to an existing window. If a VO is selected that
+ supports this option, it will use that window for video output. mpv will
+ scale the video to the size of this window, and will add black bars to
+ compensate if the aspect ratio of the video is different.
+
+ 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
+ ``uint32_t`` (all Windows handles are 32-bit), this is important as mpv will
+ not accept negative values. 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``).
+
+``--no-window-dragging``
+ Don't move the window when clicking on it and moving the mouse pointer.
+
+``--x11-name=<string>``
+ 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.
+
+``--x11-present=<no|auto|yes>``
+ Whether or not to use presentation statistics from X11's presentation
+ extension (default: ``auto``).
+
+ mpv asks X11 for present events which it then may use for more accurate
+ frame presentation. This only has an effect if ``--video-sync=display-...``
+ is being used.
+
+ The auto option enumerates XRandr providers for autodetection. If amd, radeon,
+ intel, or nouveau (the standard x86 Mesa drivers) is found and nvidia is NOT
+ found, presentation feedback is enabled. Other drivers are not assumed to
+ work, so they are not enabled automatically.
+
+ ``yes`` or ``no`` can still be passed regardless to enable/disable this
+ mechanism in case there is good/bad behavior with whatever your combination
+ of hardware/drivers/etc. happens to be.
+
+``--x11-wid-title`` ``--no-x11-wid-title``
+ Whether or not to set the window title when mpv is embedded on X11 (default:
+ ``no``).
+
+
+Disc Devices
+------------
+
+``--cdda-device=<path>``
+ Specify the CD device for CDDA playback (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).
+
+ .. admonition:: Example
+
+ ``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.
+
+ .. admonition:: Example
+
+ ``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-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.
+
+ This is a key/value list option. See `List Options`_ for details.
+
+ .. admonition:: Example
+
+ ``--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>``
+ 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.
+
+``--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``.
+
+ .. admonition:: Example
+
+ 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-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.
+
+ See ``--list-options`` for defaults and value range. ``<bytesize>`` options
+ accept suffixes such as ``KiB`` and ``MiB``.
+
+``--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-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.)
+
+``--demuxer-hysteresis-secs=<seconds>``
+ Once the demuxer limit is reached (``--demuxer-max-bytes``,
+ ``--demuxer-readahead-secs`` or ``--cache-secs``), this value can be used
+ to specify a hysteresis before the demuxer will buffer ahead again. This
+ specifies the maximum number of seconds from the current playback position
+ that needs to be remaining in the cache before the demuxer will continue
+ buffering ahead.
+
+ For example, with a value of 10 seconds specified, the demuxer will buffer
+ ahead up to the demuxer limit and won't start buffering ahead again until
+ there is only 10 seconds of content left in the cache.
+
+ This can provide significant power savings and reduce load by making the
+ demuxer only buffer ahead in chunks at a time rather than buffering ahead
+ nonstop to keep the cache filled.
+
+ If you want to save power and reduce load, configure this to a small number
+ that's much lower than ``--cache-secs`` or ``--demuxer-readahead-secs``.
+ If it takes a long time to buffer anything at all for a given stream (like
+ when reading from a very slow disk is involved), then the hysteresis value
+ should be larger to compensate.
+
+ The default value is 0 seconds, which disables the caching hysteresis. A
+ value of 10 seconds probably works well for most usecases.
+
+``--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.
+
+ Highly experimental.
+
+``--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.
+
+``--directory-mode=<auto|lazy|recursive|ignore>``
+ When opening a directory, open subdirectories lazily, recursively or not at
+ all. The default is ``auto``, which behaves like ``recursive`` with
+ ``--shuffle``, and like ``lazy`` otherwise.
+
+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.
+
+ .. admonition:: Example
+
+ ``--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-cursor-passthrough``, ``--no-input-cursor-passthrough``
+ (X11 and Wayland only)
+ Tell the backend windowing system to allow pointer events to passthrough
+ the mpv window. This allows windows under mpv to instead receive pointer
+ events as if the mpv window was never there.
+
+``--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.
+
+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``.
+
+ .. admonition:: Examples
+
+ - ``--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.
+
+ Default: 55.
+
+``--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-playing-msg-duration=<time>``
+ Set the duration of ``osd-playing-msg`` in ms. If this is unset,
+ ``osd-playing-msg`` stays on screen for the duration of ``osd-duration``.
+
+``--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.
+
+``--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.
+
+ Default: 3.
+
+``--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.
+
+ Default: 25.
+
+``--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.
+
+ Default: 22.
+
+``--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.
+
+ .. note::
+
+ ignored when ``--osd-back-color`` is specified (or more exactly: when
+ that option is not set to completely transparent).
+
+``--osd-shadow-offset=<size>``
+ Displacement of the OSD shadow in scaled pixels (see
+ ``--sub-font-size`` for details). A value of 0 disables shadows.
+
+ Default: 0.
+
+``--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.
+
+ Default: 0.
+
+``--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.
+
+``--osd-fonts-dir=<path>``
+ See ``--sub-fonts-dir`` for details. Defaults to ``~~/fonts``.
+
+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
+ :jxl: JPEG XL
+ :avif: AVIF
+
+``--screenshot-tag-colorspace=<yes|no>``
+ Tag screenshots with the appropriate colorspace (default: yes).
+
+ Note that not all formats support this. When it is unsupported, or when
+ this option is disabled, screenshots will be converted to sRGB before
+ being written.
+
+``--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-dir=<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.
+
+ ``--screenshot-directory`` is an alias for ``--screenshot-dir``.
+
+ 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-jxl-distance=<0-15>``
+ Set the JPEG XL Butteraugli distance. Lower means better quality. Lossless
+ is 0.0, and 1.0 is approximately equivalent to JPEG quality 90 for
+ photographic content. Use 0.1 for "visually lossless" screenshots. The
+ default is 1.0.
+
+``--screenshot-jxl-effort=<1-9>``
+ Set the JPEG XL compression effort. Higher effort (usually) means better
+ compression, but takes more CPU time. The default is 4.
+
+``--screenshot-avif-encoder=<encoder>``
+ Specify the AV1 encoder to be used by libavcodec for encoding avif
+ screenshots.
+
+ Default: ``libaom-av1``
+
+``--screenshot-avif-pixfmt=<format>``
+ Specify the pixel format to the libavcodec encoder.
+
+ Default: ``yuv420p``
+
+``--screenshot-avif-opts=key1=value1,key2=value2,...``
+ Specifies libavcodec options for selected encoder. For more information,
+ consult the FFmpeg documentation.
+
+ Default: ``usage=allintra,crf=32,cpu-used=8,tune=ssim``
+
+ Note: the default is only guaranteed to work with the libaom-av1 encoder.
+ Above options may not be valid and or optimal for other encoders.
+
+ This is a key/value list option. See `List Options`_ for details.
+
+ .. admonition:: Example
+
+ "``--screenshot-avif-opts=crf=32,aq-mode=complexity``"
+ sets the crf to 32 and quantization (aq-mode) to complexity based.
+
+``--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 (only vo_gpu
+ or vo_gpu_next 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.
+
+ 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.
+ If ``window`` mode is used, the image will also be scaled in software
+ which may not accurately reflect the actual visible result.
+
+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.
+
+ This is a key/value list option. See `List Options`_ for details.
+
+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
+
+ .. admonition:: Example
+
+ ::
+
+ 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
+ :force: use terminal OSD even if video output active
+
+ The ``auto`` mode also enables terminal OSD if ``--video-osd=no`` was set.
+
+``--term-osd-bar``, ``--no-term-osd-bar``
+ Enable printing a progress bar under the status line on the terminal.
+ (Disabled by default.)
+
+``--term-osd-bar-chars=<string>``
+ Customize the ``--term-osd-bar`` feature. The string is expected to
+ consist of 5 characters (start, left space, position indicator,
+ right space, end). You can use Unicode characters, but note that double-
+ width characters will not be treated correctly.
+
+ Default: ``[-+-]``.
+
+``--term-playing-msg=<string>``
+ Print out a string after starting playback. The string is expanded for
+ properties, e.g. ``--term-playing-msg='file: ${filename}'`` will print the string
+ ``file:`` followed by a space and the currently played filename.
+
+ See `Property Expansion`_.
+
+``--term-remaining-playtime``, ``--no-term-remaining-playtime``
+ When printing out the time on the terminal, show the remaining time adjusted by
+ playback speed. Default: ``yes``
+
+``--term-status-msg=<string>``
+ Print out a custom string during playback instead of the standard status
+ line. Expands properties. See `Property Expansion`_.
+
+``--term-title=<string>``
+ Set the terminal title. Currently, this simply concatenates the escape
+ sequence setting the window title with the provided (property expanded)
+ string. This will mess up if the expanded string contain bytes that end the
+ escape sequence, or if the terminal does not understand the sequence. The
+ latter probably includes the regrettable win32.
+
+ Expands properties. See `Property Expansion`_.
+
+``--msg-module``
+ Prepend module name to each console message.
+
+``--msg-time``
+ Prepend timing information to each console message. The time is in
+ seconds since the player process was started (technically, slightly
+ later actually), using a monotonic time source depending on the OS. This
+ is ``CLOCK_MONOTONIC`` on sane UNIX variants.
+
+Cache
+-----
+
+``--cache=<yes|no|auto>``
+ Decide whether to use network cache settings (default: auto).
+
+ If enabled, use up to ``--cache-secs`` for the cache size (but still limited
+ to ``--demuxer-max-bytes``), and make the cached data seekable (if possible).
+ If disabled, ``--cache-pause`` and related are implicitly disabled.
+
+ The ``auto`` choice enables this depending on whether the stream is thought
+ to involve network accesses or other slow media (this is an imperfect
+ heuristic).
+
+ Before mpv 0.30.0, this used to accept a number, which specified the size
+ of the cache in kilobytes. Use e.g. ``--cache --demuxer-max-bytes=123k``
+ instead.
+
+``--no-cache``
+ Turn off input stream caching. See ``--cache``.
+
+``--cache-secs=<seconds>``
+ How many seconds of audio/video to prefetch if the cache is active. This
+ overrides the ``--demuxer-readahead-secs`` option if and only if the cache
+ is enabled and the value is larger. The default value is set to something
+ very high, so the actually achieved readahead will usually be limited by
+ the value of the ``--demuxer-max-bytes`` option. Setting this option is
+ usually only useful for limiting readahead.
+
+``--cache-on-disk=<yes|no>``
+ Write packet data to a temporary file, instead of keeping them in memory.
+ This makes sense only with ``--cache``. If the normal cache is disabled,
+ this option is ignored.
+
+ The cache file is append-only. Even if the player appears to prune data, the
+ file space freed by it is not reused. The cache file is deleted when
+ playback is closed.
+
+ Note that packet metadata is still kept in memory. ``--demuxer-max-bytes``
+ and related options are applied to metadata *only*. The size of this
+ metadata varies, but 50 MB per hour of media is typical. The cache
+ statistics will report this metadats size, instead of the size of the cache
+ file. If the metadata hits the size limits, the metadata is pruned (but not
+ the cache file).
+
+ When the media is closed, the cache file is deleted. A cache file is
+ generally worthless after the media is closed, and it's hard to retrieve
+ any media data from it (it's not supported by design).
+
+ If the option is enabled at runtime, the cache file is created, but old data
+ will remain in the memory cache. If the option is disabled at runtime, old
+ data remains in the disk cache, and the cache file is not closed until the
+ media is closed. If the option is disabled and enabled again, it will
+ continue to use the cache file that was opened first.
+
+``--demuxer-cache-dir=<path>``
+ Directory where to create temporary files. Cache is stored in the system's
+ cache directory (usually ``~/.cache/mpv``) if this is unset.
+
+ Currently, this is used for ``--cache-on-disk`` only.
+
+``--cache-pause=<yes|no>``
+ Whether the player should automatically pause when the cache runs out of
+ data and stalls decoding/playback (default: yes). If enabled, it will
+ pause and unpause once more data is available, aka "buffering".
+
+``--cache-pause-wait=<seconds>``
+ Number of seconds the packet cache should have buffered before starting
+ playback again if "buffering" was entered (default: 1). This can be used
+ to control how long the player rebuffers if ``--cache-pause`` is enabled,
+ and the demuxer underruns. If the given time is higher than the maximum
+ set with ``--cache-secs`` or ``--demuxer-readahead-secs``, or prefetching
+ ends before that for some other reason (like file end or maximum configured
+ cache size reached), playback resumes earlier.
+
+``--cache-pause-initial=<yes|no>``
+ Enter "buffering" mode before starting playback (default: no). This can be
+ used to ensure playback starts smoothly, in exchange for waiting some time
+ to prefetch network data (as controlled by ``--cache-pause-wait``). For
+ example, some common behavior is that playback starts, but network caches
+ immediately underrun when trying to decode more data as playback progresses.
+
+ Another thing that can happen is that the network prefetching is so CPU
+ demanding (due to demuxing in the background) that playback drops frames
+ at first. In these cases, it helps enabling this option, and setting
+ ``--cache-secs`` and ``--cache-pause-wait`` to roughly the same value.
+
+ This option also triggers when playback is restarted after seeking.
+
+``--demuxer-cache-unlink-files=<immediate|whendone|no>``
+ Whether or when to unlink cache files (default: immediate). This affects
+ cache files which are inherently temporary, and which make no sense to
+ remain on disk after the player terminates. This is a debugging option.
+
+ ``immediate``
+ Unlink cache file after they were created. The cache files won't be
+ visible anymore, even though they're in use. This ensures they are
+ guaranteed to be removed from disk when the player terminates, even if
+ it crashes.
+
+ ``whendone``
+ Delete cache files after they are closed.
+
+ ``no``
+ Don't delete cache files. They will consume disk space without having a
+ use.
+
+ Currently, this is used for ``--cache-on-disk`` only.
+
+``--stream-buffer-size=<bytesize>``
+ Size of the low level stream byte buffer (default: 128KB). This is used as
+ buffer between demuxer and low level I/O (e.g. sockets). Generally, this
+ can be very small, and the main purpose is similar to the internal buffer
+ FILE in the C standard library will have.
+
+ Half of the buffer is always used for guaranteed seek back, which is
+ important for unseekable input.
+
+ There are known cases where this can help performance to set a large buffer:
+
+ 1. mp4 files. libavformat may trigger many small seeks in both
+ directions, depending on how the file was muxed.
+
+ 2. Certain network filesystems, which do not have a cache, and where
+ small reads can be inefficient.
+
+ In other cases, setting this to a large value can reduce performance.
+
+ Usually, read accesses are at half the buffer size, but it may happen that
+ accesses are done alternating with smaller and larger sizes (this is due to
+ the internal ring buffer wrap-around).
+
+ See ``--list-options`` for defaults and value range. ``<bytesize>`` options
+ accept suffixes such as ``KiB`` and ``MiB``.
+
+``--vd-queue-enable=<yes|no>, --ad-queue-enable``
+ Enable running the video/audio decoder on a separate thread (default: no).
+ If enabled, the decoder is run on a separate thread, and a frame queue is
+ put between decoder and higher level playback logic. The size of the frame
+ queue is defined by the other options below.
+
+ This is probably quite pointless. libavcodec already has multithreaded
+ decoding (enabled by default), which makes this largely unnecessary. It
+ might help in some corner cases with high bandwidth video that is slow to
+ decode (in these cases libavcodec would block the playback logic, while
+ using a decoding thread would distribute the decoding time evenly without
+ affecting the playback logic). In other situations, it will simply make
+ seeking slower and use significantly more memory.
+
+ The queue size is restricted by the other ``--vd-queue-...`` options. The
+ final queue size is the minimum as indicated by the option with the lowest
+ limit. Each decoder/track has its own queue that may use the full configured
+ queue size.
+
+ Most queue options can be changed at runtime. ``--vd-queue-enable`` itself
+ (and the audio equivalent) update only if decoding is completely
+ reinitialized. However, setting ``--vd-queue-max-samples=1`` should almost
+ lead to the same behavior as ``--vd-queue-enable=no``, so that value can
+ be used for effectively runtime enabling/disabling the queue.
+
+ This should not be used with hardware decoding. It is possible to enable
+ this for audio, but it makes even less sense.
+
+``--vd-queue-max-bytes=<bytesize>``, ``--ad-queue-max-bytes``
+ Maximum approximate allowed size of the queue. If exceeded, decoding will
+ be stopped. The maximum size can be exceeded by about 1 frame.
+
+ See ``--list-options`` for defaults and value range. ``<bytesize>`` options
+ accept suffixes such as ``KiB`` and ``MiB``.
+
+``--vd-queue-max-samples=<int>``, ``--ad-queue-max-samples``
+ Maximum number of frames (video) or samples (audio) of the queue. The audio
+ size may be exceeded by about 1 frame.
+
+ See ``--list-options`` for defaults and value range.
+
+``--vd-queue-max-secs=<seconds>``, ``--ad-queue-max-secs``
+ Maximum number of seconds of media in the queue. The special value 0 means
+ no limit is set. The queue size may be exceeded by about 2 frames. Timestamp
+ resets may lead to random queue size usage.
+
+ See ``--list-options`` for defaults and value range.
+
+Network
+-------
+
+``--user-agent=<string>``
+ Use ``<string>`` as user agent for HTTP streaming.
+
+``--cookies``, ``--no-cookies``
+ Support cookies when making HTTP requests. Disabled by default.
+
+``--cookies-file=<filename>``
+ Read HTTP cookies from <filename>. The file is assumed to be in Netscape
+ format.
+
+``--http-header-fields=<field1,field2>``
+ Set custom HTTP fields when accessing HTTP stream.
+
+ This is a string list option. See `List Options`_ for details.
+
+ .. admonition:: Example
+
+ ::
+
+ mpv --http-header-fields='Field1: value1','Field2: value2' \
+ http://localhost:1234
+
+ Will generate HTTP request::
+
+ GET / HTTP/1.0
+ Host: localhost:1234
+ User-Agent: MPlayer
+ Icy-MetaData: 1
+ Field1: value1
+ Field2: value2
+ Connection: close
+
+``--http-proxy=<proxy>``
+ URL of the HTTP/HTTPS proxy. If this is set, the ``http_proxy`` environment
+ is ignored. The ``no_proxy`` environment variable is still respected. This
+ option is silently ignored if it does not start with ``http://``. Proxies
+ are not used for https URLs. Setting this option does not try to make the
+ ytdl script use the proxy.
+
+``--tls-ca-file=<filename>``
+ Certificate authority database file for use with TLS. (Silently fails with
+ older FFmpeg or Libav versions.)
+
+``--tls-verify``
+ Verify peer certificates when using TLS (e.g. with ``https://...``).
+ (Silently fails with older FFmpeg or Libav versions.)
+
+``--tls-cert-file``
+ A file containing a certificate to use in the handshake with the
+ peer.
+
+``--tls-key-file``
+ A file containing the private key for the certificate.
+
+``--referrer=<string>``
+ Specify a referrer path or URL for HTTP requests.
+
+``--network-timeout=<seconds>``
+ Specify the network timeout in seconds (default: 60 seconds). This affects
+ at least HTTP. The special value 0 uses the FFmpeg/Libav defaults. If a
+ protocol is used which does not support timeouts, this option is silently
+ ignored.
+
+ .. warning::
+
+ This breaks the RTSP protocol, because of inconsistent FFmpeg API
+ regarding its internal timeout option. Not only does the RTSP timeout
+ option accept different units (seconds instead of microseconds, causing
+ mpv to pass it huge values), it will also overflow FFmpeg internal
+ calculations. The worst is that merely setting the option will put RTSP
+ into listening mode, which breaks any client uses. At time of this
+ writing, the fix was not made effective yet. For this reason, this
+ option is ignored (or should be ignored) on RTSP URLs. You can still
+ set the timeout option directly with ``--demuxer-lavf-o``.
+
+``--rtsp-transport=<lavf|udp|udp_multicast|tcp|http>``
+ Select RTSP transport method (default: tcp). This selects the underlying
+ network transport when playing ``rtsp://...`` URLs. The value ``lavf``
+ leaves the decision to libavformat.
+
+``--hls-bitrate=<no|min|max|<rate>>``
+ If HLS streams are played, this option controls what streams are selected
+ by default. The option allows the following parameters:
+
+ :no: Don't do anything special. Typically, this will simply pick the
+ first audio/video streams it can find.
+ :min: Pick the streams with the lowest bitrate.
+ :max: Same, but highest bitrate. (Default.)
+
+ Additionally, if the option is a number, the stream with the highest rate
+ equal or below the option value is selected.
+
+ The bitrate as used is sent by the server, and there's no guarantee it's
+ actually meaningful.
+
+DVB
+---
+
+``--dvbin-prog=<string>``
+ This defines the program to tune to. Usually, you may specify this
+ by using a stream URI like ``"dvb://ZDF HD"``, but you can tune to a
+ different channel by writing to this property at runtime.
+ Also see ``dvbin-channel-switch-offset`` for more useful channel
+ switching functionality.
+
+``--dvbin-card=<0-15>``
+ Specifies using card number 0-15 (default: 0).
+
+``--dvbin-file=<filename>``
+ Instructs mpv to read the channels list from ``<filename>``. The default is
+ in the mpv configuration directory (usually ``~/.config/mpv``) with the
+ filename ``channels.conf.{sat,ter,cbl,atsc,isdbt}`` (based on your card
+ type) or ``channels.conf`` as a last resort.
+ Please note that using specific file name with card type is recommended,
+ since the legacy channel format is not fully standardized
+ so autodetection of the delivery system may fail otherwise.
+ For DVB-S/2 cards, a VDR 1.7.x format channel list is recommended
+ as it allows tuning to DVB-S2 channels, enabling subtitles and
+ decoding the PMT (which largely improves the demuxing).
+ Classic mplayer format channel lists are still supported (without
+ these improvements), and for other card types, only limited VDR
+ format channel list support is implemented (patches welcome).
+ For channels with dynamic PID switching or incomplete
+ ``channels.conf``, ``--dvbin-full-transponder`` or the magic PID
+ ``8192`` are recommended.
+
+``--dvbin-timeout=<1-30>``
+ Maximum number of seconds to wait when trying to tune a frequency before
+ giving up (default: 30).
+
+``--dvbin-full-transponder=<yes|no>``
+ Apply no filters on program PIDs, only tune to frequency and pass full
+ transponder to demuxer.
+ The player frontend selects the streams from the full TS in this case,
+ so the program which is shown initially may not match the chosen channel.
+ Switching between the programs is possible by cycling the ``program``
+ property.
+ This is useful to record multiple programs on a single transponder,
+ or to work around issues in the ``channels.conf``.
+ It is also recommended to use this for channels which switch PIDs
+ on-the-fly, e.g. for regional news.
+
+ Default: ``no``
+
+``--dvbin-channel-switch-offset=<integer>``
+ This value is not meant for setting via configuration, but used in channel
+ switching. An ``input.conf`` can ``cycle`` this value ``up`` and ``down``
+ to perform channel switching. This number effectively gives the offset
+ to the initially tuned to channel in the channel list.
+
+ An example ``input.conf`` could contain:
+ ``H cycle dvbin-channel-switch-offset up``, ``K cycle dvbin-channel-switch-offset down``
+
+ALSA audio output options
+-------------------------
+
+
+``--alsa-device=<device>``
+ Deprecated, use ``--audio-device`` (requires ``alsa/`` prefix).
+
+``--alsa-resample=yes``
+ Enable ALSA resampling plugin. (This is disabled by default, because
+ some drivers report incorrect audio delay in some cases.)
+
+``--alsa-mixer-device=<device>``
+ Set the mixer device used with ``ao-volume`` (default: ``default``).
+
+``--alsa-mixer-name=<name>``
+ Set the name of the mixer element (default: ``Master``). This is for
+ example ``PCM`` or ``Master``.
+
+``--alsa-mixer-index=<number>``
+ Set the index of the mixer channel (default: 0). Consider the output of
+ "``amixer scontrols``", then the index is the number that follows the
+ name of the element.
+
+``--alsa-non-interleaved``
+ Allow output of non-interleaved formats (if the audio decoder uses
+ this format). Currently disabled by default, because some popular
+ ALSA plugins are utterly broken with non-interleaved formats.
+
+``--alsa-ignore-chmap``
+ Don't read or set the channel map of the ALSA device - only request the
+ required number of channels, and then pass the audio as-is to it. This
+ option most likely should not be used. It can be useful for debugging,
+ or for static setups with a specially engineered ALSA configuration (in
+ this case you should always force the same layout with ``--audio-channels``,
+ or it will work only for files which use the layout implicit to your
+ ALSA device).
+
+``--alsa-buffer-time=<microseconds>``
+ Set the requested buffer time in microseconds. A value of 0 skips requesting
+ anything from the ALSA API. This and the ``--alsa-periods`` option uses the
+ ALSA ``near`` functions to set the requested parameters. If doing so results
+ in an empty configuration set, setting these parameters is skipped.
+
+ Both options control the buffer size. A low buffer size can lead to higher
+ CPU usage and audio dropouts, while a high buffer size can lead to higher
+ latency in volume changes and other filtering.
+
+``--alsa-periods=<number>``
+ Number of periods requested from the ALSA API. See ``--alsa-buffer-time``
+ for further remarks.
+
+
+GPU renderer options
+-----------------------
+
+The following video options are currently all specific to ``--vo=gpu``,
+``--vo=libmpv`` and ``--vo=gpu-next``, which are the only VOs that implement
+them.
+
+``--scale=<filter>``
+ The filter function to use when upscaling video.
+
+ ``bilinear``
+ Bilinear hardware texture filtering (fastest, very low quality). This is
+ the default when using the ``fast`` profile.
+
+ ``lanczos``
+ Lanczos scaling. Provides good balance between quality and performance.
+ This is the default for ``scale``. The number of taps can be controlled
+ with ``scale-radius``, but is best left unchanged.
+
+ (This filter is an alias for ``sinc``-windowed ``sinc``)
+
+ ``ewa_lanczos``
+ Elliptic weighted average Lanczos scaling. Also known as Jinc.
+ Relatively slow, but very good quality. The radius can be controlled
+ with ``scale-radius``. Increasing the radius makes the filter sharper
+ but adds more ringing.
+
+ (This filter is an alias for ``jinc``-windowed ``jinc``)
+
+ ``ewa_lanczossharp``
+ A slightly sharpened version of ewa_lanczos. This is the default when
+ using the ``high-quality`` profile.
+
+ ``ewa_lanczos4sharpest``
+ Very sharp scaler, but also slightly slower than ``ewa_lanczossharp``.
+ Prone to ringing, so it's recommended to combine this with an
+ anti-ringing shader. On ``--vo=gpu-next``, setting this filter enables
+ built-in anti-ringing, so no extra action needs to be taken.
+
+ ``mitchell``
+ Mitchell-Netravali. The ``B`` and ``C`` parameters can be set with
+ ``--scale-param1`` and ``--scale-param2``.
+
+ ``hermite``
+ Hermite spline. Similar to ``bicubic`` but with ``B`` set to ``0.0``.
+ This filter has the special property of having a support of radius 1.0,
+ making it very fast in comparison, but prone to blocking. This is the
+ default for ``--dscale``.
+
+ ``catmull_rom``
+ Catmull-Rom. A Cubic filter in the same vein as ``mitchell``, where
+ the ``B`` and ``C`` parameters are ``0.0`` and ``0.5`` respectively.
+ This filter is sharper than ``mitchell``, but it results in more
+ ringing.
+
+ ``oversample``
+ A version of nearest neighbour that (naively) oversamples pixels, so
+ that pixels overlapping edges get linearly interpolated instead of
+ rounded. This essentially removes the small imperfections and judder
+ artifacts caused by nearest-neighbour interpolation, in exchange for
+ adding some blur. This can also be used for frame mixing, where it
+ is commonly known as "smoothmotion" (see ``--tscale``).
+
+ ``linear``
+ A ``--tscale`` filter.
+
+ There are some more filters, but most are not as useful. For a complete
+ list, pass ``help`` as value, e.g.::
+
+ mpv --scale=help
+
+``--cscale=<filter>``
+ As ``--scale``, but for interpolating chroma information. If the image is
+ not subsampled, this option is ignored entirely. If this option is unset,
+ the filter implied by ``--scale`` will be applied.
+
+``--dscale=<filter>``
+ Like ``--scale``, but apply these filters on downscaling instead.
+
+``--tscale=<filter>``
+ The filter used for interpolating the temporal axis (frames). This is only
+ used if ``--interpolation`` is enabled. The only valid choices for
+ ``--tscale`` are separable convolution filters (use ``--tscale=help`` to
+ get a list). The default is ``oversample``.
+
+ Common ``--tscale`` choices include ``oversample``, ``linear``,
+ ``catmull_rom``, ``mitchell``, ``gaussian``, or ``bicubic``. These are
+ listed in increasing order of smoothness/blurriness, with ``bicubic``
+ being the smoothest/blurriest and ``oversample`` being the sharpest/least
+ smooth.
+
+``--scale-param1=<value>``, ``--scale-param2=<value>``, ``--cscale-param1=<value>``, ``--cscale-param2=<value>``, ``--dscale-param1=<value>``, ``--dscale-param2=<value>``, ``--tscale-param1=<value>``, ``--tscale-param2=<value>``
+ Set filter parameters. By default, these are set to the special string
+ ``default``, which maps to a scaler-specific default value. Ignored if the
+ filter is not tunable. Currently, this affects the following filter
+ parameters:
+
+ bicubic
+ Spline parameters (``B`` and ``C``). Defaults to B=1 and C=0.
+
+ gaussian
+ Scale parameter (``t``). Increasing this makes the result blurrier.
+ Defaults to 1.
+
+ oversample
+ Minimum distance to an edge before interpolation is used. Setting this
+ to 0 will always interpolate edges, whereas setting it to 0.5 will
+ never interpolate, thus behaving as if the regular nearest neighbour
+ algorithm was used. Defaults to 0.0.
+
+``--scale-blur=<value>``, ``--cscale-blur=<value>``, ``--dscale-blur=<value>``, ``--tscale-blur=<value>``
+ Kernel scaling factor (also known as a blur factor). Decreasing this makes
+ the result sharper, increasing it makes it blurrier (default 0). If set to
+ 0, the kernel's preferred blur factor is used. Note that setting this too
+ low (eg. 0.5) leads to bad results. It's generally recommended to stick to
+ values between 0.8 and 1.2.
+
+``--scale-clamp=<0.0-1.0>``, ``--cscale-clamp``, ``--dscale-clamp``, ``--tscale-clamp``
+ Specifies a weight bias to multiply into negative coefficients. Specifying
+ ``--scale-clamp=1`` has the effect of removing negative weights completely,
+ thus effectively clamping the value range to [0-1]. Values between 0.0 and
+ 1.0 can be specified to apply only a moderate diminishment of negative
+ weights. This is especially useful for ``--tscale``, where it reduces
+ excessive ringing artifacts in the temporal domain (which typically
+ manifest themselves as short flashes or fringes of black, mostly around
+ moving edges) in exchange for potentially adding more blur. The default for
+ ``--tscale-clamp`` is 1.0, the others default to 0.0.
+
+``--scale-taper=<value>``, ``--scale-wtaper=<value>``, ``--dscale-taper=<value>``, ``--dscale-wtaper=<value>``, ``--cscale-taper=<value>``, ``--cscale-wtaper=<value>``, ``--tscale-taper=<value>``, ``--tscale-wtaper=<value>``
+ Kernel/window taper factor. Increasing this flattens the filter function.
+ Value range is 0 to 1. A value of 0 (the default) means no flattening, a
+ value of 1 makes the filter completely flat (equivalent to a box function).
+ Values in between mean that some portion will be flat and the actual filter
+ function will be squeezed into the space in between.
+
+``--scale-radius=<value>``, ``--cscale-radius=<value>``, ``--dscale-radius=<value>``, ``--tscale-radius=<value>``
+ Set radius for tunable filters, must be a float number between 0.5 and
+ 16.0. Defaults to the filter's preferred radius if not specified. Doesn't
+ work for every scaler and VO combination.
+
+ Note that depending on filter implementation details and video scaling
+ ratio, the radius that actually being used might be different (most likely
+ being increased a bit).
+
+``--scale-antiring=<value>``, ``--cscale-antiring=<value>``, ``--dscale-antiring=<value>``, ``--tscale-antiring=<value>``
+ Set the antiringing strength. This tries to eliminate ringing, but can
+ introduce other artifacts in the process. Must be a float number between
+ 0.0 and 1.0. The default value of 0.0 disables antiringing entirely.
+
+ Note that this doesn't affect the special filters ``bilinear`` and
+ ``bicubic_fast``, nor does it affect any polar (EWA) scalers.
+
+``--scale-window=<window>``, ``--cscale-window=<window>``, ``--dscale-window=<window>``, ``--tscale-window=<window>``
+ (Advanced users only) Choose a custom windowing function for the kernel.
+ Defaults to the filter's preferred window if unset. Use
+ ``--scale-window=help`` to get a list of supported windowing functions.
+
+``--scale-wparam=<window>``, ``--cscale-wparam=<window>``, ``--cscale-wparam=<window>``, ``--tscale-wparam=<window>``
+ (Advanced users only) Configure the parameter for the window function given
+ by ``--scale-window`` etc. By default, these are set to the special string
+ ``default``, which maps to a window-specific default value. Ignored if the
+ window is not tunable. Currently, this affects the following window
+ parameters:
+
+ kaiser
+ Window parameter (alpha). Defaults to 6.33.
+ blackman
+ Window parameter (alpha). Defaults to 0.16.
+ gaussian
+ Scale parameter (t). Increasing this makes the window wider. Defaults
+ to 1.
+
+``--scaler-resizes-only``
+ Disable the scaler if the video image is not resized. In that case,
+ ``bilinear`` is used instead of whatever is set with ``--scale``. Bilinear
+ will reproduce the source image perfectly if no scaling is performed.
+ Enabled by default. Note that this option never affects ``--cscale``.
+
+``--correct-downscaling``
+ When using convolution based filters, extend the filter size when
+ downscaling. Increases quality, but reduces performance while downscaling.
+ Enabled by default.
+
+ This will perform slightly sub-optimally for anamorphic video (but still
+ better than without it) since it will extend the size to match only the
+ milder of the scale factors between the axes.
+
+ Note: this option is ignored when using bilinear downscaling with ``--vo=gpu``.
+
+``--linear-downscaling``
+ Scale in linear light when downscaling. It should only be used with a
+ ``--fbo-format`` that has at least 16 bit precision. This option
+ has no effect on HDR content. Enabled by default.
+
+``--linear-upscaling``
+ Scale in linear light when upscaling. Like ``--linear-downscaling``, it
+ should only be used with a ``--fbo-format`` that has at least 16 bits
+ precisions. This is not usually recommended except for testing/specific
+ purposes. Users are advised to either enable ``--sigmoid-upscaling`` or
+ keep both options disabled (i.e. scaling in gamma light).
+
+``--sigmoid-upscaling``
+ When upscaling, use a sigmoidal color transform to avoid emphasizing
+ ringing artifacts. Enabled by default. This is incompatible with and replaces
+ ``--linear-upscaling``. (Note that sigmoidization also requires
+ linearization, so the ``LINEAR`` rendering step fires in both cases)
+
+``--sigmoid-center``
+ The center of the sigmoid curve used for ``--sigmoid-upscaling``, must be a
+ float between 0.0 and 1.0. Defaults to 0.75 if not specified.
+
+``--sigmoid-slope``
+ The slope of the sigmoid curve used for ``--sigmoid-upscaling``, must be a
+ float between 1.0 and 20.0. Defaults to 6.5 if not specified.
+
+``--interpolation``
+ Reduce stuttering caused by mismatches in the video fps and display refresh
+ rate (also known as judder).
+
+ .. warning:: This requires setting the ``--video-sync`` option to one
+ of the ``display-`` modes, or it will be silently disabled.
+ This was not required before mpv 0.14.0.
+
+ This essentially attempts to interpolate the missing frames by convoluting
+ the video along the temporal axis. The filter used can be controlled using
+ the ``--tscale`` setting.
+
+``--interpolation-threshold=<0..1,-1>``
+ Threshold below which frame ratio interpolation gets disabled (default:
+ ``0.01``). This is calculated as ``abs(disphz/vfps - 1) < threshold``,
+ where ``vfps`` is the speed-adjusted video FPS, and ``disphz`` the
+ display refresh rate. (The speed-adjusted video FPS is roughly equal to
+ the normal video FPS, but with slowdown and speedup applied. This matters
+ if you use ``--video-sync=display-resample`` to make video run synchronously
+ to the display FPS, or if you change the ``speed`` property.)
+
+ The default is intended to enable interpolation in scenarios where
+ retiming with the ``--video-sync=display-*`` cannot adjust the speed of
+ the video sufficiently for smooth playback. For example if a video is
+ 60.00 FPS and your display refresh rate is 59.94 Hz, interpolation will
+ never be activated, since the mismatch is within 1% of the refresh
+ rate. The default also handles the scenario when mpv cannot determine the
+ container FPS, such as during certain live streams, and may dynamically
+ toggle interpolation on and off. In this scenario, the default would be to
+ not use interpolation but rather to allow ``--video-sync=display-*`` to
+ retime the video to match display refresh rate. See
+ ``--video-sync-max-video-change`` for more information about how mpv
+ will retime video.
+
+ Also note that if you use e.g. ``--video-sync=display-vdrop``, small
+ deviations in the rate can disable interpolation and introduce a
+ discontinuity every other minute.
+
+ Set this to ``-1`` to disable this logic.
+
+``--interpolation-preserve``
+ Preserve the previous frames' interpolated results even when renderer
+ parameters are changed - with the exception of options related to
+ cropping and video placement, which always invalidate the cache. Enabling
+ this option makes dynamic updates of renderer settings slightly smoother at
+ the cost of slightly higher latency in response to such changes. Defaults
+ to on. (Only affects ``--vo=gpu-next``, note that ``--vo=gpu`` always
+ invalidates interpolated frames)
+
+``--opengl-pbo``
+ Enable use of PBOs. On some drivers this can be faster, especially if the
+ source video size is huge (e.g. so called "4K" video). On other drivers it
+ might be slower or cause latency issues.
+
+``--dither-depth=<N|no|auto>``
+ Set dither target depth to N. Default: auto.
+
+ no
+ Disable any dithering done by mpv.
+ auto
+ Automatic selection. If output bit depth cannot be detected, 8 bits per
+ component are assumed.
+ 8
+ Dither to 8 bit output.
+
+ Note that the depth of the connected video display device cannot be
+ detected. Often, LCD panels will do dithering on their own, which conflicts
+ with this option and leads to ugly output.
+
+``--dither-size-fruit=<2-8>``
+ Set the size of the dither matrix (default: 6). The actual size of the
+ matrix is ``(2^N) x (2^N)`` for an option value of ``N``, so a value of 6
+ gives a size of 64x64. The matrix is generated at startup time, and a large
+ matrix can take rather long to compute (seconds).
+
+ Used in ``--dither=fruit`` mode only.
+
+``--dither=<fruit|ordered|error-diffusion|no>``
+ Select dithering algorithm (default: fruit). (Normally, the
+ ``--dither-depth`` option controls whether dithering is enabled.)
+
+ The ``error-diffusion`` option requires compute shader support. It also
+ requires large amount of shared memory to run, the size of which depends on
+ both the kernel (see ``--error-diffusion`` option below) and the height of
+ video window. It will fallback to ``fruit`` dithering if there is no enough
+ shared memory to run the shader.
+
+``--temporal-dither``
+ Enable temporal dithering. (Only active if dithering is enabled in
+ general.) This changes between 8 different dithering patterns on each frame
+ by changing the orientation of the tiled dithering matrix. Unfortunately,
+ this can lead to flicker on LCD displays, since these have a high reaction
+ time.
+
+``--temporal-dither-period=<1-128>``
+ Determines how often the dithering pattern is updated when
+ ``--temporal-dither`` is in use. 1 (the default) will update on every video
+ frame, 2 on every other frame, etc.
+
+``--error-diffusion=<kernel>``
+ The error diffusion kernel to use when ``--dither=error-diffusion`` is set.
+
+ ``simple``
+ Propagate error to only two adjacent pixels. Fastest but low quality.
+
+ ``sierra-lite``
+ Fast with reasonable quality. This is the default.
+
+ ``floyd-steinberg``
+ Most notable error diffusion kernel.
+
+ ``atkinson``
+ Looks different from other kernels because only fraction of errors will
+ be propagated during dithering. A typical use case of this kernel is
+ saving dithered screenshot (in window mode). This kernel produces
+ slightly smaller file, with still reasonable dithering quality.
+
+ There are other kernels (use ``--error-diffusion=help`` to list) but most of
+ them are much slower and demanding even larger amount of shared memory.
+ Among these kernels, ``burkes`` achieves a good balance between performance
+ and quality, and probably is the one you want to try first.
+
+``--gpu-debug``
+ Enables GPU debugging. What this means depends on the API type. For OpenGL,
+ it calls ``glGetError()``, and requests a debug context. For Vulkan, it
+ enables validation layers.
+
+``--opengl-swapinterval=<n>``
+ Interval in displayed frames between two buffer swaps. 1 is equivalent to
+ enable VSYNC, 0 to disable VSYNC. Defaults to 1 if not specified.
+
+ Note that this depends on proper OpenGL vsync support. On some platforms
+ and drivers, this only works reliably when in fullscreen mode. It may also
+ require driver-specific hacks if using multiple monitors, to ensure mpv
+ syncs to the right one. Compositing window managers can also lead to bad
+ results, as can missing or incorrect display FPS information (see
+ ``--display-fps-override``).
+
+``--vulkan-device=<device name|UUID>``
+ The name or UUID of the Vulkan device to use for rendering and presentation. Use
+ ``--vulkan-device=help`` to see the list of available devices and their
+ names and UUIDs. If left unspecified, the first enumerated hardware Vulkan
+ device will be used.
+
+``--vulkan-swap-mode=<mode>``
+ Controls the presentation mode of the vulkan swapchain. This is similar
+ to the ``--opengl-swapinterval`` option.
+
+ auto
+ Use the preferred swapchain mode for the vulkan context. (Default)
+ fifo
+ Non-tearing, vsync blocked. Similar to "VSync on".
+ fifo-relaxed
+ Tearing, vsync blocked. Late frames will tear instead of stuttering.
+ mailbox
+ Non-tearing, not vsync blocked. Similar to "triple buffering".
+ immediate
+ Tearing, not vsync blocked. Similar to "VSync off".
+
+``--vulkan-queue-count=<1..8>``
+ Controls the number of VkQueues used for rendering (limited by how many
+ your device supports). In theory, using more queues could enable some
+ parallelism between frames (when using a ``--swapchain-depth`` higher than
+ 1), but it can also slow things down on hardware where there's no true
+ parallelism between queues. (Default: 1)
+
+``--vulkan-async-transfer``
+ Enables the use of async transfer queues on supported vulkan devices. Using
+ them allows transfer operations like texture uploads and blits to happen
+ concurrently with the actual rendering, thus improving overall throughput
+ and power consumption. Enabled by default, and should be relatively safe.
+
+``--vulkan-async-compute``
+ Enables the use of async compute queues on supported vulkan devices. Using
+ this, in theory, allows out-of-order scheduling of compute shaders with
+ graphics shaders, thus enabling the hardware to do more effective work while
+ waiting for pipeline bubbles and memory operations. Not beneficial on all
+ GPUs. It's worth noting that if async compute is enabled, and the device
+ supports more compute queues than graphics queues (bound by the restrictions
+ set by ``--vulkan-queue-count``), mpv will internally try and prefer the
+ use of compute shaders over fragment shaders wherever possible. Enabled by
+ default, although Nvidia users may want to disable it.
+
+``--vulkan-display-display=<n>``
+ The index of the display, on the selected Vulkan device, to present on when
+ using the ``displayvk`` GPU context. Use ``--vulkan-display-display=help``
+ to see the list of available displays. If left unspecified, the first
+ enumerated display will be used.
+
+
+``--vulkan-display-mode=<n>``
+ The index of the display mode, of the selected Vulkan display, to use when
+ using the ``displayvk`` GPU context. Use ``--vulkan-display-mode=help``
+ to see the list of available modes. If left unspecified, the first
+ enumerated mode will be used.
+
+``--vulkan-display-plane=<n>``
+ The index of the plane, on the selected Vulkan device, to present on when
+ using the ``displayvk`` GPU context. Use ``--vulkan-display-plane=help``
+ to see the list of available planes. If left unspecified, the first
+ enumerated plane will be used.
+
+``--d3d11-exclusive-fs=<yes|no>``
+ Switches the D3D11 swap chain fullscreen state to 'fullscreen' when
+ fullscreen video is requested. Also known as "exclusive fullscreen" or
+ "D3D fullscreen" in other applications. Gives mpv full control of
+ rendering on the swap chain's screen. Off by default.
+
+``--d3d11-warp=<yes|no|auto>``
+ Use WARP (Windows Advanced Rasterization Platform) with the D3D11 GPU
+ backend (default: auto). This is a high performance software renderer. By
+ default, it is only used when the system has no hardware adapters that
+ support D3D11. While the extended GPU features will work with WARP, they
+ can be very slow.
+
+``--d3d11-feature-level=<12_1|12_0|11_1|11_0|10_1|10_0|9_3|9_2|9_1>``
+ Select a specific feature level when using the D3D11 GPU backend. By
+ default, the highest available feature level is used. This option can be
+ used to select a lower feature level, which is mainly useful for debugging.
+ Most extended GPU features will not work at 9_x feature levels.
+
+``--d3d11-flip=<yes|no>``
+ Enable flip-model presentation, which avoids unnecessarily copying the
+ backbuffer by sharing surfaces with the DWM (default: yes). This may cause
+ performance issues with older drivers. If flip-model presentation is not
+ supported (for example, on Windows 7 without the platform update), mpv will
+ automatically fall back to the older bitblt presentation model.
+
+``--d3d11-sync-interval=<0..4>``
+ Schedule each frame to be presented for this number of VBlank intervals.
+ (default: 1) Setting to 1 will enable VSync, setting to 0 will disable it.
+
+``--d3d11-adapter=<adapter name|help>``
+ Select a specific D3D11 adapter to utilize for D3D11 rendering.
+ Will pick the default adapter if unset. Alternatives are listed
+ when the name "help" is given.
+
+ Checks for matches based on the start of the string, case
+ insensitive. Thus, if the description of the adapter starts with
+ the vendor name, that can be utilized as the selection parameter.
+
+ Hardware decoders utilizing the D3D11 rendering abstraction's helper
+ functionality to receive a device, such as D3D11VA or DXVA2's DXGI
+ mode, will be affected by this choice.
+
+``--d3d11-output-format=<auto|rgba8|bgra8|rgb10_a2|rgba16f>``
+ Select a specific D3D11 output format to utilize for D3D11 rendering.
+ "auto" is the default, which will pick either rgba8 or rgb10_a2 depending
+ on the configured desktop bit depth. rgba16f and bgra8 are left out of
+ the autodetection logic, and are available for manual testing.
+
+ .. note::
+
+ Desktop bit depth querying is only available from an API available
+ from Windows 10. Thus on older systems it will only automatically
+ utilize the rgba8 output format.
+
+``--d3d11-output-csp=<auto|srgb|linear|pq|bt.2020>``
+ Select a specific D3D11 output color space to utilize for D3D11 rendering.
+ "auto" is the default, which will select the color space of the desktop
+ on which the swap chain is located.
+
+ Values other than "srgb" and "pq" have had issues in testing, so they
+ are mostly available for manual testing.
+
+ .. note::
+
+ Swap chain color space configuration is only available from an API
+ available from Windows 10. Thus on older systems it will not work.
+
+``--d3d11va-zero-copy=<yes|no>``
+ By default, when using hardware decoding with ``--gpu-api=d3d11``, the
+ video image will be copied (GPU-to-GPU) from the decoder surface to a
+ shader resource. Set this option to avoid that copy by sampling directly
+ from the decoder image. This may increase performance and reduce power
+ usage, but can cause the image to be sampled incorrectly on the bottom and
+ right edges due to padding, and may invoke driver bugs, since Direct3D 11
+ technically does not allow sampling from a decoder surface (though most
+ drivers support it.)
+
+ Currently only relevant for ``--gpu-api=d3d11``.
+
+``--wayland-app-id=<string>``
+ Set the client app id for Wayland-based video output methods (default: ``mpv``).
+
+``--wayland-configure-bounds=<auto|yes|no>``
+ Controls whether or not mpv opts into the configure bounds event if sent by the
+ compositor (default: auto). This restricts the initial size of the mpv window to
+ a certain maximum size intended by the compositor. In most cases, this simply
+ just prevents the mpv window from being larger than the size of the monitor when
+ it first renders. With the default value of ``auto``, configure-bounds will
+ silently be ignored if any ``autofit`` or ``geometry`` type option is also set.
+
+``--wayland-content-type=<auto|none|photo|video|game>``
+ If supported by the compositor, mpv will send a hint using the content-type
+ protocol telling the compositor what type of content is being displayed. ``auto``
+ (default) will automatically switch between telling the compositor the content
+ is a photo, video or possibly none depending on internal heuristics.
+
+``--wayland-disable-vsync=<yes|no>``
+ Disable mpv's internal vsync for Wayland-based video output (default: no).
+ This is mainly useful for benchmarking wayland VOs when combined with
+ ``video-sync=display-desync``, ``--no-audio``, and ``--untimed=yes``.
+
+``--wayland-edge-pixels-pointer=<value>``
+ Defines the size of an edge border (default: 16) to initiate client side
+ resize events in the wayland contexts with the mouse. This is only active if
+ there are no server side decorations from the compositor.
+
+``--wayland-edge-pixels-touch=<value>``
+ Defines the size of an edge border (default: 32) to initiate client side
+ resizes events in the wayland contexts with touch events.
+
+``--spirv-compiler=<compiler>``
+ Controls which compiler is used to translate GLSL to SPIR-V. This is
+ (currently) only relevant for ``--gpu-api=vulkan`` and `--gpu-api=d3d11`.
+ The possible choices are currently only:
+
+ auto
+ Use the first available compiler. (Default)
+ shaderc
+ Use libshaderc, which is an API wrapper around glslang. This is
+ generally the most preferred, if available.
+
+ .. note::
+
+ This option is deprecated, since there is only one reasonable value.
+ It may be removed in the future.
+
+``--glsl-shader=<file>``, ``--glsl-shaders=<file-list>``
+ Custom GLSL hooks. These are a flexible way to add custom fragment shaders,
+ which can be injected at almost arbitrary points in the rendering pipeline,
+ and access all previous intermediate textures.
+
+ Each use of the ``--glsl-shader`` option will add another file to the
+ internal list of shaders, while ``--glsl-shaders`` takes a list of files,
+ and overwrites the internal list with it. The latter is a path list option
+ (see `List Options`_ for details).
+
+ .. admonition:: Warning
+
+ The syntax is not stable yet and may change any time.
+
+ The general syntax of a user shader looks like this::
+
+ //!METADATA ARGS...
+ //!METADATA ARGS...
+
+ vec4 hook() {
+ ...
+ return something;
+ }
+
+ //!METADATA ARGS...
+ //!METADATA ARGS...
+
+ ...
+
+ Each section of metadata, along with the non-metadata lines after it,
+ defines a single block. There are currently two types of blocks, HOOKs and
+ TEXTUREs.
+
+ A ``TEXTURE`` block can set the following options:
+
+ TEXTURE <name> (required)
+ The name of this texture. Hooks can then bind the texture under this
+ name using BIND. This must be the first option of the texture block.
+
+ SIZE <width> [<height>] [<depth>] (required)
+ The dimensions of the texture. The height and depth are optional. The
+ type of texture (1D, 2D or 3D) depends on the number of components
+ specified.
+
+ FORMAT <name> (required)
+ The texture format for the samples. Supported texture formats are listed
+ in debug logging when the ``gpu`` VO is initialized (look for
+ ``Texture formats:``). Usually, this follows OpenGL naming conventions.
+ For example, ``rgb16`` provides 3 channels with normalized 16 bit
+ components. One oddity are float formats: for example, ``rgba16f`` has
+ 16 bit internal precision, but the texture data is provided as 32 bit
+ floats, and the driver converts the data on texture upload.
+
+ Although format names follow a common naming convention, not all of them
+ are available on all hardware, drivers, GL versions, and so on.
+
+ FILTER <LINEAR|NEAREST>
+ The min/magnification filter used when sampling from this texture.
+
+ BORDER <CLAMP|REPEAT|MIRROR>
+ The border wrapping mode used when sampling from this texture.
+
+ Following the metadata is a string of bytes in hexadecimal notation that
+ define the raw texture data, corresponding to the format specified by
+ `FORMAT`, on a single line with no extra whitespace.
+
+ A ``HOOK`` block can set the following options:
+
+ HOOK <name> (required)
+ The texture which to hook into. May occur multiple times within a
+ metadata block, up to a predetermined limit. See below for a list of
+ hookable textures.
+
+ DESC <title>
+ User-friendly description of the pass. This is the name used when
+ representing this shader in the list of passes for property
+ `vo-passes`.
+
+ BIND <name>
+ Loads a texture (either coming from mpv or from a ``TEXTURE`` block)
+ and makes it available to the pass. When binding textures from mpv,
+ this will also set up macros to facilitate accessing it properly. See
+ below for a list. By default, no textures are bound. The special name
+ HOOKED can be used to refer to the texture that triggered this pass.
+
+ SAVE <name>
+ Gives the name of the texture to save the result of this pass into. By
+ default, this is set to the special name HOOKED which has the effect of
+ overwriting the hooked texture.
+
+ WIDTH <szexpr>, HEIGHT <szexpr>
+ Specifies the size of the resulting texture for this pass. ``szexpr``
+ refers to an expression in RPN (reverse polish notation), using the
+ operators + - * / > < !, floating point literals, and references to
+ sizes of existing texture (such as MAIN.width or CHROMA.height),
+ OUTPUT, or NATIVE_CROPPED (size of an input texture cropped after
+ pan-and-scan, video-align-x/y, video-pan-x/y, etc. and possibly
+ prescaled). By default, these are set to HOOKED.w and HOOKED.h,
+ espectively.
+
+ WHEN <szexpr>
+ Specifies a condition that needs to be true (non-zero) for the shader
+ stage to be evaluated. If it fails, it will silently be omitted. (Note
+ that a shader stage like this which has a dependency on an optional
+ hook point can still cause that hook point to be saved, which has some
+ minor overhead)
+
+ OFFSET <ox oy | ALIGN>
+ Indicates a pixel shift (offset) introduced by this pass. These pixel
+ offsets will be accumulated and corrected during the next scaling pass
+ (``cscale`` or ``scale``). The default values are 0 0 which correspond
+ to no shift. Note that offsets are ignored when not overwriting the
+ hooked texture.
+
+ A special value of ``ALIGN`` will attempt to fix existing offset of
+ HOOKED by align it with reference. It requires HOOKED to be resizable
+ (see below). It works transparently with fragment shader. For compute
+ shader, the predefined ``texmap`` macro is required to handle coordinate
+ mapping.
+
+ COMPONENTS <n>
+ Specifies how many components of this pass's output are relevant and
+ should be stored in the texture, up to 4 (rgba). By default, this value
+ is equal to the number of components in HOOKED.
+
+ COMPUTE <bw> <bh> [<tw> <th>]
+ Specifies that this shader should be treated as a compute shader, with
+ the block size bw and bh. The compute shader will be dispatched with
+ however many blocks are necessary to completely tile over the output.
+ Within each block, there will be tw*th threads, forming a single work
+ group. In other words: tw and th specify the work group size, which can
+ be different from the block size. So for example, a compute shader with
+ bw, bh = 32 and tw, th = 8 running on a 500x500 texture would dispatch
+ 16x16 blocks (rounded up), each with 8x8 threads.
+
+ Compute shaders in mpv are treated a bit different from fragment
+ shaders. Instead of defining a ``vec4 hook`` that produces an output
+ sample, you directly define ``void hook`` which writes to a fixed
+ writeonly image unit named ``out_image`` (this is bound by mpv) using
+ `imageStore`. To help translate texture coordinates in the absence of
+ vertices, mpv provides a special function ``NAME_map(id)`` to map from
+ the texel space of the output image to the texture coordinates for all
+ bound textures. In particular, ``NAME_pos`` is equivalent to
+ ``NAME_map(gl_GlobalInvocationID)``, although using this only really
+ makes sense if (tw,th) == (bw,bh).
+
+ Each bound mpv texture (via ``BIND``) will make available the following
+ definitions to that shader pass, where NAME is the name of the bound
+ texture:
+
+ vec4 NAME_tex(vec2 pos)
+ The sampling function to use to access the texture at a certain spot
+ (in texture coordinate space, range [0,1]). This takes care of any
+ necessary normalization conversions.
+ vec4 NAME_texOff(vec2 offset)
+ Sample the texture at a certain offset in pixels. This works like
+ NAME_tex but additionally takes care of necessary rotations, so that
+ sampling at e.g. vec2(-1,0) is always one pixel to the left.
+ vec2 NAME_pos
+ The local texture coordinate of that texture, range [0,1].
+ vec2 NAME_size
+ The (rotated) size in pixels of the texture.
+ mat2 NAME_rot
+ The rotation matrix associated with this texture. (Rotates pixel space
+ to texture coordinates)
+ vec2 NAME_pt
+ The (unrotated) size of a single pixel, range [0,1].
+ float NAME_mul
+ The coefficient that needs to be multiplied into the texture contents
+ in order to normalize it to the range [0,1].
+ sampler NAME_raw
+ The raw bound texture itself. The use of this should be avoided unless
+ absolutely necessary.
+
+ Normally, users should use either NAME_tex or NAME_texOff to read from the
+ texture. For some shaders however , it can be better for performance to do
+ custom sampling from NAME_raw, in which case care needs to be taken to
+ respect NAME_mul and NAME_rot.
+
+ In addition to these parameters, the following uniforms are also globally
+ available:
+
+ float random
+ A random number in the range [0-1], different per frame.
+ int frame
+ A simple count of frames rendered, increases by one per frame and never
+ resets (regardless of seeks).
+ vec2 input_size
+ The size in pixels of the input image (possibly cropped and prescaled).
+ vec2 target_size
+ The size in pixels of the visible part of the scaled (and possibly
+ cropped) image.
+ vec2 tex_offset
+ Texture offset introduced by user shaders or options like panscan, video-align-x/y, video-pan-x/y.
+
+ Internally, vo_gpu may generate any number of the following textures.
+ Whenever a texture is rendered and saved by vo_gpu, all of the passes
+ that have hooked into it will run, in the order they were added by the
+ user. This is a list of the legal hook points:
+
+ RGB, LUMA, CHROMA, ALPHA, XYZ (resizable)
+ Source planes (raw). Which of these fire depends on the image format of
+ the source.
+
+ CHROMA_SCALED, ALPHA_SCALED (fixed)
+ Source planes (upscaled). These only fire on subsampled content.
+
+ NATIVE (resizable)
+ The combined image, in the source colorspace, before conversion to RGB.
+
+ MAINPRESUB (resizable)
+ The image, after conversion to RGB, but before
+ ``--blend-subtitles=video`` is applied.
+
+ MAIN (resizable)
+ The main image, after conversion to RGB but before upscaling.
+
+ LINEAR (fixed)
+ Linear light image, before scaling. This only fires when
+ ``--linear-upscaling``, ``--linear-downscaling`` or
+ ``--sigmoid-upscaling`` is in effect.
+
+ SIGMOID (fixed)
+ Sigmoidized light, before scaling. This only fires when
+ ``--sigmoid-upscaling`` is in effect.
+
+ PREKERNEL (fixed)
+ The image immediately before the scaler kernel runs.
+
+ POSTKERNEL (fixed)
+ The image immediately after the scaler kernel runs.
+
+ SCALED (fixed)
+ The final upscaled image, before color management.
+
+ OUTPUT (fixed)
+ The final output image, after color management but before dithering and
+ drawing to screen.
+
+ Only the textures labelled with ``resizable`` may be transformed by the
+ pass. When overwriting a texture marked ``fixed``, the WIDTH, HEIGHT and
+ OFFSET must be left at their default values.
+
+``--glsl-shader=<file>``
+ CLI/config file only alias for ``--glsl-shaders-append``.
+
+``--glsl-shader-opts=param1=value1,param2=value2,...``
+ Specifies the options to use for tunable shader parameters. You can target
+ specific named shaders by prefixing the shader name with a ``/``, e.g.
+ ``shader/param=value``. Without a prefix, parameters affect all shaders.
+ The shader name is the base part of the shader filename, without the
+ extension. (``--vo=gpu-next`` only)
+
+``--deband``
+ Enable the debanding algorithm. This greatly reduces the amount of visible
+ banding, blocking and other quantization artifacts, at the expense of
+ very slightly blurring some of the finest details. In practice, it's
+ virtually always an improvement - the only reason to disable it would be
+ for performance.
+
+``--deband-iterations=<0..16>``
+ The number of debanding steps to perform per sample. Each step reduces a
+ bit more banding, but takes time to compute. Note that the strength of each
+ step falls off very quickly, so high numbers (>4) are practically useless.
+ (Default 1)
+
+``--deband-threshold=<0..4096>``
+ The debanding filter's cut-off threshold. Higher numbers increase the
+ debanding strength dramatically but progressively diminish image details.
+ (Default 48)
+
+``--deband-range=<1..64>``
+ The debanding filter's initial radius. The radius increases linearly for
+ each iteration. A higher radius will find more gradients, but a lower
+ radius will smooth more aggressively. (Default 16)
+
+ If you increase the ``--deband-iterations``, you should probably decrease
+ this to compensate.
+
+``--deband-grain=<0..4096>``
+ Add some extra noise to the image. This significantly helps cover up
+ remaining quantization artifacts. Higher numbers add more noise. (Default
+ 32)
+
+``--corner-rounding=<0..1>``
+ If set to a value above 0.0, the output will be rendered with rounded
+ corners, as if an alpha transparency mask had been applied. The value
+ indicates the relative fraction of the side length to round - a value of
+ 1.0 rounds the corners as much as possible. (``--vo=gpu-next`` only)
+
+``--sharpen=<value>``
+ If set to a value other than 0, enable an unsharp masking filter. Positive
+ values will sharpen the image (but add more ringing and aliasing). Negative
+ values will blur the image. If your GPU is powerful enough, consider
+ alternatives like the ``ewa_lanczossharp`` scale filter, or the
+ ``--scale-blur`` option. (Only for ``--vo=gpu``)
+
+``--opengl-glfinish``
+ Call ``glFinish()`` before swapping buffers (default: disabled). Slower,
+ but might improve results when doing framedropping. Can completely ruin
+ performance. The details depend entirely on the OpenGL driver.
+
+``--opengl-waitvsync``
+ Call ``glXWaitVideoSyncSGI`` after each buffer swap (default: disabled).
+ This may or may not help with video timing accuracy and frame drop. It's
+ possible that this makes video output slower, or has no effect at all.
+
+ X11/GLX only.
+
+``--opengl-dwmflush=<no|windowed|yes|auto>``
+ (Windows only)
+ Calls ``DwmFlush`` after swapping buffers on Windows (default: auto). It
+ also sets ``SwapInterval(0)`` to ignore the OpenGL timing. Values are: no
+ (disabled), windowed (only in windowed mode), yes (also in full screen).
+
+ The value ``auto`` will try to determine whether the compositor is active,
+ and calls ``DwmFlush`` only if it seems to be.
+
+ This may help to get more consistent frame intervals, especially with
+ high-fps clips - which might also reduce dropped frames. Typically, a value
+ of ``windowed`` should be enough, since full screen may bypass the DWM.
+
+``--angle-d3d11-feature-level=<11_0|10_1|10_0|9_3>``
+ Selects a specific feature level when using the ANGLE backend with D3D11.
+ By default, the highest available feature level is used. This option can be
+ used to select a lower feature level, which is mainly useful for debugging.
+ Note that OpenGL ES 3.0 is only supported at feature level 10_1 or higher.
+ Most extended OpenGL features will not work at lower feature levels
+ (similar to ``--gpu-dumb-mode``).
+
+ Windows with ANGLE only.
+
+``--angle-d3d11-warp=<yes|no|auto>``
+ Use WARP (Windows Advanced Rasterization Platform) when using the ANGLE
+ backend with D3D11 (default: auto). This is a high performance software
+ renderer. By default, it is used when the Direct3D hardware does not
+ support Direct3D 11 feature level 9_3. While the extended OpenGL features
+ will work with WARP, they can be very slow.
+
+ Windows with ANGLE only.
+
+``--angle-egl-windowing=<yes|no|auto>``
+ Use ANGLE's built in EGL windowing functions to create a swap chain
+ (default: auto). If this is set to ``no`` and the D3D11 renderer is in use,
+ ANGLE's built in swap chain will not be used and a custom swap chain that
+ is optimized for video rendering will be created instead. If set to
+ ``auto``, a custom swap chain will be used for D3D11 and the built in swap
+ chain will be used for D3D9. This option is mainly for debugging purposes,
+ in case the custom swap chain has poor performance or does not work.
+
+ If set to ``yes``, the ``--angle-flip`` option will have no effect.
+
+ Windows with ANGLE only.
+
+``--angle-flip=<yes|no>``
+ Enable flip-model presentation, which avoids unnecessarily copying the
+ backbuffer by sharing surfaces with the DWM (default: yes). This may cause
+ performance issues with older drivers. If flip-model presentation is not
+ supported (for example, on Windows 7 without the platform update), mpv will
+ automatically fall back to the older bitblt presentation model.
+
+ If set to ``no``, the ``--angle-swapchain-length`` option will have no
+ effect.
+
+ Windows with ANGLE only.
+
+``--angle-renderer=<d3d9|d3d11|auto>``
+ Forces a specific renderer when using the ANGLE backend (default: auto). In
+ auto mode this will pick D3D11 for systems that support Direct3D 11 feature
+ level 9_3 or higher, and D3D9 otherwise. This option is mainly for
+ debugging purposes. Normally there is no reason to force a specific
+ renderer, though ``--angle-renderer=d3d9`` may give slightly better
+ performance on old hardware. Note that the D3D9 renderer only supports
+ OpenGL ES 2.0, so most extended OpenGL features will not work if this
+ renderer is selected (similar to ``--gpu-dumb-mode``).
+
+ Windows with ANGLE only.
+
+``--macos-force-dedicated-gpu=<yes|no>``
+ Deactivates the automatic graphics switching and forces the dedicated GPU.
+ (default: no)
+
+ macOS only.
+
+``--cocoa-cb-sw-renderer=<yes|no|auto>``
+ Use the Apple Software Renderer when using cocoa-cb (default: auto). If set
+ to ``no`` the software renderer is never used and instead fails when a the
+ usual pixel format could not be created, ``yes`` will always only use the
+ software renderer, and ``auto`` only falls back to the software renderer
+ when the usual pixel format couldn't be created.
+
+ macOS only.
+
+``--cocoa-cb-10bit-context=<yes|no>``
+ Creates a 10bit capable pixel format for the context creation (default: yes).
+ Instead of 8bit integer framebuffer a 16bit half-float framebuffer is
+ requested.
+
+ macOS only.
+
+``--macos-title-bar-appearance=<appearance>``
+ Sets the appearance of the title bar (default: auto). Not all combinations
+ of appearances and ``--macos-title-bar-material`` materials make sense or
+ are unique. Appearances that are not supported by you current macOS version
+ fall back to the default value.
+ macOS and cocoa-cb only
+
+ ``<appearance>`` can be one of the following:
+
+ :auto: Detects the system settings and sets the title
+ bar appearance appropriately. On macOS 10.14 it
+ also detects run time changes.
+ :aqua: The standard macOS Light appearance.
+ :darkAqua: The standard macOS Dark appearance. (macOS 10.14+)
+ :vibrantLight: Light vibrancy appearance with.
+ :vibrantDark: Dark vibrancy appearance with.
+ :aquaHighContrast: Light Accessibility appearance. (macOS 10.14+)
+ :darkAquaHighContrast: Dark Accessibility appearance. (macOS 10.14+)
+ :vibrantLightHighContrast: Light vibrancy Accessibility appearance.
+ (macOS 10.14+)
+ :vibrantDarkHighContrast: Dark vibrancy Accessibility appearance.
+ (macOS 10.14+)
+
+``--macos-title-bar-material=<material>``
+ Sets the material of the title bar (default: titlebar). All deprecated
+ materials should not be used on macOS 10.14+ because their functionality
+ is not guaranteed. Not all combinations of materials and
+ ``--macos-title-bar-appearance`` appearances make sense or are unique.
+ Materials that are not supported by you current macOS version fall back to
+ the default value.
+ macOS and cocoa-cb only
+
+ ``<material>`` can be one of the following:
+
+ :titlebar: The standard macOS title bar material.
+ :selection: The standard macOS selection material.
+ :menu: The standard macOS menu material. (macOS 10.11+)
+ :popover: The standard macOS popover material. (macOS 10.11+)
+ :sidebar: The standard macOS sidebar material. (macOS 10.11+)
+ :headerView: The standard macOS header view material.
+ (macOS 10.14+)
+ :sheet: The standard macOS sheet material. (macOS 10.14+)
+ :windowBackground: The standard macOS window background material.
+ (macOS 10.14+)
+ :hudWindow: The standard macOS hudWindow material. (macOS 10.14+)
+ :fullScreen: The standard macOS full screen material.
+ (macOS 10.14+)
+ :toolTip: The standard macOS tool tip material. (macOS 10.14+)
+ :contentBackground: The standard macOS content background material.
+ (macOS 10.14+)
+ :underWindowBackground: The standard macOS under window background material.
+ (macOS 10.14+)
+ :underPageBackground: The standard macOS under page background material.
+ (deprecated in macOS 10.14+)
+ :dark: The standard macOS dark material.
+ (deprecated in macOS 10.14+)
+ :light: The standard macOS light material.
+ (macOS 10.14+)
+ :mediumLight: The standard macOS mediumLight material.
+ (macOS 10.11+, deprecated in macOS 10.14+)
+ :ultraDark: The standard macOS ultraDark material.
+ (macOS 10.11+ deprecated in macOS 10.14+)
+
+``--macos-title-bar-color=<color>``
+ Sets the color of the title bar (default: completely transparent). Is
+ influenced by ``--macos-title-bar-appearance`` and
+ ``--macos-title-bar-material``.
+ See ``--sub-color`` for color syntax.
+
+``--macos-fs-animation-duration=<default|0-1000>``
+ Sets the fullscreen resize animation duration in ms (default: default).
+ The default value is slightly less than the system's animation duration
+ (500ms) to prevent some problems when the end of an async animation happens
+ at the same time as the end of the system wide fullscreen animation. Setting
+ anything higher than 500ms will only prematurely cancel the resize animation
+ after the system wide animation ended. The upper limit is still set at
+ 1000ms since it's possible that Apple or the user changes the system
+ defaults. Anything higher than 1000ms though seems too long and shouldn't be
+ set anyway.
+ (macOS and cocoa-cb only)
+
+
+``--macos-app-activation-policy=<regular|accessory|prohibited>``
+ Changes the App activation policy. With accessory the mpv icon in the Dock
+ can be hidden. (default: regular)
+
+ macOS only.
+
+``--macos-geometry-calculation=<visible|whole>``
+ This changes the rectangle which is used to calculate the screen position
+ and size of the window (default: visible). ``visible`` takes the the menu
+ bar and Dock into account and the window is only positioned/sized within the
+ visible screen frame rectangle, ``whole`` takes the whole screen frame
+ rectangle and ignores the menu bar and Dock. Other previous restrictions
+ still apply, like the window can't be placed on top of the menu bar etc.
+
+ macOS only.
+
+``--macos-render-timer=<timer>``
+ Sets the mode (default: callback) for syncing the rendering of frames to the display's
+ vertical refresh rate.
+ macOS and Vulkan (macvk) only.
+
+ ``<timer>`` can be one of the following:
+
+ :callback: Syncs to the CVDisplayLink callback
+ :precise: Syncs to the time of the next vertical display refresh reported by the
+ CVDisplayLink callback provided information
+ :system: No manual syncing, depend on the layer mechanic and the next drawable
+
+``--android-surface-size=<WxH>``
+ Set dimensions of the rendering surface used by the Android gpu context.
+ Needs to be set by the embedding application if the dimensions change during
+ runtime (i.e. if the device is rotated), via the surfaceChanged callback.
+
+ Android with ``--gpu-context=android`` only.
+
+``--gpu-sw``
+ Continue even if a software renderer is detected.
+
+``--gpu-context=<sys>``
+ The value ``auto`` (the default) selects the GPU context. You can also pass
+ ``help`` to get a complete list of compiled in backends (sorted by
+ autoprobe order).
+
+ auto
+ auto-select (default)
+ cocoa
+ Cocoa/macOS (deprecated, use --vo=libmpv instead)
+ win
+ Win32/WGL
+ winvk
+ VK_KHR_win32_surface
+ angle
+ Direct3D11 through the OpenGL ES translation layer ANGLE. This supports
+ almost everything the ``win`` backend does (if the ANGLE build is new
+ enough).
+ dxinterop (experimental)
+ Win32, using WGL for rendering and Direct3D 9Ex for presentation. Works
+ on Nvidia and AMD. Newer Intel chips with the latest drivers may also
+ work.
+ d3d11
+ Win32, with native Direct3D 11 rendering.
+ x11
+ X11/GLX (deprecated/legacy, EGL is preferred these days)
+ x11vk
+ VK_KHR_xlib_surface
+ wayland
+ Wayland/EGL
+ waylandvk
+ VK_KHR_wayland_surface
+ drm
+ DRM/EGL
+ displayvk
+ VK_KHR_display. This backend is roughly the Vukan equivalent of
+ DRM/EGL, allowing for direct rendering via Vulkan without a display
+ manager.
+ x11egl
+ X11/EGL
+ android
+ Android/EGL. Requires ``--wid`` be set to an ``android.view.Surface``.
+ macvk
+ Vulkan on macOS with a metal surface through a translation layer (experimental)
+
+``--gpu-api=<type>``
+ Controls which type of graphics APIs will be accepted:
+
+ auto
+ Use any available API (default)
+ opengl
+ Allow only OpenGL (requires OpenGL 2.1+ or GLES 2.0+)
+ vulkan
+ Allow only Vulkan (requires a valid/working ``--spirv-compiler``)
+ d3d11
+ Allow only ``--gpu-context=d3d11``
+
+``--opengl-es=<mode>``
+ Controls which type of OpenGL context will be accepted:
+
+ auto
+ Allow all types of OpenGL (default)
+ yes
+ Only allow GLES
+ no
+ Only allow desktop/core GL
+
+``--fbo-format=<fmt>``
+ Selects the internal format of textures used for FBOs. The format can
+ influence performance and quality of the video output. ``fmt`` can be one
+ of: rgb8, rgb10, rgb10_a2, rgb16, rgb16f, rgb32f, rgba12, rgba16, rgba16f,
+ rgba16hf, rgba32f.
+
+ Default: ``auto``, which first attempts to utilize 16bit float
+ (rgba16f, rgba16hf), and falls back to rgba16 if those are not available.
+ Finally, attempts to utilize rgb10_a2 or rgba8 if all of the previous formats
+ are not available.
+
+``--gamma-factor=<0.1..2.0>``
+ Set an additional raw gamma factor (default: 1.0). If gamma is adjusted in
+ other ways (like with the ``--gamma`` option or key bindings and the
+ ``gamma`` property), the value is multiplied with the other gamma value.
+
+ This option is deprecated and may be removed in the future.
+
+``--gamma-auto``
+ Automatically corrects the gamma value depending on ambient lighting
+ conditions (adding a gamma boost for bright rooms).
+
+ This option is deprecated and may be removed in the future.
+
+ NOTE: Only implemented on macOS.
+
+``--image-lut=<file>``
+ Specifies a custom LUT file (in Adobe .cube format) to apply to the colors
+ during image decoding. The exact interpretation of the LUT depends on
+ the value of ``--image-lut-type``. (Only for ``--vo=gpu-next``)
+
+``--image-lut-type=<value>``
+ Controls the interpretation of color values fed to and from the LUT
+ specified as ``--image-lut``. Valid values are:
+
+ auto
+ Chooses the interpretation of the LUT automatically from tagged
+ metadata, and otherwise falls back to ``native``. (Default)
+ native
+ Applied to the raw image contents in its native colorspace, before
+ decoding to RGB. For example, for a HDR10 image, this would be fed
+ PQ-encoded YCbCr values in the range 0.0 - 1.0.
+ normalized
+ Applied to the normalized RGB image contents, after decoding from
+ its native color encoding, but before linearization.
+ conversion
+ Fully replaces the color decoding. A LUT of this type should ingest the
+ image's native colorspace and output normalized non-linear RGB.
+
+``--target-colorspace-hint``
+ Automatically configure the output colorspace of the display to pass
+ through the input values of the stream (e.g. for HDR passthrough), if
+ possible. Requires a supporting driver and ``--vo=gpu-next``.
+
+``--target-prim=<value>``
+ Specifies the primaries of the display. Video colors will be adapted to
+ this colorspace when ICC color management is not being used. Valid values
+ are:
+
+ auto
+ Disable any adaptation, except for atypical color spaces. Specifically,
+ wide/unusual gamuts get automatically adapted to BT.709, while standard
+ gamut (i.e. BT.601 and BT.709) content is not touched. (default)
+ bt.470m
+ ITU-R BT.470 M
+ bt.601-525
+ ITU-R BT.601 (525-line SD systems, eg. NTSC), SMPTE 170M/240M
+ bt.601-625
+ ITU-R BT.601 (625-line SD systems, eg. PAL/SECAM), ITU-R BT.470 B/G
+ bt.709
+ ITU-R BT.709 (HD), IEC 61966-2-4 (sRGB), SMPTE RP177 Annex B
+ bt.2020
+ ITU-R BT.2020 (UHD)
+ apple
+ Apple RGB
+ adobe
+ Adobe RGB (1998)
+ prophoto
+ ProPhoto RGB (ROMM)
+ cie1931
+ CIE 1931 RGB (not to be confused with CIE XYZ)
+ dci-p3
+ DCI-P3 (Digital Cinema Colorspace), SMPTE RP431-2
+ v-gamut
+ Panasonic V-Gamut (VARICAM) primaries
+ s-gamut
+ Sony S-Gamut (S-Log) primaries
+
+``--target-trc=<value>``
+ Specifies the transfer characteristics (gamma) of the display. Video colors
+ will be adjusted to this curve when ICC color management is not being used.
+ Valid values are:
+
+ auto
+ Disable any adaptation, except for atypical transfers. Specifically,
+ HDR or linear light source material gets automatically converted to
+ gamma 2.2, while SDR content is not touched. (default)
+ bt.1886
+ ITU-R BT.1886 curve (assuming infinite contrast)
+ srgb
+ IEC 61966-2-4 (sRGB)
+ linear
+ Linear light output
+ gamma1.8
+ Pure power curve (gamma 1.8), also used for Apple RGB
+ gamma2.0
+ Pure power curve (gamma 2.0)
+ gamma2.2
+ Pure power curve (gamma 2.2)
+ gamma2.4
+ Pure power curve (gamma 2.4)
+ gamma2.6
+ Pure power curve (gamma 2.6)
+ gamma2.8
+ Pure power curve (gamma 2.8), also used for BT.470-BG
+ prophoto
+ ProPhoto RGB (ROMM)
+ pq
+ ITU-R BT.2100 PQ (Perceptual quantizer) curve, aka SMPTE ST2084
+ hlg
+ ITU-R BT.2100 HLG (Hybrid Log-gamma) curve, aka ARIB STD-B67
+ v-log
+ Panasonic V-Log (VARICAM) curve
+ s-log1
+ Sony S-Log1 curve
+ s-log2
+ Sony S-Log2 curve
+
+ .. note::
+
+ When using HDR output formats, mpv will encode to the specified
+ curve but it will not set any HDMI flags or other signalling that might
+ be required for the target device to correctly display the HDR signal.
+ The user should independently guarantee this before using these signal
+ formats for display.
+
+``--target-peak=<auto|nits>``
+ Specifies the measured peak brightness of the output display, in cd/m^2
+ (AKA nits). The interpretation of this brightness depends on the configured
+ ``--target-trc``. In all cases, it imposes a limit on the signal values
+ that will be sent to the display. If the source exceeds this brightness
+ level, a tone mapping filter will be inserted. For HLG, it has the
+ additional effect of parametrizing the inverse OOTF, in order to get
+ colorimetrically consistent results with the mastering display. For SDR, or
+ when using an ICC (profile (``--icc-profile``), setting this to a value
+ above 203 essentially causes the display to be treated as if it were an HDR
+ display in disguise. (See the note below)
+
+ In ``auto`` mode (the default), the chosen peak is an appropriate value
+ based on the TRC in use. For SDR curves, it uses 203. For HDR curves, it
+ uses 203 * the transfer function's nominal peak.
+
+ .. note::
+
+ When using an SDR transfer function, this is normally not needed, and
+ setting it may lead to very unexpected results. The one time it *is*
+ useful is if you want to calibrate a HDR display using traditional
+ transfer functions and calibration equipment. In such cases, you can
+ set your HDR display to a high brightness such as 800 cd/m^2, and then
+ calibrate it to a standard curve like gamma2.8. Setting this value to
+ 800 would then instruct mpv to essentially treat it as an HDR display
+ with the given peak. This may be a good alternative in environments
+ where PQ or HLG input to the display is not possible, and makes it
+ possible to use HDR displays with mpv regardless of operating system
+ support for HDMI HDR metadata.
+
+ In such a configuration, we highly recommend setting ``--tone-mapping``
+ to ``mobius`` or even ``clip``.
+
+``--target-contrast=<auto|10-1000000|inf>``
+ Specifies the measured contrast of the output display. ``--target-contrast``
+ in conjunction with ``--target-peak`` value is used to calculate display
+ black point. Used in black point compensation during HDR tone-mapping.
+ ``auto`` is the default and assumes 1000:1 contrast as a typical SDR display
+ would have or an infinite contrast when HDR ``--target-trc`` is used.
+ ``inf`` contrast specifies display with perfect black level, in practice OLED.
+ (Only for ``--vo=gpu-next``)
+
+``--target-gamut=<value>``
+ Constrains the gamut of the display. You can use this option to output e.g.
+ DCIP3-in-BT.2020. Set ``--target-prim`` to the primaries of the containing
+ colorspace (into which values will be encoded), and ``--target-gamut`` to
+ the gamut you want to limit colors to. Takes the same values as
+ ``--target-prim``. (Only for ``--vo=gpu-next``)
+
+``--target-lut=<file>``
+ Specifies a custom LUT file (in Adobe .cube format) to apply to the colors
+ before display on-screen. This LUT is fed values in normalized RGB, after
+ encoding into the target colorspace, so after the application of
+ ``--target-trc``. (Only for ``--vo=gpu-next``)
+
+``--tone-mapping=<value>``
+ Specifies the algorithm used for tone-mapping images onto the target
+ display. This is relevant for both HDR->SDR conversion as well as gamut
+ reduction (e.g. playing back BT.2020 content on a standard gamut display).
+ Valid values are:
+
+ auto
+ Choose the best curve according to internal heuristics. (Default)
+ clip
+ Hard-clip any out-of-range values. Use this when you care about
+ perfect color accuracy for in-range values at the cost of completely
+ distorting out-of-range values. Not generally recommended.
+ mobius
+ Generalization of Reinhard to a Möbius transform with linear section.
+ Smoothly maps out-of-range values while retaining contrast and colors
+ for in-range material as much as possible. Use this when you care about
+ color accuracy more than detail preservation. This is somewhere in
+ between ``clip`` and ``reinhard``, depending on the value of
+ ``--tone-mapping-param``.
+ reinhard
+ Reinhard tone mapping algorithm. Very simple continuous curve.
+ Preserves overall image brightness but uses nonlinear contrast, which
+ results in flattening of details and degradation in color accuracy.
+ hable
+ Similar to ``reinhard`` but preserves both dark and bright details
+ better (slightly sigmoidal), at the cost of slightly darkening /
+ desaturating everything. Developed by John Hable for use in video
+ games. Use this when you care about detail preservation more than
+ color/brightness accuracy. This is roughly equivalent to
+ ``--tone-mapping=reinhard --tone-mapping-param=0.24``. If possible,
+ you should also enable ``--hdr-compute-peak`` for the best results.
+ bt.2390
+ Perceptual tone mapping curve (EETF) specified in ITU-R Report BT.2390.
+ gamma
+ Fits a logarithmic transfer between the tone curves.
+ linear
+ Linearly stretches the entire reference gamut to (a linear multiple of)
+ the display.
+ spline
+ Perceptually linear single-pivot polynomial. (``--vo=gpu-next`` only)
+ bt.2446a
+ HDR<->SDR mapping specified in ITU-R Report BT.2446, method A. This is
+ the recommended curve for well-mastered content. (``--vo=gpu-next``
+ only)
+ st2094-40
+ Dynamic HDR10+ tone-mapping method specified in SMPTE ST2094-40 Annex
+ B. In the absence of metadata, falls back to a fixed spline matched to
+ the input/output average brightness characteristics. (``--vo=gpu-next``
+ only)
+ st2094-10
+ Dynamic tone-mapping method specified in SMPTE ST2094-10 Annex B.2.
+ Conceptually simpler than ST2094-40, and generally produces worse
+ results.
+
+``--tone-mapping-param=<value>``
+ Set tone mapping parameters. By default, this is set to the special string
+ ``default``, which maps to an algorithm-specific default value. Ignored if
+ the tone mapping algorithm is not tunable. This affects the following tone
+ mapping algorithms:
+
+ clip
+ Specifies an extra linear coefficient to multiply into the signal
+ before clipping. Defaults to 1.0.
+ mobius
+ Specifies the transition point from linear to mobius transform. Every
+ value below this point is guaranteed to be mapped 1:1. The higher the
+ value, the more accurate the result will be, at the cost of losing
+ bright details. Defaults to 0.3, which due to the steep initial slope
+ still preserves in-range colors fairly accurately.
+ reinhard
+ Specifies the local contrast coefficient at the display peak. Defaults
+ to 0.5, which means that in-gamut values will be about half as bright
+ as when clipping.
+ bt.2390
+ Specifies the offset for the knee point. Defaults to 1.0, which is
+ higher than the value from the original ITU-R specification (0.5).
+ (``--vo=gpu-next`` only)
+ gamma
+ Specifies the exponent of the function. Defaults to 1.8.
+ linear
+ Specifies the scale factor to use while stretching. Defaults to 1.0.
+ spline
+ Specifies the knee point (in PQ space). Defaults to 0.30.
+ st2094-10
+ Specifies the contrast (slope) at the knee point. Defaults to 1.0.
+
+``--inverse-tone-mapping``
+ If set, allows inverse tone mapping (expanding SDR to HDR). Not supported
+ by all tone mapping curves. Use with caution. (``--vo=gpu-next`` only)
+
+``--tone-mapping-max-boost=<1.0..10.0>``
+ Upper limit for how much the tone mapping algorithm is allowed to boost
+ the average brightness by over-exposing the image. The default value of 1.0
+ allows no additional brightness boost. A value of 2.0 would allow
+ over-exposing by a factor of 2, and so on. Raising this setting can help
+ reveal details that would otherwise be hidden in dark scenes, but raising
+ it too high will make dark scenes appear unnaturally bright. (``--vo=gpu``
+ only)
+
+``--tone-mapping-visualize``
+ Display a (PQ-PQ) graph of the active tone-mapping LUT. Intended only for
+ debugging purposes. The X axis shows PQ input values, the Y axis shows PQ
+ output values. The tone-mapping curve is shown in green/yellow. Yellow
+ means the brightness has been boosted from the source, dark blue regions
+ show where the brightness has been reduced. The extra colored regions and
+ lines indicate various monitor limits, as well a reference diagonal
+ (neutral tone-mapping) and source scene average brightness information (if
+ available). (``--vo=gpu-next`` only)
+
+``--gamut-mapping-mode``
+ Specifies the algorithm used for reducing the gamut of images for the
+ target display, after any tone mapping is done.
+
+ auto
+ Choose the best mode automatically. (Default)
+ clip
+ Hard-clip to the gamut (per-channel). Very low quality, but free.
+ perceptual
+ Performs a perceptually balanced gamut mapping using a soft knee
+ function to roll-off clipped regions, and a hue shifting function to
+ preserve saturation. (``--vo=gpu-next`` only)
+ relative
+ Performs relative colorimetric clipping, while maintaining an
+ exponential relationship between brightness and chromaticity.
+ (``--vo=gpu-next`` only)
+ saturation
+ Performs simple RGB->RGB saturation mapping. The input R/G/B channels
+ are mapped directly onto the output R/G/B channels. Will never clip,
+ but will distort all hues and/or result in a faded look.
+ (``--vo=gpu-next`` only)
+ absolute
+ Performs absolute colorimetric clipping. Like ``relative``, but does
+ not adapt the white point. (``--vo=gpu-next`` only)
+ desaturate
+ Performs constant-luminance colorimetric clipping, desaturing colors
+ towards white until they're in-range.
+ darken
+ Uniformly darkens the input slightly to prevent clipping on blown-out
+ highlights, then clamps colorimetrically to the input gamut boundary,
+ biased slightly to preserve chromaticity over luminance.
+ (``--vo=gpu-next`` only)
+ warn
+ Performs no gamut mapping, but simply highlights out-of-gamut pixels.
+ linear
+ Linearly/uniformly desaturates the image in order to bring the entire
+ image into the target gamut. (``--vo=gpu-next`` only)
+
+``--hdr-compute-peak=<auto|yes|no>``
+ Compute the HDR peak and frame average brightness per-frame instead of
+ relying on tagged metadata. These values are averaged over local regions as
+ well as over several frames to prevent the value from jittering around too
+ much. This option basically gives you dynamic, per-scene tone mapping.
+ Requires compute shaders, which is a fairly recent OpenGL feature, and will
+ probably also perform horribly on some drivers, so enable at your own risk.
+ The special value ``auto`` (default) will enable HDR peak computation
+ automatically if compute shaders and SSBOs are supported.
+
+``--allow-delayed-peak-detect``
+ When using ``--hdr-compute-peak``, allow delaying the detected peak by a
+ frame when beneficial for performance. In particular, this is required to
+ avoid an unnecessary FBO indirection when no advanced rendering is required
+ otherwise. Has no effect if there already is an indirect pass, such as when
+ advanced scaling is enabled. Defaults to no. (Only affects
+ ``--vo=gpu-next``, note that ``--vo=gpu`` always delays the peak.)
+
+``--hdr-peak-percentile=<0.0..100.0>``
+ Which percentile of the input image brightness histogram to consider as the
+ true peak of the scene. If this is set to 100 (default), the
+ brightest pixel is measured. Otherwise, the top of the frequency
+ distribution is progressively cut off. Setting this too low will cause
+ clipping of very bright details, but can improve the dynamic brightness
+ range of scenes with very bright isolated highlights. Values other than 100
+ come with a small performance penalty. (Only for ``--vo=gpu-next``)
+
+``--hdr-peak-decay-rate=<0.0..1000.0>``
+ The decay rate used for the HDR peak detection algorithm (default: 20.0).
+ This is only relevant when ``--hdr-compute-peak`` is enabled. Higher values
+ make the peak decay more slowly, leading to more stable values at the cost
+ of more "eye adaptation"-like effects (although this is mitigated somewhat
+ by ``--hdr-scene-threshold``). A value of 0.0 (the lowest possible) disables
+ all averaging, meaning each frame's value is used directly as measured,
+ but doing this is not recommended for "noisy" sources since it may lead
+ to excessive flicker. (In signal theory terms, this controls the time
+ constant "tau" of an IIR low pass filter)
+
+``--hdr-scene-threshold-low=<0.0..100.0>``, ``--hdr-scene-threshold-high=<0.0..100.0>``
+ The lower and upper thresholds (in dB) for a brightness difference
+ to be considered a scene change (default: 1.0 low, 3.0 high). This is only
+ relevant when ``--hdr-compute-peak`` is enabled. Normally, small
+ fluctuations in the frame brightness are compensated for by the peak
+ averaging mechanism, but for large jumps in the brightness this can result
+ in the frame remaining too bright or too dark for up to several seconds,
+ depending on the value of ``--hdr-peak-decay-rate``. To counteract this,
+ when the brightness between the running average and the current frame
+ exceeds the low threshold, mpv will make the averaging filter more
+ aggressive, up to the limit of the high threshold (at which point the
+ filter becomes instant).
+
+``--hdr-contrast-recovery=<0.0..2.0>``, ``--hdr-contrast-smoothness=<1.0..100.0>``
+ Enables the HDR contrast recovery algorithm, which is to designed to
+ enhance contrast of HDR video after tone mapping. The strength (default:
+ 0.0) indicates the degree of contrast recovery, with 0.0 being completely
+ disabled and 1.0 being 100% strength. Values higher than 1.0 are allowed,
+ but may result in excessive sharpening. The smoothness (default: 3.5)
+ indicates the degree to which the HDR source is low-passed in order to
+ obtain contrast information - a value of 2.0 corresponds to 2x downscaling.
+ Users on low DPI displays (<= 100) may want to lower this value, while
+ users on very high DPI displays ("retina") may want to increase it. (Only
+ for ``vo=gpu-next``)
+
+``--use-embedded-icc-profile``
+ Load the embedded ICC profile contained in media files such as PNG images.
+ (Default: yes). Note that this option only works when also using a display
+ ICC profile (``--icc-profile`` or ``--icc-profile-auto``), and also
+ requires LittleCMS 2 support.
+
+``--icc-profile=<file>``
+ Load an ICC profile and use it to transform video RGB to screen output.
+ Needs LittleCMS 2 support compiled in. This option overrides the
+ ``--target-prim``, ``--target-trc`` and ``--icc-profile-auto`` options.
+
+``--icc-profile-auto``
+ Automatically select the ICC display profile currently specified by the
+ display settings of the operating system.
+
+ NOTE: On Windows, the default profile must be an ICC profile. WCS profiles
+ are not supported.
+
+ Applications using libmpv with the render API need to provide the ICC
+ profile via ``MPV_RENDER_PARAM_ICC_PROFILE``.
+
+``--icc-cache``
+ Store and load 3DLUTs created from the ICC profile on disk in the
+ cache directory (Default: ``yes``). This can be used to speed up loading,
+ since LittleCMS 2 can take a while to create a 3D LUT. Note that these
+ files contain uncompressed LUTs. Their size depends on the
+ ``--icc-3dlut-size``, and can be very big.
+
+ NOTE: On ``--vo=gpu``, this is not cleaned automatically, so old, unused
+ cache files may stick around indefinitely.
+
+``--icc-cache-dir``
+ The directory where icc cache is stored. Cache is stored in the system's
+ cache directory (usually ``~/.cache/mpv``) if this is unset.
+
+``--icc-intent=<value>``
+ Specifies the ICC intent used for the color transformation (when using
+ ``--icc-profile``).
+
+ 0
+ perceptual
+ 1
+ relative colorimetric (default)
+ 2
+ saturation
+ 3
+ absolute colorimetric
+
+``--icc-3dlut-size=<auto|RxGxB>``
+ Size of the 3D LUT generated from the ICC profile in each dimension. The
+ default of ``auto`` means to pick the size automatically based on the
+ profile characteristics. Sizes may range from 2 to 512.
+
+ NOTE: Setting this option to anything other than ``auto`` is **strongly**
+ discouraged, except for testing.
+
+``--icc-force-contrast=<no|0-1000000|inf>``
+ Override the target device's detected contrast ratio by a specific value.
+ This is detected automatically from the profile if possible, but for some
+ profiles it might be missing, causing the contrast to be assumed as
+ infinite. As a result, video may appear darker than intended. If this is
+ the case, setting this option might help. This only affects BT.1886
+ content. The default of ``no`` means to use the profile values. The special
+ value ``inf`` causes the BT.1886 curve to be treated as a pure power gamma
+ 2.4 function.
+
+``--icc-use-luma``
+ Use ICC profile luminance value. (Only for ``--vo=gpu-next``)
+
+``--lut=<file>``
+ Specifies a custom LUT (in Adobe .cube format) to apply to the colors
+ as part of color conversion. The exact interpretation depends on the value
+ of ``--lut-type``. (Only for ``--vo=gpu-next``)
+
+``--lut-type=<value>``
+ Controls the interpretation of color values fed to and from the LUT
+ specified as ``--lut``. Valid values are:
+
+ auto
+ Chooses the interpretation of the LUT automatically from tagged
+ metadata, and otherwise falls back to ``native``. (Default)
+ native
+ Applied to raw image contents in its native RGB colorspace (non-linear
+ light), before conversion to the output color space.
+ normalized
+ Applied to the normalized RGB image contents, in linear light, before
+ conversion to the output color space.
+ conversion
+ Fully replaces the conversion from the image color space to the output
+ color space. If such a LUT is present, it has the highest priority, and
+ overrides any ICC profiles, as well as options related to tone mapping
+ and output colorimetry (``--target-prim``, ``--target-trc`` etc.).
+
+``--blend-subtitles=<yes|video|no>``
+ Blend subtitles directly onto upscaled video frames, before interpolation
+ and/or color management (default: no). Enabling this causes subtitles to be
+ affected by ``--icc-profile``, ``--target-prim``, ``--target-trc``,
+ ``--interpolation``, ``--gamma-factor`` and ``--glsl-shaders``. It also
+ increases subtitle performance when using ``--interpolation``.
+
+ The downside of enabling this is that it restricts subtitles to the visible
+ portion of the video, so you can't have subtitles exist in the black
+ margins below a video (for example).
+
+ If ``video`` is selected, the behavior is similar to ``yes``, but subs are
+ drawn at the video's native resolution, and scaled along with the video.
+
+ .. warning:: This changes the way subtitle colors are handled. Normally,
+ subtitle colors are assumed to be in sRGB and color managed as
+ such. Enabling this makes them treated as being in the video's
+ color space instead. This is good if you want things like
+ softsubbed ASS signs to match the video colors, but may cause
+ SRT subtitles or similar to look slightly off.
+
+``--alpha=<blend-tiles|blend|yes|no>``
+ Decides what to do if the input has an alpha component.
+
+ blend-tiles
+ Blend the frame against a 16x16 gray/white tiles background (default).
+ blend
+ Blend the frame against the background color (``--background``, normally
+ black).
+ yes
+ Try to create a framebuffer with alpha component. This only makes sense
+ if the video contains alpha information (which is extremely rare) or if
+ you make the background color transparent. May not be supported on all
+ platforms. If alpha framebuffers are unavailable, it silently falls
+ back on a normal framebuffer. Note that if you set the ``--fbo-format``
+ option to a non-default value, a format with alpha must be specified,
+ or this won't work. Whether this really works depends on the windowing
+ system and desktop environment.
+ no
+ Ignore alpha component.
+
+``--opengl-rectangle-textures``
+ Force use of rectangle textures (default: no). Normally this shouldn't have
+ any advantages over normal textures. Note that hardware decoding overrides
+ this flag. Could be removed any time.
+
+``--background=<color>``
+ Color used to draw parts of the mpv window not covered by video. See the
+ ``--sub-color`` option for how colors are defined.
+
+``--gpu-tex-pad-x``, ``--gpu-tex-pad-y``
+ Enlarge the video source textures by this many pixels. For debugging only
+ (normally textures are sized exactly, but due to hardware decoding interop
+ we may have to deal with additional padding, which can be tested with these
+ options). Could be removed any time.
+
+``--opengl-early-flush=<yes|no|auto>``
+ Call ``glFlush()`` after rendering a frame and before attempting to display
+ it (default: auto). Can fix stuttering in some cases, in other cases
+ probably causes it. The ``auto`` mode will call ``glFlush()`` only if
+ the renderer is going to wait for a while after rendering, instead of
+ flipping GL front and backbuffers immediately (i.e. it doesn't call it
+ in display-sync mode).
+
+ On macOS this is always deactivated because it only causes performance
+ problems and other regressions.
+
+``--gpu-dumb-mode=<yes|no|auto>``
+ This mode is extremely restricted, and will disable most extended
+ features. That includes high quality scalers and custom shaders!
+
+ It is intended for hardware that does not support FBOs (including GLES,
+ which supports it insufficiently), or to get some more performance out of
+ bad or old hardware.
+
+ This mode is forced automatically if needed, and this option is mostly
+ useful for debugging. The default of ``auto`` will enable it automatically
+ if nothing uses features which require FBOs.
+
+ This option might be silently removed in the future.
+
+``--gpu-shader-cache``
+ Store and load compiled GLSL shaders in the cache directory (Default:
+ ``yes``). Normally, shader compilation is very fast, so this is not usually
+ needed. It mostly matters for anything based on D3D11 (including ANGLE), as
+ well as on some other proprietary drivers. Enabling this can improve startup
+ performance on these platforms.
+
+ NOTE: On ``--vo=gpu``, is not cleaned automatically, so old, unused cache
+ files may stick around indefinitely.
+
+``--gpu-shader-cache-dir``
+ The directory where gpu shader cache is stored. Cache is stored in the system's
+ cache directory (usually ``~/.cache/mpv``) if this is unset.
+
+``--libplacebo-opts=<key>=<value>[,<key>=<value>[,...]]``
+ Passes extra raw option to the libplacebo rendering backend (used by
+ ``--vo=gpu-next``). May override the effects of any other options set using
+ the normal options system. Requires libplacebo v6.309 or higher. Included
+ for debugging purposes only. For more information, see:
+
+ https://libplacebo.org/options/
+
+Miscellaneous
+-------------
+
+``--display-tags=tag1,tags2,...``
+ Set the list of tags that should be displayed on the terminal. Tags that
+ are in the list, but are not present in the played file, will not be shown.
+ If a value ends with ``*``, all tags are matched by prefix (though there
+ is no general globbing). Just passing ``*`` essentially filtering.
+
+ The default includes a common list of tags, call mpv with ``--list-options``
+ to see it.
+
+ This is a string list option. See `List Options`_ for details.
+
+``--mc=<seconds/frame>``
+ Maximum A-V sync correction per frame (in seconds)
+
+``--autosync=<factor>``
+ Gradually adjusts the A/V sync based on audio delay measurements.
+ Specifying ``--autosync=0``, the default, will cause frame timing to be
+ based entirely on audio delay measurements. Specifying ``--autosync=1``
+ will do the same, but will subtly change the A/V correction algorithm. An
+ uneven video framerate in a video which plays fine with ``--no-audio`` can
+ often be helped by setting this to an integer value greater than 1. The
+ higher the value, the closer the timing will be to ``--no-audio``. Try
+ ``--autosync=30`` to smooth out problems with sound drivers which do not
+ implement a perfect audio delay measurement. With this value, if large A/V
+ sync offsets occur, they will only take about 1 or 2 seconds to settle
+ out. This delay in reaction time to sudden A/V offsets should be the only
+ side effect of turning this option on, for all sound drivers.
+
+``--video-timing-offset=<seconds>``
+ Control how long before video display target time the frame should be
+ rendered (default: 0.050). If a video frame should be displayed at a
+ certain time, the VO will start rendering the frame earlier, and then will
+ perform a blocking wait until the display time, and only then "swap" the
+ frame to display. The rendering cannot start before the previous frame is
+ displayed, so this value is implicitly limited by the video framerate. With
+ normal video frame rates, the default value will ensure that rendering is
+ always immediately started after the previous frame was displayed. On the
+ other hand, setting a too high value can reduce responsiveness with low
+ FPS value.
+
+ This option is interesting for client API users using the render API
+ because you can stop it from limiting your FPS
+ (see ``mpv_render_context_render()`` documentation).
+
+ This applies only to audio timing modes (e.g. ``--video-sync=audio``). In
+ other modes (``--video-sync=display-...``), video timing relies on vsync
+ blocking, and this option is not used.
+
+``--video-sync=<audio|...>``
+ How the player synchronizes audio and video.
+
+ If you use this option, you usually want to set it to ``display-resample``
+ to enable a timing mode that tries to not skip or repeat frames when for
+ example playing 24fps video on a 24Hz screen.
+
+ The modes starting with ``display-`` try to output video frames completely
+ synchronously to the display, using the detected display vertical refresh
+ rate as a hint how fast frames will be displayed on average. These modes
+ change video speed slightly to match the display. See ``--video-sync-...``
+ options for fine tuning. The robustness of this mode is further reduced by
+ making a some idealized assumptions, which may not always apply in reality.
+ Behavior can depend on the VO and the system's video and audio drivers.
+ Media files must use constant framerate. Section-wise VFR might work as well
+ with some container formats (but not e.g. mkv).
+
+ Under some circumstances, the player automatically reverts to ``audio`` mode
+ for some time or permanently. This can happen on very low framerate video,
+ or if the framerate cannot be detected.
+
+ Also in display-sync modes it can happen that interruptions to video
+ playback (such as toggling fullscreen mode, or simply resizing the window)
+ will skip the video frames that should have been displayed, while ``audio``
+ mode will display them after the renderer has resumed (typically resulting
+ in a short A/V desync and the video "catching up").
+
+ Before mpv 0.30.0, there was a fallback to ``audio`` mode on severe A/V
+ desync. This was changed for the sake of not sporadically stopping. Now,
+ ``display-desync`` does what it promises and may desync with audio by an
+ arbitrary amount, until it is manually fixed with a seek.
+
+ These modes also require a vsync blocked presentation mode. For OpenGL, this
+ translates to ``--opengl-swapinterval=1``. For Vulkan, it translates to
+ ``--vulkan-swap-mode=fifo`` (or ``fifo-relaxed``).
+
+ The modes with ``desync`` in their names do not attempt to keep audio/video
+ in sync. They will slowly (or quickly) desync, until e.g. the next seek
+ happens. These modes are meant for testing, not serious use.
+
+ :audio: Time video frames to audio. This is the most robust
+ mode, because the player doesn't have to assume anything
+ about how the display behaves. The disadvantage is that
+ it can lead to occasional frame drops or repeats. If
+ audio is disabled, this uses the system clock. This is
+ the default mode.
+ :display-resample: Resample audio to match the video. This mode will also
+ try to adjust audio speed to compensate for other drift.
+ (This means it will play the audio at a different speed
+ every once in a while to reduce the A/V difference.)
+ :display-resample-vdrop: Resample audio to match the video. Drop video
+ frames to compensate for drift.
+ :display-resample-desync: Like the previous mode, but no A/V compensation.
+ :display-tempo: Same as ``display-resample``, but apply audio speed
+ changes to audio filters instead of resampling to avoid
+ the change in pitch. Beware that some audio filters
+ don't do well with a speed close to 1. It is recommend
+ to use a conditional profile to automatically switch to
+ ``display-resample`` when speed gets too close to 1 for
+ your filter setup. Use (speed * video_speed_correction)
+ to get the actual playback speed in the condition.
+ See `Conditional auto profiles`_ for details.
+ :display-vdrop: Drop or repeat video frames to compensate desyncing
+ video. (Although it should have the same effects as
+ ``audio``, the implementation is very different.)
+ :display-adrop: Drop or repeat audio data to compensate desyncing
+ video. This mode will cause severe audio artifacts if
+ the real monitor refresh rate is too different from
+ the reported or forced rate. Since mpv 0.33.0, this
+ acts on entire audio frames, instead of single samples.
+ :display-desync: Sync video to display, and let audio play on its own.
+ :desync: Sync video according to system clock, and let audio play
+ on its own.
+
+``--video-sync-max-factor=<value>``
+ Maximum multiple for which to try to fit the video's FPS to the display's
+ FPS (default: 5).
+
+ For example, if this is set to 1, the video FPS is forced to an integer
+ multiple of the display FPS, as long as the speed change does not exceed
+ the value set by ``--video-sync-max-video-change``.
+
+ See ``--interpolation-threshold`` for how this option affects
+ interpolation.
+
+``--video-sync-max-video-change=<value>``
+ Maximum speed difference in percent that is applied to video with
+ ``--video-sync=display-...`` (default: 1). Display sync mode will be
+ disabled if the monitor and video refresh way do not match within the
+ given range. It tries multiples as well: playing 30 fps video on a 60 Hz
+ screen will duplicate every second frame. Playing 24 fps video on a 60 Hz
+ screen will play video in a 2-3-2-3-... pattern.
+
+ The default settings are not loose enough to speed up 23.976 fps video to
+ 25 fps. We consider the pitch change too extreme to allow this behavior
+ by default. Set this option to a value of ``5`` to enable it.
+
+ Note that ``--video-sync=display-tempo`` avoids this pitch change.
+
+ Also note that in the ``--video-sync=display-resample`` or
+ ``--video-sync=display-tempo`` mode, audio speed will additionally be
+ changed by a small amount if necessary for A/V sync. See
+ ``--video-sync-max-audio-change``.
+
+``--video-sync-max-audio-change=<value>``
+ Maximum *additional* speed difference in percent that is applied to audio
+ with ``--video-sync=display-...`` (default: 0.125). Normally, the player
+ plays the audio at the speed of the video. But if the difference between
+ audio and video position is too high, e.g. due to drift or other timing
+ errors, it will attempt to speed up or slow down audio by this additional
+ factor. Too low values could lead to video frame dropping or repeating if
+ the A/V desync cannot be compensated, too high values could lead to chaotic
+ frame dropping due to the audio "overshooting" and skipping multiple video
+ frames before the sync logic can react.
+
+``--mf-fps=<value>``
+ Framerate used when decoding from multiple PNG or JPEG files with ``mf://``
+ (default: 1).
+
+``--mf-type=<value>``
+ Input file type for ``mf://`` (available: jpeg, png, tga, sgi). By default,
+ this is guessed from the file extension.
+
+``--stream-dump=<destination-filename>``
+ Instead of playing a file, read its byte stream and write it to the given
+ destination file. The destination is overwritten. Can be useful to test
+ network-related behavior.
+
+``--stream-lavf-o=opt1=value1,opt2=value2,...``
+ Set AVOptions on streams opened with libavformat. Unknown or misspelled
+ options are silently ignored. (They are mentioned in the terminal output
+ in verbose mode, i.e. ``--v``. In general we can't print errors, because
+ other options such as e.g. user agent are not available with all protocols,
+ and printing errors for unknown options would end up being too noisy.)
+
+ This is a key/value list option. See `List Options`_ for details.
+
+``--backdrop-type=<auto|none|mica|acrylic|mica-alt>``
+ (Windows only)
+ Controls the backdrop/border style.
+
+ :auto: Default Windows behavior
+ :none: The backdrop will be black or white depending on the system's theme settings.
+ :mica: Enables the Mica style, which is the default on Windows 11.
+ :acrylic: Enables the Acrylic style (frosted glass look).
+ :mica-alt: Same as Mica, except reversed.
+
+``--window-affinity=<default|excludefromcmcapture|monitor>``
+ (Windows only)
+ Controls the window affinity behavior of mpv.
+
+ :default: Default Windows behavior
+ :excludefromcapture: mpv's window will be completely excluded from capture by external applications or screen recording software.
+ :monitor: Blacks out the mpv window
+
+``--vo-mmcss-profile=<name>``
+ (Windows only)
+ Set the MMCSS profile for the video renderer thread (default: ``Playback``).
+
+``--priority=<prio>``
+ (Windows only)
+ Set process priority for mpv according to the predefined priorities
+ available under Windows.
+
+ Possible values of ``<prio>``:
+ idle|belownormal|normal|abovenormal|high|realtime
+
+ .. warning:: Using realtime priority can cause system lockup.
+
+``--force-media-title=<string>``
+ Force the contents of the ``media-title`` property to this value. Useful
+ for scripts which want to set a title, without overriding the user's
+ setting in ``--title``.
+
+``--external-files=<file-list>``
+ Load a file and add all of its tracks. This is useful to play different
+ files together (for example audio from one file, video from another), or
+ for advanced ``--lavfi-complex`` used (like playing two video files at
+ the same time).
+
+ Unlike ``--sub-files`` and ``--audio-files``, this includes all tracks, and
+ does not cause default stream selection over the "proper" file. This makes
+ it slightly less intrusive. (In mpv 0.28.0 and before, this was not quite
+ strictly enforced.)
+
+ This is a path list option. See `List Options`_ for details.
+
+``--external-file=<file>``
+ CLI/config file only alias for ``--external-files-append``. Each use of this
+ option will add a new external file.
+
+``--cover-art-files=<file-list>``
+ Use an external file as cover art while playing audio. This makes it appear
+ on the track list and subject to automatic track selection. Options like
+ ``--audio-display`` control whether such tracks are supposed to be selected.
+
+ (The difference to loading a file with ``--external-files`` is that video
+ tracks will be marked as being pictures, which affects the auto-selection
+ method. If the passed file is a video, only the first frame will be decoded
+ and displayed. Enabling the cover art track during playback may show a
+ random frame if the source file is a video. Normally you're not supposed to
+ pass videos to this option, so this paragraph describes the behavior
+ coincidentally resulting from implementation details.)
+
+ This is a path list option. See `List Options`_ for details.
+
+``--cover-art-file=<file>``
+ CLI/config file only alias for ``--cover-art-files-append``. Each use of this
+ option will add a new external file.
+
+``--cover-art-auto=<no|exact|fuzzy|all>``
+ Whether to load _external_ cover art automatically. Similar to
+ ``--sub-auto`` and ``--audio-file-auto``. If a video already has tracks
+ (which are not marked as cover art), external cover art will not be loaded.
+
+ :no: Don't automatically load cover art.
+ :exact: Load the media filename with an image file extension (default).
+ :fuzzy: Load all cover art containing the media filename.
+ :all: Load all images in the current directory.
+
+ See ``--cover-art-files`` for details about what constitutes cover art.
+
+ See ``--audio-display`` how to control display of cover art (this can be
+ used to disable cover art that is part of the file).
+
+``--cover-art-auto-exts=ext1,ext2,...``
+ Cover art extentions to try and match when using ``cover-art-auto``.
+
+ This is a string list option. See `List Options`_ for details.
+
+``--cover-art-whitelist=<no|yes>``
+ Whether to load files with a filename among "AlbumArt", "Album", "cover",
+ "front", "AlbumArtSmall", "Folder", ".folder", "thumb", and an extension in
+ ``--cover-art-auto-exts``, as cover art. This has no effect if
+ ``cover-art-auto`` is ``no``.
+
+ Default: ``yes``.
+
+``--autoload-files=<yes|no>``
+ Automatically load/select external files (default: yes).
+
+ If set to ``no``, then do not automatically load external files as specified
+ by ``--sub-auto``, ``--audio-file-auto`` and ``--cover-art-auto``. If
+ external files are forcibly added (like with ``--sub-files``), they will
+ not be auto-selected.
+
+ This does not affect playlist expansion, redirection, or other loading of
+ referenced files like with ordered chapters.
+
+``--stream-record=<file>``
+ Write received/read data from the demuxer to the given output file. The
+ output file will always be overwritten without asking. The output format
+ is determined by the extension of the output file.
+
+ Switching streams or seeking during recording might result in recording
+ being stopped and/or broken files. Use with care.
+
+ Seeking outside of the demuxer cache will result in "skips" in the output
+ file, but seeking within the demuxer cache should not affect recording. One
+ exception is when you seek back far enough to exceed the forward buffering
+ size, in which case the cache stops actively reading. This will return in
+ dropped data if it's a live stream.
+
+ If this is set at runtime, the old file is closed, and the new file is
+ opened. Note that this will write only data that is appended at the end of
+ the cache, and the already cached data cannot be written. You can try the
+ ``dump-cache`` command as an alternative.
+
+ External files (``--audio-file`` etc.) are ignored by this, it works on the
+ "main" file only. Using this with files using ordered chapters or EDL files
+ will also not work correctly in general.
+
+ There are some glitches with this because it uses FFmpeg's libavformat for
+ writing the output file. For example, it's typical that it will only work if
+ the output format is the same as the input format. This is the case even if
+ it works with the ``ffmpeg`` tool. One reason for this is that ``ffmpeg``
+ and its libraries contain certain hacks and workarounds for these issues,
+ that are unavailable to outside users.
+
+``--lavfi-complex=<string>``
+ Set a "complex" libavfilter filter, which means a single filter graph can
+ take input from multiple source audio and video tracks. The graph can result
+ in a single audio or video output (or both).
+
+ Currently, the filter graph labels are used to select the participating
+ input tracks and audio/video output. The following rules apply:
+
+ - A label of the form ``aidN`` selects audio track N as input (e.g.
+ ``aid1``).
+ - A label of the form ``vidN`` selects video track N as input.
+ - A label named ``ao`` will be connected to the audio output.
+ - A label named ``vo`` will be connected to the video output.
+
+ Each label can be used only once. If you want to use e.g. an audio stream
+ for multiple filters, you need to use the ``asplit`` filter. Multiple
+ video or audio outputs are not possible, but you can use filters to merge
+ them into one.
+
+ It's not possible to change the tracks connected to the filter at runtime,
+ unless you explicitly change the ``lavfi-complex`` property and set new
+ track assignments. When the graph is changed, the track selection is changed
+ according to the used labels as well.
+
+ Other tracks, as long as they're not connected to the filter, and the
+ corresponding output is not connected to the filter, can still be freely
+ changed with the normal methods.
+
+ Note that the normal filter chains (``--af``, ``--vf``) are applied between
+ the complex graphs (e.g. ``ao`` label) and the actual output.
+
+ .. admonition:: Examples
+
+ - ``--lavfi-complex='[aid1] [aid2] amix [ao]'``
+ Play audio track 1 and 2 at the same time.
+ - ``--lavfi-complex='[vid1] [vid2] vstack [vo]'``
+ Stack video track 1 and 2 and play them at the same time. Note that
+ both tracks need to have the same width, or filter initialization
+ will fail (you can add ``scale`` filters before the ``vstack`` filter
+ to fix the size).
+ To load a video track from another file, you can use
+ ``--external-file=other.mkv``.
+ - ``--lavfi-complex='[vid1] [vid2] [vid3] hstack=inputs=3 [vo]'``
+ Use the inputs option to stack more than 2 tracks.
+ - ``--lavfi-complex='[aid1] asplit [t1] [ao] ; [t1] showvolume [t2] ; [vid1] [t2] overlay [vo]'``
+ Play audio track 1, and overlay the measured volume for each speaker
+ over video track 1.
+
+ See the FFmpeg libavfilter documentation for details on the available
+ filters.
+
+``--metadata-codepage=<codepage>``
+ Codepage for various input metadata (default: ``auto``). This affects how
+ file tags, chapter titles, etc. are interpreted. In most cases, this merely
+ evaluates to UTF-8 as non-UTF-8 codepages are obscure.
+
+ See ``--sub-codepage`` option on how codepages are specified and further
+ details regarding autodetection and codepage conversion. (The underlying
+ code is the same.)
+
+ Conversion is not applied to metadata that is updated at runtime.