Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
MPV(1)				  multimedia				MPV(1)

       mpv - a media player

       mpv [options] [file|URL|PLAYLIST|-]
       mpv [options] files

       mpv is a	media player based on MPlayer and mplayer2. It supports	a wide
       variety of video	file formats, audio and	 video	codecs,	 and  subtitle
       types. Special input URL	types are available to read input from a vari-
       ety of sources other than disk files. Depending on platform, a  variety
       of different video and audio output methods are supported.

       Usage  examples	to  get	you started quickly can	be found at the	end of
       this man	page.

       mpv has a fully configurable, command-driven control layer which	allows
       you  to	control	mpv using keyboard, mouse, or remote control (there is
       no LIRC support - configure remotes as input devices instead).

       See the --input-	options	for ways to customize it.

       The following listings are not necessarily complete. See	etc/input.conf
       for  a  list of default bindings. User input.conf files and Lua scripts
       can define additional key bindings.

   Keyboard Control
       LEFT and	RIGHT
	      Seek backward/forward 5 seconds. Shift+arrow does	a 1 second ex-
	      act seek (see --hr-seek).

       UP and DOWN
	      Seek  forward/backward 1 minute. Shift+arrow does	a 5 second ex-
	      act seek (see --hr-seek).

       Ctrl+LEFT and Ctrl+RIGHT
	      Seek to the previous/next	subtitle. Subject to some restrictions
	      and might	not always work; see sub-seek command.

       [ and ]
	      Decrease/increase	current	playback speed by 10%.

       { and }
	      Halve/double current playback speed.

	      Reset playback speed to normal.

       < and >
	      Go backward/forward in the playlist.

       ENTER  Go forward in the	playlist.

       p / SPACE
	      Pause (pressing again unpauses).

       .      Step  forward. Pressing once will	pause, every consecutive press
	      will play	one frame and then go into pause mode again.

       ,      Step backward. Pressing once will	pause, every consecutive press
	      will  play  one  frame  in  reverse  and then go into pause mode

       q      Stop playing and quit.

       Q      Like q, but store	the current  playback  position.  Playing  the
	      same file	later will resume at the old playback position if pos-

       / and *
	      Decrease/increase	volume.

       9 and 0
	      Decrease/increase	volume.

       m      Mute sound.

       _      Cycle through the	available video	tracks.

       #      Cycle through the	available audio	tracks.

       f      Toggle fullscreen	(see also --fs).

       ESC    Exit fullscreen mode.

       T      Toggle stay-on-top (see also --ontop).

       w and e
	      Decrease/increase	pan-and-scan range.

       o (also P)
	      Show progression bar, elapsed time and  total  duration  on  the

       O      Toggle OSD states	between	normal and playback time/duration.

       v      Toggle subtitle visibility.

       j and J
	      Cycle through the	available subtitles.

       x and z
	      Adjust subtitle delay by +/- 0.1 seconds.

       l      Set/clear	A-B loop points. See ab-loop command for details.

       L      Toggle infinite looping.

       Ctrl + and Ctrl -
	      Adjust audio delay (A/V sync) by +/- 0.1 seconds.

       u      Switch between applying no style overrides to SSA/ASS subtitles,
	      and overriding them almost completely with the  normal  subtitle
	      style. See --sub-ass-style-override for more info.

       V      Toggle   subtitle	  VSFilter   aspect  compatibility  mode.  See
	      --sub-ass-vsfilter-aspect-compat for more	info.

       r and t
	      Move subtitles up/down.

       s      Take a screenshot.

       S      Take a screenshot, without subtitles. (Whether  this  works  de-
	      pends on VO driver support.)

       Ctrl s Take  a screenshot, as the window	shows it (with subtitles, OSD,
	      and scaled video).

       I      Show filename on the OSD.

       PGUP and	PGDWN
	      Seek to the beginning of	the  previous/next  chapter.  In  most
	      cases,  "previous" will actually go to the beginning of the cur-
	      rent chapter; see	--chapter-seek-threshold.

       Shift+PGUP and Shift+PGDWN
	      Seek backward or forward by 10 minutes. (This used to be	mapped
	      to PGUP/PGDWN without Shift.)

       d      Activate/deactivate deinterlacer.

       A      Cycle aspect ratio override.

       (The  following keys are	valid only when	using a	video output that sup-
       ports  the  corresponding  adjustment,  or   the	  software   equalizer

       1 and 2
	      Adjust contrast.

       3 and 4
	      Adjust brightness.

       5 and 6
	      Adjust gamma.

       7 and 8
	      Adjust saturation.

       Alt+0 (and command+0 on OSX)
	      Resize video window to half its original size.

       Alt+1 (and command+1 on OSX)
	      Resize video window to its original size.

       Alt+2 (and command+2 on OSX)
	      Resize video window to double its	original size.

       command + f (OSX	only)
	      Toggle fullscreen	(see also --fs).

       (The  following	keys  are valid	if you have a keyboard with multimedia

       PAUSE  Pause.

       STOP   Stop playing and quit.

       PREVIOUS	and NEXT
	      Seek backward/forward 1 minute.

       (The following keys are only valid if you compiled with TV or DVB input

       h and k
	      Select previous/next tv-channel.

       H and K
	      Select previous/next dvb-channel.

   Mouse Control
       button 3	and button 4
	      Seek backward/forward 1 minute.

       button 5	and button 6
	      Decrease/increase	volume.

       Command	line arguments starting	with - are interpreted as options, ev-
       erything	else as	filenames or URLs. All options except flag options (or
       choice options which include yes) require a parameter in	the form --op-

       One exception is	the lone - (without anything else), which means	 media
       data  will  be  read  from stdin. Also, -- (without anything else) will
       make the	player interpret all following arguments as filenames, even if
       they start with -. (To play a file named	-, you need to use ./-.)

       Every  flag  option has a no-flag counterpart, e.g. the opposite	of the
       --fs option is --no-fs. --fs=yes	is same	as --fs, --fs=no is  the  same
       as --no-fs.

       If  an option is	marked as (XXX only), it will only work	in combination
       with the	XXX option or if XXX is	compiled in.

   Legacy option syntax
       The --option=value syntax is not	strictly enforced, and the alternative
       legacy  syntax -option value and	--option value will also work. This is
       mostly  for compatibility with MPlayer. Using these should be  avoided.
       Their semantics can change any time in the future.

       For example, the	alternative syntax will	consider an argument following
       the option a filename. mpv -fs no will attempt to play a	file named no,
       because	--fs is	a flag option that requires no parameter. If an	option
       changes and its parameter becomes optional, then	a command  line	 using
       the alternative syntax will break.

       Currently, the parser makes no difference whether an option starts with
       -- or a single -. This might also change	in the	future,	 and  --option
       value might always interpret value as filename in order to reduce ambi-

   Escaping spaces and other special characters
       Keep in mind that the shell will	partially parse	and mangle  the	 argu-
       ments  you  pass	to mpv.	For example, you might need to quote or	escape
       options and filenames:
	  mpv "filename	with spaces.mkv" --title="window title"

       It gets more complicated	if the suboption parser	is involved. The  sub-
       option  parser  puts  several  options into a single string, and	passes
       them to a component at once, instead of using multiple options  on  the
       level of	the command line.

       The suboption parser can	quote strings with " and [...].	 Additionally,
       there is	a special form of quoting with %n% described below.

       For example, assume the hypothetical foo	filter can take	 multiple  op-
	  mpv test.mkv --vf=foo:option1=value1:option2:option3=value3,bar

       This passes option1 and option3 to the foo filter, with option2 as flag
       (implicitly option2=yes), and adds a bar	filter after that. If  an  op-
       tion contains spaces or characters like , or :, you need	to quote them:
	  mpv '--vf=foo:option1="option	value with spaces",bar'

       Shells  may  actually  strip  some quotes from the string passed	to the
       commandline, so the example quotes the string twice, ensuring that  mpv
       receives	the " quotes.

       The  [...] form of quotes wraps everything between [ and	]. It's	useful
       with shells that	don't interpret	these characters in the	middle	of  an
       argument	 (like bash). These quotes are balanced	(since mpv 0.9.0): the
       [ and ] nest, and the quote terminates on the last ] that has no	match-
       ing [ within the	string.	(For example, [a[b]c] results in a[b]c.)

       The  fixed-length  quoting  syntax  is  intended	 for use with external
       scripts and programs.

       It is started with % and	has the	following format:



		 mpv '--vf=foo:option1=%11%quoted text'	test.avi

		 Or in a script:

		 mpv --vf=foo:option1=%`expr length "$NAME"`%"$NAME" test.avi

       Suboptions passed to the	client API are also subject to escaping. Using
       mpv_set_option_string() is exactly like passing --name=data to the com-
       mand line (but without shell processing of the  string).	 Some  options
       support	passing	 values	 in  a	more  structured  way  instead of flat
       strings,	and can	avoid the suboption parsing mess.  For	example,  --vf
       supports	 MPV_FORMAT_NODE,  which  lets you pass	suboptions as a	nested
       data structure of maps and arrays.

       Some care must be taken when passing arbitrary paths and	 filenames  to
       mpv. For	example, paths starting	with - will be interpreted as options.
       Likewise, if a path contains the	sequence ://, the string  before  that
       might be	interpreted as protocol	prefix,	even though ://	can be part of
       a legal UNIX path. To avoid problems with arbitrary paths,  you	should
       be sure that absolute paths passed to mpv start with /, and prefix rel-
       ative paths with	./.

       Using the file:// pseudo-protocol is discouraged, because  it  involves
       strange URL unescaping rules.

       The  name  - itself is interpreted as stdin, and	will cause mpv to dis-
       able console controls. (Which makes it suitable for playing data	 piped
       to stdin.)

       The  special  argument -- can be	used to	stop mpv from interpreting the
       following arguments as options.

       When using the client API, you should  strictly	avoid  using  mpv_com-
       mand_string  for	invoking the loadfile command, and instead prefer e.g.
       mpv_command to avoid the	need for filename escaping.

       For paths passed	to suboptions, the situation is	further	complicated by
       the  need  to  escape special characters. To work this around, the path
       can  be	additionally  wrapped  in  the	 fixed-length	syntax,	  e.g.
       %n%string_of_length_n (see above).

       Some mpv	options	interpret paths	starting with ~. Currently, the	prefix
       ~~/  expands  to	 the  mpv  configuration  directory  (usually  ~/.con-
       fig/mpv/).  ~/ expands to the user's home directory. (The trailing / is
       always required.) There are the following paths as well:

		     |Name	   | Meaning			|
		     |~~home/	   | same as ~~/		|
		     |~~global/	   | the global	config path, if	|
		     |		   | available (not on win32)	|
		     |~~osxbundle/ | the  OSX  bundle  resource	|
		     |		   | path (OSX only)		|
		     |~~desktop/   | the path  to  the	desktop	|
		     |		   | (win32, OSX)		|

   Per-File Options
       When  playing multiple files, any option	given on the command line usu-
       ally affects all	files. Example:

	  mpv --a file1.mkv --b	file2.mkv --c

			    |File      | Active	options	|
			    |file1.mkv | --a --b --c	|
			    |file2.mkv | --a --b --c	|

       (This is	different from MPlayer and mplayer2.)

       Also, if	any option is changed at runtime (via  input  commands),  they
       are not reset when a new	file is	played.

       Sometimes,  it  is  useful  to  change  options	per-file.  This	can be
       achieved	by adding the special per-file markers --{ and --}. (Note that
       you must	escape these on	some shells.) Example:

	  mpv --a file1.mkv --b	--\{ --c file2.mkv --d file3.mkv --e --\} file4.mkv --f

			|File	   | Active options	     |
			|file1.mkv | --a --b --f	     |
			|file2.mkv | --a --b --f --c --d --e |
			|file3.mkv | --a --b --f --c --d --e |
			|file4.mkv | --a --b --f	     |

       Additionally,  any  file-local  option changed at runtime is reset when
       the current file	stops playing. If option --c is	changed	 during	 play-
       back  of	 file2.mkv, it is reset	when advancing to file3.mkv. This only
       affects file-local options. The option --a is never reset here.

   Playing DVDs
       DVDs can	be played with the dvd://[title] syntax.  The  optional	 title
       specifier  is  a	number which selects between separate video streams on
       the DVD.	If no title is given (dvd://) then the longest	title  is  se-
       lected automatically by the library. This is usually what you want. mpv
       does not	support	DVD menus.

       DVDs which have been copied  on	to  a  hard  drive  or	other  mounted
       filesystem  (by e.g. the	dvdbackup tool)	are accommodated by specifying
       the path	to the local copy: --dvd-device=PATH.  Alternatively,  running
       mpv  PATH  should auto-detect a DVD directory tree and play the longest

	  DVD library choices

	  mpv uses a different default DVD library than	MPlayer. MPlayer  uses
	  libdvdread  by default, and mpv uses libdvdnav by default.  Both li-
	  braries are developed	in parallel, but libdvdnav is intended to sup-
	  port	more  sophisticated DVD	features such as menus and multi-angle
	  playback. mpv	uses libdvdnav for files specified as either dvd://...
	  or dvdnav://.... To use libdvdread, which will produce behavior more
	  like MPlayer,	specify	dvdread://... instead. Some users have experi-
	  enced	problems when using libdvdnav, in which	playback gets stuck in
	  a DVD	menu stream. These problems  are  reported  to	go  away  when
	  auto-selecting  the title (dvd:// rather than	dvd://1) or when using
	  libdvdread (e.g. dvdread://0). There are also	 outstanding  bugs  in
	  libdvdnav  with  seeking  backwards  and forwards in a video stream.
	  Specify dvdread://...	to fix such problems.

	  DVD subtitles

	  DVDs use image-based subtitles. Image	subtitles are implemented as a
	  bitmap  video	 stream	which can be superimposed over the main	movie.
	  mpv's	subtitle styling and positioning options and  keyboard	short-
	  cuts	generally  do not work with image-based	subtitles.  Exceptions
	  include   options   like   --stretch-dvd-subs	  and	 --stretch-im-

   Location and	Syntax
       You  can	 put  all  of the options in configuration files which will be
       read  every  time  mpv  is  run.	 The  system-wide  configuration  file
       'mpv.conf'  is  in  your	 configuration	directory  (e.g.  /etc/mpv  or
       /usr/local/etc/mpv), the	user-specific one  is  ~/.config/mpv/mpv.conf.
       For  details  and  platform specifics (in particular Windows paths) see
       the FILES section.

       User-specific options override system-wide options and options given on
       the command line	override either. The syntax of the configuration files
       is option=value.	Everything after a # is	considered a comment.  Options
       that work without values	can be enabled by setting them to yes and dis-
       abled by	setting	them to	no. Even suboptions can	be specified  in  this

	  Example configuration	file

	      #	Use opengl video output	by default.
	      #	Use quotes for text that can contain spaces:
	      status-msg="Time:	${time-pos}"

   Escaping spaces and special characters
       This  is	done like with command line options. The shell is not involved
       here, but option	values still need to be	quoted as a whole if  it  con-
       tains certain characters	like spaces. A config entry can	be quoted with
       ", as well as with the fixed-length syntax (%n%)	mentioned before. This
       is like passing the exact contents of the quoted	string as command line
       option. C-style escapes are currently _not_ interpreted on this	level,
       although	 some  options	do  this  manually. (This is a mess and	should
       probably	be changed at some point.)

   Putting Command Line	Options	into the Configuration File
       Almost all command line options can be put into the configuration file.
       Here is a small guide:

		   |Option	      |	Configuration file entry |
		   |--flag	      |	flag			 |
		   |-opt val	      |	opt=val			 |
		   |--opt=val	      |	opt=val			 |
		   |-opt "has spaces" |	opt="has spaces"	 |

   File-specific Configuration Files
       You  can	 also  write file-specific configuration files.	If you wish to
       have a configuration file for a file called 'video.avi',	create a  file
       named  'video.avi.conf' with the	file-specific options in it and	put it
       in ~/.config/mpv/. You can also put the configuration file in the  same
       directory  as  the  file	 to  be	 played.  Both	require	you to set the
       --use-filedir-conf option (either on the	command	line or	in your	global
       config  file).  If  a  file-specific configuration file is found	in the
       same directory, no file-specific	configuration is loaded	 from  ~/.con-
       fig/mpv.	 In  addition,	the  --use-filedir-conf	 option	enables	direc-
       tory-specific configuration files.  For this, mpv first tries to	load a
       mpv.conf	 from  the same	directory as the file played and then tries to
       load any	file-specific configuration.

       To ease working with different configurations, profiles can be  defined
       in  the	configuration  files. A	profile	starts with its	name in	square
       brackets, e.g. [my-profile]. All	following options will be part of  the
       profile.	 A  description	 (shown	by --profile=help) can be defined with
       the profile-desc	option.	To end the profile, start another one  or  use
       the profile name	default	to continue with normal	options.

	  Example mpv config file with profiles

	      #	normal top-level option

	      #	a profile that can be enabled with --profile=big-cache

	      profile-desc="some profile name"
	      #	reference a builtin profile


	      #	using a	profile	again extends it
	      #	you can	also include other profiles

   Auto	profiles
       Some  profiles  are  loaded automatically. The following	example	demon-
       strates this:

	  Auto profile loading

	      profile-desc="profile for	dvd:// streams"

	      profile-desc="profile for	.flv files"

       The profile name	follows	the schema, where type can be	proto-
       col  for	 the  input/output protocol in use (see	--list-protocols), and
       extension for the extension of the path of the  currently  played  file
       (not the	file format).

       This feature is very limited, and there are no other auto profiles.

       Screenshots  of	the  currently	played	file  can  be  taken using the
       'screenshot' input mode command,	which is by default  bound  to	the  s
       key.  Files  named mpv-shotNNNN.jpg will	be saved in the	working	direc-
       tory, using the first available number -	no files will be  overwritten.
       In  pseudo-GUI  mode,  the screenshot will be saved somewhere else. See

       A screenshot will usually contain the unscaled video  contents  at  the
       end  of	the  video  filter  chain  and	subtitles. By default, S takes
       screenshots without subtitles, while s includes subtitles.

       Unlike with MPlayer, the	screenshot video filter	is not required.  This
       filter was never	required in mpv, and has been removed.

       During  playback,  mpv  shows  the  playback status on the terminal. It
       looks like something like this:
	  AV: 00:03:12 / 00:24:25 (13%)	A-V: -0.000

       The status line can be overridden with the --term-status-msg option.

       The following is	a list of things that can show up in the status	 line.
       Input  properties,  that	 can be	used to	get the	same information manu-
       ally, are also listed.

       o AV: or	V: (video only)	or A: (audio only)

       o The current time position in HH:MM:SS format (playback-time property)

       o The total file	duration (absent if unknown) (length property)

       o Playback speed, e.g. `` x2.0``. Only visible if the speed is not nor-
	 mal.  This  is	 the  user-requested  speed,  and not the actual speed
	 (usually they should be the  same,  unless  playback  is  too	slow).
	 (speed	property.)

       o Playback  percentage,	e.g.  (13%).  How  much	 of  the file has been
	 played.  Normally calculated out of playback position	and  duration,
	 but  can  fallback to other methods (like byte	position) if these are
	 not available.	 (percent-pos property.)

       o The audio/video sync as A-V:  0.000. This is the  difference  between
	 audio	and video time.	Normally it should be 0	or close to 0. If it's
	 growing, it might indicate a playback problem.	(avsync	property.)

       o Total A/V sync	change,	e.g. ct: -0.417. Normally invisible. Can  show
	 up  if	there is audio "missing", or not enough	frames can be dropped.
	 Usually this will indicate a problem. (total-avsync-change property.)

       o Encoding state	in {...}, only shown in	encoding mode.

       o Display sync state. If	display	sync  is  active  (display-sync-active
	 property), this shows DS: 2.500/13, where the first number is average
	 number	of vsyncs per video frame (e.g.	2.5 when playing  24Hz	videos
	 on  60Hz screens), which might	jitter if the ratio doesn't round off,
	 or there are mistimed frames (vsync-ratio), and the second number  of
	 estimated   number   of   vsyncs   which   took   too	 long  (vo-de-
	 layed-frame-count property). The latter is a heuristic, as it's  gen-
	 erally	not possible to	determine this with certainty.

       o Dropped frames, e.g. Dropped: 4. Shows	up only	if the count is	not 0.
	 Can grow if the video framerate is higher than	that of	 the  display,
	 or  if	 video rendering is too	slow. May also be incremented on "hic-
	 cups" and when	 the  video  frame  couldn't  be  displayed  on	 time.
	 (vo-drop-frame-count  property.)   If	the  decoder drops frames, the
	 number	of decoder-dropped frames is appended to the display as	 well,
	 e.g.:	Dropped:  4/34.	This happens only if decoder frame dropping is
	 enabled with the --framedrop options.	(drop-frame-count property.)

       o Cache state, e.g. Cache:  2s+134KB. Visible if	the  stream  cache  is
	 enabled.   The	 first value shows the amount of video buffered	in the
	 demuxer in seconds, the second	value shows additional	data  buffered
	 in   the  stream  cache  in  kilobytes.  (demuxer-cache-duration  and
	 cache-used properties.)

       http://..., https://, ...
	  Many network protocols are supported,	but the	protocol  prefix  must
	  always be specified. mpv will	never attempt to guess whether a file-
	  name is actually a network address. A	protocol prefix	is always  re-

	  Note	that  not  all prefixes	are documented here. Undocumented pre-
	  fixes	are either aliases to documented protocols, or are just	 redi-
	  rections to protocols	implemented and	documented in FFmpeg.

	  data:	 is supported in FFmpeg	(not in	Libav),	but needs to be	in the
	  format data://. This is done to avoid	ambiguity with filenames.  You
	  can also prefix it with lavf:// or ffmpeg://.

	  By  default,	the youtube-dl hook script (enabled by default for mpv
	  CLI) only looks at http URLs.	Prefixing an URL with  ytdl://	forces
	  it  to  be  always processed by the script. This can also be used to
	  invoke special youtube-dl functionality like playing a video	by  ID
	  or invoking search.

	  Keep	in mind	that you can't pass youtube-dl command line options by
	  this,	and you	have to	use --ytdl-raw-options instead.

	  Play data from stdin.

	  Play a path from  Samba share.

       bd://[title][/device] --bluray-device=PATH
	  Play a Blu-ray disc. Currently, this does not	accept ISO files.  In-
	  stead,  you  must mount the ISO file as filesystem, and point	--blu-
	  ray-device to	the mounted directory directly.

       dvd://[title|[starttitle]-endtitle][/device] --dvd-device=PATH
	  Play a DVD. DVD menus	are not	supported. If no title is  given,  the
	  longest title	is auto-selected.

	  dvdnav://  is	 an  old  alias	 for  dvd:// and does exactly the same

	  Play a DVD using the old libdvdread code. This is what  MPlayer  and
	  older	mpv versions use for dvd://. Use is discouraged. It's provided
	  only for compatibility and for transition, and to work  around  out-
	  standing dvdnav bugs (see "DVD library choices" above).

       tv://[channel][/input_id] --tv-...
	  Analogue TV via V4L. Also useful for webcams.	(Linux only.)

       pvr:// --pvr-...
	  PVR. (Linux only.)

       dvb://[cardnumber@]channel --dvbin-...
	  Digital TV via DVB. (Linux only.)

       mf://[filemask|@listfile] --mf-...
	  Play a series	of images as video.

       cdda://[device] --cdrom-device=PATH --cdda-...
	  Play CD.

	  Access any FFmpeg/Libav libavformat protocol.	Basically, this	passed
	  the string after the // directly to libavformat.

	  This is intended for using libavdevice inputs. type is the  libavde-
	  vice	demuxer	 name,	and options is the (pseudo-)filename passed to
	  the demuxer.

	  For example, mpv av://lavfi:mandelbrot makes use of the  libavfilter
	  wrapper  included in libavdevice, and	will use the mandelbrot	source
	  filter to generate input data.

	  avdevice:// is an alias.

	  A local path as URL. Might be	useful in some special use-cases. Note
	  that PATH itself should start	with a third / to make the path	an ab-
	  solute path.

	  Read data from the given file	descriptor (for	example	123). This  is
	  similar to piping data to stdin via -, but can use an	arbitrary file

       edl://[edl specification	as in edl-mpv.rst]
	  Stitch together parts	of multiple files and play them.

	  Simulate an empty file. If opened for	writing, it will  discard  all
	  data.	  The  null demuxer will specifically pass autoprobing if this
	  protocol is used (while it's not  automatically  invoked  for	 empty

	  Use the data part as source data.

	  Like memory://, but the string is interpreted	as hexdump.

       mpv  has	 no  official  GUI, other than the OSC (ON SCREEN CONTROLLER),
       which is	not a full GUI and is not meant	to be. However,	to  compensate
       for  the	 lack  of  expected GUI	behavior, mpv will in some cases start
       with some settings changed to behave slightly more like a GUI mode.

       Currently this happens only in the following cases:

       o if started using the mpv.desktop file on  Linux  (e.g.	 started  from
	 menus or file associations provided by	desktop	environments)

       o if  started  from  explorer.exe  on  Windows  (technically, if	it was
	 started on Windows, and all of	the  stdout/stderr/stdin  handles  are

       o started out of	the bundle on OSX

       o if you	manually use --player-operation-mode=pseudo-gui	on the command

       This mode applies options from the builtin profile  builtin-pseudo-gui,
       but  only if these haven't been set in the user's config	file or	on the
       command line.  Also, for	compatibility with the old  pseudo-gui	behav-
       ior, the	options	in the pseudo-gui profile are applied unconditionally.
       In addition, the	profile	makes sure to enable the pseudo-GUI  mode,  so
       that  --profile=pseudo-gui  works  like in older	mpv releases. The pro-
       files are currently defined as follows:


	  Currently, you can extend the	pseudo-gui profile in the config  file
	  the  normal way. This	is deprecated. In future mpv releases, the be-
	  havior might change, and not apply your additional settings,	and/or
	  use a	different profile name.

   Track Selection
	      Specify  a  priority  list  of audio languages to	use. Different
	      container	formats	employ different language codes. DVDs use  ISO
	      639-1  two-letter	 language codes, Matroska, MPEG-TS and NUT use
	      ISO  639-2  three-letter	language  codes,  while	 OGM  uses   a
	      free-form	identifier. See	also --aid.


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

	      Specify a	priority list of subtitle languages to use.  Different
	      container	 formats employ	different language codes. DVDs use ISO
	      639-1 two	letter language	codes, Matroska	uses ISO  639-2	 three
	      letter language codes while OGM uses a free-form identifier. See
	      also --sid.


		 o mpv dvd://1 --slang=hu,en chooses  the  Hungarian  subtitle
		   track  on  a	 DVD and falls back on English if Hungarian is
		   not available.

		 o mpv --slang=jpn example.mkv plays a Matroska	file with  Ja-
		   panese subtitles.

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

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

	      Select video channel. auto  selects  the	default,  no  disables

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

       --ff-aid=<ID|auto|no>, --ff-sid=<ID|auto|no>, --ff-vid=<ID|auto|no>
	      Select  audio/subtitle/video streams by the FFmpeg stream	index.
	      The FFmpeg stream	index is relatively arbitrary, but useful when
	      interacting with other software using FFmpeg (consider ffprobe).

	      Note  that with external tracks (added with --sub-file and simi-
	      lar options), there will be streams with duplicate IDs. In  this
	      case, the	first stream in	order is selected.

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

   Playback Control
       --start=<relative time>
	      Seek to given time position.

	      The general format for absolute times is	[[hh:]mm:]ss[.ms].  If
	      the  time	is given with a	prefix of + or -, the seek is relative
	      from the start or	end of the file. (Since	mpv 0.14, the start of
	      the file is always considered 0.)

	      pp% seeks	to percent position pp (0-100).

	      #c seeks to chapter number c. (Chapters start from 1.)


		 --start=+56, --start=+00:56
			Seeks to the start time	+ 56 seconds.

		 --start=-56, --start=-00:56
			Seeks to the end time -	56 seconds.

			Seeks to 1 hour	10 min.

			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.

	      Stop at given absolute time. Use --length	if the time should  be
	      relative to --start. See --start for valid option	values and ex-

       --length=<relative time>
	      Stop after a given time relative to the start time.  See --start
	      for valid	option values and examples.

	      Whether  to move the file	start time to 00:00:00 (default: yes).
	      This is less awkward for files which start  at  a	 random	 time-
	      stamp,  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.

	      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
	      scaletempo audio filter.

	      Start the	player in paused state.

	      Play files in random order.

	      Specify which chapter to start playing  at.  Optionally  specify
	      which chapter to end playing at.

	      See also:	--start.

	      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	behav-
	      ior). Passing a playlist file to mpv should work with  this  op-
	      tion,  though.  E.g.  mpv	playlist.m3u --playlist-start=123 will
	      work as expected,	as long	as playlist.m3u	does not link to  fur-
	      ther playlists.

	      The value	no is a	deprecated alias for auto.

	      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.	Note that XML playlist
	      formats are not supported.)

	      You can play playlists directly and without  this	 option,  how-
	      ever, this option	disables any security mechanisms that might be
	      in place.	You may	also need this option to load plaintext	 files
	      as playlist.

		 The  way  mpv	uses playlist files via	--playlist is not safe
		 against maliciously constructed files.	Such files may trigger
		 harmful  actions.   This  has	been  the case for all mpv and
		 MPlayer versions, but unfortunately this fact	was  not  well
		 documented  earlier,  and  some  people have even misguidedly
		 recommended use of --playlist with untrusted sources. Do  NOT
		 use  --playlist  with random internet sources or files	you do
		 not trust!

		 Playlist can contain entries using other protocols,  such  as
		 local files, or (most severely), special protocols like avde-
		 vice://, which	are inherently unsafe.

	      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.

	      Distance in seconds from the beginning of	a chapter within which
	      a	backward chapter seek will go to  the  previous	 chapter  (de-
	      fault:  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.

	      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 de-
	      pending 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  de-
	      fault in the definition of key bindings and in input commands.

	      no     Never use precise seeks.

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

	      yes    Use precise seeks whenever	possible.

	      always Same as yes (for compatibility).

	      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  in-
	      stead.  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 down-
	      side of setting this option is that precise seeks	become slower,
	      as  video	between	the earlier demuxer position and the real tar-
	      get may be unnecessarily decoded.

	      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

	      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

		     use an index if the file has one, or build	it if missing

		     don't read	or use the file's index

		 This option only works	if the underlying media	supports seek-
		 ing (i.e. not with stdin, pipe, etc).

	      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.

	      Note that	--playlist always loads	all entries, so	you  use  that
	      instead if you really have the need for this functionality.

	      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 exam-
	      ple 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 ref-
	      erence  files,  opening  of archives, and	a number of other fea-

	      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  ex-
	      ample 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 (de-
	      fault), 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

       --loop Currently	 a deprecated alias to --loop-playlist.	After a	depre-
	      cation period, it	will be	undeprecated,  but  changed  to	 alias

	      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.

       --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 both options are set to no, looping is	 disabled.  Otherwise,
	      the  start/end  of the file is used if one of the	options	is set
	      to no.

	      The loop-points can be adjusted at runtime with the  correspond-
	      ing properties. See also ab-loop command.

       --ordered-chapters, --no-ordered-chapters
	      Enabled  by default.  Disable support for	Matroska ordered chap-
	      ters. mpv	will not load or search	for video segments from	 other
	      files,  and will also ignore any chapter order specified for the
	      main 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 differ-
	      ent directories.

	      Note: a playlist can be as simple	 as  a	text  file  containing
	      filenames	separated by newlines.

	      Load chapters from this file, instead of using the chapter meta-
	      data found in the	main file.

	      Skip <sec> seconds after every frame.

		 Without --hr-seek, skipping will snap to keyframes.

	      Stop playback if either audio or video fails to initialize. Cur-
	      rently,  the default behavior is no for the command line player,
	      but  yes	for  libmpv.  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.

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

	      Do not load default configuration	files. This  prevents  loading
	      of  both	the user-level and system-wide mpv.conf	and input.conf
	      files. Other configuration files are blocked as  well,  such  as
	      resume playback files.

		 Files	explicitly  requested  by  command  line options, like
		 --include or --use-filedir-conf, will still be	loaded.

	      See also:	--config-dir.

	      Prints all available options.

	      Print a list of the available properties.

	      Print a list of the supported protocols.

	      Opens the	given path for writing,	and print log messages to  it.
	      Existing	files  will  be	truncated. The log level always	corre-
	      sponds to	-v, regardless of terminal verbosity levels.

	      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 directo-
	      ries are ignored,	and overrides  through	environment  variables
	      (MPV_HOME) are also ignored.

	      Note  that the --no-config option	takes precedence over this op-

	      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	 posi-
	      tion,  and start playback	at beginning the next time the file is

	      This behavior is disabled	by default, but	 is  always  available
	      when quitting the	player with Shift+Q.

	  The directory	in which to store the "watch later" temporary files.

	  The  default	is  a  subdirectory named "watch_later"	underneath the
	  config directory (usually ~/.config/mpv/).

	      Write certain statistics to the given file. The  file  is	 trun-
	      cated on opening.	The file will contain raw samples, each	with a
	      timestamp. To  make  this	 file  into  a	readable,  the	script
	      TOOLS/  can be used (which currently	displays it as
	      a	graph).

	      This option is useful for	debugging only.

	      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.

	      once will	only idle at start and let the player close  once  the
	      first playlist has finished playing back.

	      Specify configuration file to be parsed after the	default	ones.

	      If  set to no, don't auto-load scripts from the scripts configu-
	      ration subdirectory (usually ~/.config/mpv/scripts/).  (Default:

	      Load  a  Lua script. You can load	multiple scripts by separating
	      them with	commas (,).

	      Set options for scripts. A script	can query an option by key. If
	      an  option  is  used and what semantics the option value has de-
	      pends entirely on	the loaded scripts. Values not claimed by  any
	      scripts are ignored.

	      Pretend  that  all  files	 passed	to mpv are concatenated	into a
	      single, big file.	This uses timeline/EDL support internally.

	      Do not restore playback position from the	watch_later configura-
	      tion  subdirectory  (usually  ~/.config/mpv/watch_later/).   See
	      quit-watch-later input command.

	      Use the given profile(s),	--profile=help displays	a list of  the
	      defined profiles.

	      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  op-
	      tions, and mpv will reset	the value of these options on playback
	      start to the initial value. The initial value is either the  de-
	      fault value, or as set by	the config file	or command line.

	      In  some	cases,	this  might not	work as	expected. For example,
	      --volume will only be reset if it	is explicitly set in the  con-
	      fig file or the command line.

	      The special name all resets as many options as possible.


		 o --reset-on-next-file=pause  Reset pause mode	when switching
		   to the next file.

		 o --reset-on-next-file=fullscreen,speed Reset fullscreen  and
		   playback  speed  settings if	they were changed during play-

		 o --reset-on-next-file=all Try	to  reset  all	settings  that
		   were	changed	during playback.

	      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.

		 This  option  may expose privacy-sensitive information	and is
		 thus disabled by default.

	      Ignore path (i.e.	use filename only) when	using watch later fea-

	      Show the description and content of a profile.

	      Look  for	 a file-specific configuration file in the same	direc-
	      tory as the file that is being played. See File-specific Config-
	      uration Files.

		 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, except when the
	      client API / libmpv is used.)

	      If the script can't do anything with an URL, it will do nothing.

	      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:  youtube-dl's	default,  cur-
	      rently bestvideo+bestaudio/best)

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



	      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.

	      Specify the video	output backend to be used.  See	 VIDEO	OUTPUT
	      DRIVERS for details and descriptions of available	drivers.

	      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 dif-
	      ference is that they operate on different	codec lists.

		 See --vd=help for a full list of available decoders.

	      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,	 --vf-del  and
	      --vf-clr	exist  to  modify a previously specified list, but you
	      should not need these for	typical	use.

	      Do not sleep when	outputting video frames. Useful	for benchmarks
	      when used	with --no-audio.

	      Skip  displaying	some  frames to	maintain A/V sync on slow sys-
	      tems, 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

	      <no>   Disable any framedropping.

	      <vo>   Drop late frames on video output  (default).  This	 still
		     decodes  and  filters all frames, but doesn't render them
		     on	the VO.	It tries to query the display FPS  (X11	 only,
		     not  correct  on multi-monitor systems), or assumes infi-
		     nite display FPS if that fails. Drops  are	 indicated  in
		     the  terminal  status  line as Dropped: field. If the de-
		     coder 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.

		     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  pro-
		     duce  unwatchable	choppy output, or even freeze the dis-
		     play completely. Not recommended.	 The  --vd-lavc-frame-
		     drop option controls what frames to drop.

		     Enable both modes.	Not recommended.

		 --vo=vdpau has	its own	code for the vo	framedrop mode.	Slight
		 differences to	other VOs are possible.

	      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 automati-
	      cally determined value is	wrong.

	      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.

	      <api> can	be one of the following:

	      no     always use	software decoding (default)

	      auto   enable best hw decoder (see below)

	      yes    exactly the same as auto

		     enable best hw decoder with copy-back (see	below)

	      vdpau  requires --vo=vdpau or --vo=opengl	(Linux only)

		     copies video back into system RAM (Linux with  some  GPUs

	      vaapi  requires --vo=opengl or --vo=vaapi	(Linux only)

		     copies  video back	into system RAM	(Linux with Intel GPUs

		     requires	--vo=opengl   (OS   X	10.8   and   up),   or
		     --vo=opengl-cb (iOS 9.0 and up)

		     copies  video  back into system RAM (OS X 10.8 or iOS 9.0
		     and up)

	      dxva2  requires  --vo=opengl  with   --opengl-backend=angle   or
		     --opengl-backend=dxinterop	(Windows only)

		     copies video back to system RAM (Windows only)

		     requires --vo=opengl with --opengl-backend=angle (Windows
		     8+	only)

		     copies video back to system RAM (Windows 8+ only)

		     copies video back to system RAM (Android only)

	      rpi    requires --vo=opengl (Raspberry  Pi  only	-  default  if

		     copies video back to system RAM (Raspberry	Pi only)

	      cuda   requires --vo=opengl (Any platform	CUDA is	available)

		     copies  video  back  to  system RAM (Any platform CUDA is

		     copies video back to system RAM (Any  platform  supported
		     by	hardware)

	      auto  tries  to automatically enable hardware decoding using the
	      first available method. This still depends what VO you  are  us-
	      ing.   For   example,   if  you  are  not	 using	--vo=vdpau  or
	      --vo=opengl, 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-copy	 selects  only	modes that copy	the video data back to
	      system memory after decoding. Currently, this selects  only  one
	      of  the  following  modes: vaapi-copy, dxva2-copy, d3d11va-copy,
	      mediacodec.  If none of these work, hardware  decoding  is  dis-
	      abled.  This  mode  is  always guaranteed	to incur no additional
	      loss compared to software	decoding, and will allow CPU  process-
	      ing with video filters.

	      The  vaapi  mode,	if used	with --vo=opengl, requires Mesa	11 and
	      most likely works	with Intel GPUs	only.  It  also	 requires  the
	      opengl  EGL  backend  (automatically used	if available). You can
	      also try the old GLX backend by forcing it  with	--opengl-back-
	      end=x11,	but  the  vaapi/GLX  interop is	said to	be slower than

	      The cuda and cuda-copy modes provides deinterlacing in  the  de-
	      coder  which is useful as	there is no other deinterlacing	mecha-
	      nism in the opengl output	path. 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	 dein-
	      terlacing.  cuda should always be	preferred unless the opengl vo
	      is not being used	or filters are required.

	      Most video filters will not work with hardware decoding as  they
	      are  primarily  implemented  on the CPU. Some exceptions are vd-
	      paupp, vdpaurb and vavpp.	See VIDEO FILTERS for more details.

	      The ...-copy modes (e.g. dxva2-copy) allow you to	 use  hardware
	      decoding	with any VO, backend or	filter.	Because	these copy the
	      decoded video back to system RAM,	they're	likely less  efficient
	      than the direct modes (like e.g. dxva2).

		 When  using this switch, hardware decoding is still only done
		 for some codecs. See --hwdec-codecs to	enable hardware	decod-
		 ing for more codecs.

		 Quality reduction with	hardware decoding

			Normally,  hardware  decoding  does  not  reduce video
			quality	(at least for the codecs h264 and HEVC).  How-
			ever,  due to restrictions in video output APIs, there
			can be some loss, or blatantly incorrect results.

			In some	cases, RGB conversion is forced,  which	 means
			the RGB	conversion is performed	by the hardware	decod-
			ing  API,  instead  of	the  OpenGL   code   used   by
			--vo=opengl.  This  means  certain obscure colorspaces
			may not	display	correctly, not certain filtering (such
			as debanding) cannot be	applied	in an ideal way.

			vdpau  is  usually  safe. If deinterlacing enabled (or
			the vdpaupp video filter is  active  in	 general),  it
			forces	RGB  conversion. The latter currently does not
			treat  certain	colorspaces  like  BT.2020   correctly
			(which	is mostly a mpv-specific restriction). The vd-
			pauprb video filter retrieves image data  without  RGB
			conversion  and	 is  safe  (but	precludes use of vdpau

			vaapi is safe if the vaapi-egl backend is indicated in
			the  logs.   If	 vaapi-glx is indicated, and the video
			colorspace is either BT.601 or BT.709,	a  forced  but
			correct	 RGB  conversion  is performed.	Otherwise, the
			result will be incorrect.

			d3d11va	is usually safe	(if  used  with	 ANGLE	builds
			that  support EGL_KHR_stream path - otherwise, it con-
			verts to RGB), except that 10 bit input	(HEVC main  10
			profiles) will be rounded down to 8 bits.

			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

			rpi always uses	the hardware  overlay  renderer,  even
			with --vo=opengl.

			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 dis-
			cards the top left pixel of each frame for  some  rea-

			All other methods, in particular the copy-back methods
			(like dxva2-copy etc.) are either fully	safe,  or  not
			worse than software decoding.

			In  particular,	 auto-copy will	only select safe modes
			(although potentially slower than other	methods).

	      This is useful for the opengl and	opengl-cb VOs for creating the
	      hardware	decoding  OpenGL interop context, but without actually
	      enabling hardware	decoding itself	(like --hwdec does).

	      If set to	an empty string	(default), the --hwdec option is used.

	      For opengl, if set, do not create	the interop context on demand,
	      but when the VO is created.

	      For  opengl-cb,  if set, load the	interop	context	as soon	as the
	      OpenGL context is	created.  Since	 opengl-cb  has	 no  on-demand
	      loading,	this  allows  enabling hardware	decoding at runtime at
	      all, without having to temporarily set  the  hwdec  option  just
	      during	   OpenGL	context	      initialization	  with

	      See --opengl-hwdec-interop=help for accepted values. This	 lists
	      the  interop  backend, with the --hwdec alias after it in	[...].
	      Consider all values except  the  proper  interop	backend	 name,
	      auto, and	no as silently deprecated and subject to change. Also,
	      if you use this in application code (e.g.	via libmpv), any value
	      other  than  auto	 and  no  should  be  avoided, as backends can

	      Currently	the option sets	a single value.	It  is	possible  that
	      the option type changes to a list	in the future.

	      The  old alias --hwdec-preload has different behavior if the op-
	      tion value is no.

	      Set the internal pixel format used  by  --hwdec=videotoolbox  on
	      OSX.  The	choice of the format can influence performance consid-
	      erably. On the other hand, there doesn't appear to be a good way
	      to  detect the best format for the given hardware. nv12, the de-
	      fault, works better on modern hardware, while uyvy422 appears to
	      be  better  for  old  hardware.  yuv420p	also works.  Since mpv
	      0.25.0, no is an accepted	value, which lets the decoder pick the
	      format  on  newer	 FFmpeg	 versions (will	use nv12 on older ver-

	      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.

	      Override	video  aspect ratio, in	case aspect information	is in-
	      correct  or  missing  in	the  file  being  played.   See	  also

	      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.


		 o --video-aspect=4:3  or --video-aspect=1.3333

		 o --video-aspect=16:9 or --video-aspect=1.7777

		 o --no-video-aspect or	--video-aspect=no

	      This  sets the default video aspect determination	method (if the
	      aspect is	_not_ overridden by the	user  with  --video-aspect  or

	      hybrid Prefer  the  container aspect ratio. If the bitstream as-
		     pect switches mid-stream, switch to preferring  the  bit-
		     stream  aspect.   This is the default behavior in mpv and

		     Strictly prefer the container aspect ratio. This  is  ap-
		     parently the default behavior with	VLC, at	least with Ma-

		     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.

	      Normally you should not set this.	Try  the  container  and  bit-
	      stream  choices if you encounter video that has the wrong	aspect
	      ratio in mpv, but	seems to be correct in other players.

	      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

	      Note  that  the  scaler algorithm	may still be used, even	if the
	      video isn't scaled. For example, this can	influence chroma  con-
	      version. The video will also still be scaled in one dimension if
	      the source uses non-square pixels	 (e.g.	anamorphic  widescreen

	      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  1280x720  video  fullscreen	 on  a
	      1680x1050	 screen	 with  --video-pan-x=-0.1 would	move the video
	      168 pixels to the	left (making 128 pixels	of  the	 source	 video

	      This option is disabled if the --no-keepaspect option is used.

	      Rotate  the  video  clockwise,  in  degrees.  Currently supports
	      90A<degree> steps	only.  If no is	given, the video is never  ro-
	      tated,  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.)

	      Set  the	stereo 3D output mode (default:	mono). This is done by
	      inserting	the stereo3d conversion	filter.

	      The pseudo-mode no disables automatic conversion completely.

	      The mode mono is an alias	to ml, which refers to the left	 frame
	      in  2D. This is the default, which means mpv will	try to show 3D
	      movies in	2D, instead of the mangled 3D image not	 intended  for
	      consumption  (such  as  showing the left and right frame side by
	      side, etc.).

	      Use --video-stereo-mode=help to list all available modes.	 Check
	      with  the	 stereo3d  filter  documentation to see	what the names
	      mean. Note that some names  refer	 to  modes  not	 supported  by
	      stereo3d - these modes can appear	in files, but can't be handled
	      properly by mpv.

	      Adjust the video display scale factor by the  given  value.  The
	      parameter	 is  given  log	 2. For	example, --video-zoom=0	is un-
	      scaled, --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-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 as-
	      pect  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

	      This option is disabled if the --no-keepaspect option is used.

       --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 --fps
	      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 and audio synchronization
	      can be completely	broken in this mode.

	      Override video framerate.	Useful if the original value is	 wrong
	      or missing.

		 Works in --no-correct-pts mode	only.

	      Enable  or  disable  interlacing	(default:  auto, which usually
	      means no).  Interlaced video  shows  ugly	 comb-like  artifacts,
	      which  are visible on fast movement. Enabling this typically in-
	      serts 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 (usu-
	      ally mapped to d).

	      auto is a	technicality. Strictly speaking, the default for  this
	      option is	deinterlacing disabled,	but the	auto case is needed if
	      yadif was	added to the filter chain manually with	--vf. Then the
	      core shouldn't disable deinterlacing just	because	the --deinter-
	      lace was not set.

	      Set first	field for interlaced content.

	      auto   (default) If the decoder does not export the  appropriate
		     information, it falls back	on top (top field first).

	      top    top field first

	      bottom bottom field first

		 Setting  either  top or bottom	will flag all frames as	inter-

	      Play/convert only	first <number> video frames, then quit.

	      --frames=0 loads the file, but immediately quits before initial-
	      izing  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.

	      RGB color	levels used with YUV to	RGB conversion.	Normally, out-
	      put  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 range (16-235 per component), studio levels

	      full   full range	(0-255 per component), PC levels

		 It is advisable to use	your graphics driver's color range op-
		 tion instead, if available.

	      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. Re-
	      move the prefix, e.g. instead of lavc:h264 use h264.

	      By default, this is  set	to  h264,vc1,wmv3,hevc,mpeg2video,vp9.
	      Note that	the hardware acceleration special codecs like h264_vd-
	      pau 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


		 mpv --hwdec=vdpau --vo=vdpau --hwdec-codecs=h264,mpeg2video
			Enable vdpau decoding for h264 and mpeg2 only.

	      Check hardware decoder profile (default: yes). If	no is set, the
	      highest profile of the hardware decoder is  unconditionally  se-
	      lected,  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 some-
	      how incorrect.

	      Fallback to software decoding if	the  hardware-accelerated  de-
	      coder  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.

	      Only  use	 bit-exact algorithms in all decoding steps (for codec

       --vd-lavc-fast (MPEG-2, MPEG-4, and H.264 only)
	      Enable optimizations which do not	comply with the	format	speci-
	      fication	and potentially	cause problems,	like simpler dequanti-
	      zation, simpler motion compensation, assuming use	of the default
	      quantization  matrix,  assuming  YUV  4:2:0  and	skipping a few
	      checks to	detect damaged bitstreams.

	      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.



	      Show even	broken/corrupt frames (default:	no). If	this option is
	      set to no, libavcodec won't output frames	that were  either  de-
	      coded before an initial keyframe was decoded, or frames that are
	      recognized as corrupted.

       --vd-lavc-skiploopfilter=<skipvalue> (H.264 only)
	      Skips the	loop filter (AKA deblocking)  during  H.264  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 visi-
	      ble quality loss.

	      <skipvalue> can be one of	the following:

	      none   Never skip.

		     Skip  useless  processing	steps  (e.g. 0 size packets in

	      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	only)
	      Skips  the  IDCT step. This degrades quality a lot in almost all
	      cases (see skiploopfilter	for available skip values).

	      Skips decoding of	frames completely. Big speedup,	but jerky  mo-
	      tion  and	sometimes bad artifacts	(see skiploopfilter for	avail-
	      able skip	values).

	      Set framedropping	mode used with --framedrop (see	skiploopfilter
	      for available skip values).

	      Number  of threads to use	for decoding. Whether threading	is ac-
	      tually supported depends on codec	(default: 0). 0	means  autode-
	      tect number of cores on the machine and use that,	up to the max-
	      imum of 16. You can set more than	16 threads manually.

	      If this is enabled (default), playing  with  a  speed  different
	      from  normal  automatically inserts the scaletempo audio filter.
	      For details, see audio filter section.

	      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 de-
	      fault device.

	      You can list audio devices with --audio-device=help.  This  out-
	      puts  the	 device	name in	quotes,	followed by a description. The
	      device name is what you have to pass to the  --audio-device  op-
	      tion. 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.

		 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:

	      Enable exclusive output mode. In this mode, the system  is  usu-
	      ally locked out, and only	mpv will be able to output audio.

	      This only	works for some audio outputs, such as wasapi and core-
	      audio. Other audio outputs silently ignore  this	options.  They
	      either have no concept of	exclusive mode,	or the mpv side	of the
	      implementation is	missing.

	      If no audio device can be	opened,	behave	as  if	--ao=null  was
	      given.  This  is	useful in combination with --audio-device: in-
	      stead of causing an error	if the selected	device does not	exist,
	      the  client  API	user (or a Lua script) could let playback con-
	      tinue normally, and check	the current-ao	and  audio-device-list
	      properties to make high-level decisions about how	to continue.

	      Specify  the  audio  output drivers to be	used. See AUDIO	OUTPUT
	      DRIVERS for details and descriptions of available	drivers.

	      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,	 --af-del  and
	      --af-clr	exist  to  modify a previously specified list, but you
	      should not need these for	typical	use.

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


			There  is  not	much reason to use this. HDMI supports
			uncompressed multichannel PCM, and mpv supports	 loss-
			less  DTS-HD  decoding	via  FFmpeg's  new DCA decoder
			(based on libdcadec).

	      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


			Prefer	the  FFmpeg/Libav  mp3float  decoder  over all
			other MP3 decoders.

			List all available decoders.


			Enabling compressed audio passthrough (AC3 and DTS via
			SPDIF/HDMI)  with  this	 option	 is  not possible. Use
			--audio-spdif instead.

	      Set the startup volume. 0	means silence, 100 means no volume re-
	      duction or amplification.	Negative values	can be passed for com-
	      patibility, but are treated as 0.

	      Since mpv	0.18.1,	this always controls the internal  mixer  (aka

	      How  much	 left/right channels contribute	to the audio. (The im-
	      plementation of this feature is rather odd.  It  doesn't	change
	      the volumes of each channel, but instead sets up a pan matrix to
	      mix the left and right channels.)


	      Audio delay in seconds (positive or negative float value). Posi-
	      tive  values  delay  the	audio,	and  negative values delay the

	      Set startup audio	mute status (default: no).

	      auto is a	deprecated possible value that is equivalent to	no.

	      See also:	--volume.

	      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	avail-
	      able anymore, although auto almost matches current  behavior  in
	      most cases.

	      The no behavior is still partially available through the ao-vol-
	      ume and ao-mute properties. But there are	no  options  to	 reset

	      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.

	      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  au-
	      dio quality.

	      Whether  to  request  audio  channel downmixing from the decoder
	      (default:	yes).  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.

	      Number  of threads to use	for decoding. Whether threading	is ac-
	      tually supported depends on codec. As of this writing, it's sup-
	      ported  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).

	      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.

       --ad-spdif-dtshd=<yes|no>, --dtshd, --no-dtshd
	      If DTS is	passed through,	use DTS-HD.


			This and enabling passthrough via --ad are  deprecated
			in favor of using --audio-spdif=dts-hd.

	      Control  which  audio  channels  are  output  (e.g. surround vs.
	      stereo). There are the following possibilities:


		       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.


		       Send the	audio device whatever it  accepts,  preferring
		       the  audio's  original channel layout. Can cause	issues
		       with HDMI (see the warning below).


		       List of ,-separated channel layouts which should	be al-
		       lowed.  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 out-
		       put, especially over HDMI (see HDMI warning below).


		       Force   a  plain	stereo downmix.	This is	a special-case
		       of the previous item. (See paragraphs below for	impli-

	      If  a  list  of layouts is given,	each item can be either	an ex-
	      plicit 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 ar-
	      bitrary 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 de-
	      coder-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 --au-
	      dio-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 hap-
	      pens 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.


			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	 chan-
			nel 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

	      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 silent. It
	      depends on the source audio.

	      Technically, this	changes	the normalize suboption	of the lavrre-
	      sample audio filter, which performs the downmixing.

	      If  downmix  happens outside of mpv for some reason, this	has no

	      Setting this option to attachment	(default) will	display	 image
	      attachments  (e.g. album cover art) when playing audio files. It
	      will display the first image found, and  additional  images  are
	      available	as video tracks.

	      Setting  this  option  to	 no disables display of	video entirely
	      when playing audio files.

	      This option has no influence on files with normal	video tracks.

	      Play audio from an external file while viewing a video. Each use
	      of this option will add a	new audio track. The details are simi-
	      lar to how --sub-file works.

	      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.

	      Select the output	sample rate to be used (of course sound	 cards
	      have  limits  on this). If the sample frequency selected is dif-
	      ferent from that of the current media,  the  lavrresample	 audio
	      filter  will  be inserted	into the audio filter layer to compen-
	      sate for the difference.

	      Try to play consecutive audio files with no silence  or  disrup-
	      tion 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 re-
		     duced sound quality. If you play files with different pa-
		     rameters, consider	using options such as --audio-sampler-
		     ate 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 set-
		     tings, but	might not be gapless in	other cases.   (Unlike
		     with yes, you don't have to worry about corner cases like
		     the first file setting a very low quality output  format,
		     and  ruining  the	playback  of higher quality files that

		 This feature is implemented in	a simple manner	and relies  on
		 audio output device buffering to continue playback while mov-
		 ing 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	 time-
	      stamps  differ,  and  then video timing is gradually adjusted if
	      necessary	to reach correct synchronization later.

       --volume-max=<100.0-1000.0>, --softvol-max=<...>
	      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.

	      --softvol-max is a deprecated alias and should not be used.

       --audio-file-auto=<no|exact|fuzzy|all>, --no-audio-file-auto
	      Load additional audio files matching the video filename. The pa-
	      rameter specifies	how external audio files are matched. exact is
	      enabled by default.

	      no     Don't automatically load external audio files.

	      exact  Load the media filename with audio	 file  extension  (de-

	      fuzzy  Load all audio files containing media filename.

	      all    Load   all	  audio	  files	  in  the  current  and	 --au-
		     dio-file-paths directories.

	      Equivalent to --sub-paths	 option,  but  for  auto-loaded	 audio

	      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

	      Set the audio output minimum buffer. The audio device might  ac-
	      tually  create a larger buffer if	it pleases. If the device cre-
	      ates a smaller buffer, additional	audio is buffered in an	 addi-
	      tional 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 con-

	      Default: 0.2 (200	ms).

	      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.

	      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 --au-
	      dio-stream-silence=yes is	not set, this option will likely  just
	      waste time.

	  Changing  styling and	position does not work with all	subtitles. Im-
	  age-based subtitles (DVD, Bluray/PGS,	DVB) cannot changed for	funda-
	  mental  reasons.   Subtitles	in ASS format are normally not changed
	  intentionally,  but  overriding  them	  can	be   controlled	  with

	  Previously  some  options  working  on  text	subtitles  were	called
	  --sub-text-*,	they are now named --sub-*, and	those specifically for
	  ASS have been	renamed	from --ass-* to	--sub-ass-*.  They are now all
	  in this section.

	      Force subtitle demuxer type for  --sub-file.  Give  the  demuxer
	      name as printed by --sub-demuxer=help.

	      Delays subtitles by <sec>	seconds. Can be	negative.

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

	      Select a secondary subtitle stream. This is similar to --sid. If
	      a	secondary subtitle is selected,	it will	be rendered as	topti-
	      tle  (i.e. on the	top of the screen) alongside the normal	subti-
	      tle, and provides	a way to render	two subtitles at once.

	      There are	some caveats associated	with this feature.  For	 exam-
	      ple, bitmap subtitles will always	be rendered in their usual po-
	      sition, 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.

		 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.

		 If the	main subtitle stream contains  formatting  tags	 which
		 display  the subtitle at the top of the screen, it will over-
		 lap with the secondary	subtitle. To prevent this,  you	 could
		 use  --no-sub-ass  to	disable	 styling  in the main subtitle

	      Factor for the text subtitle font	size (default: 1).

		 This affects ASS subtitles as well, and may lead to incorrect
		 subtitle rendering. Use with care, or use --sub-font-size in-

	      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.

	      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. be-
	      cause  screen  aspect and	window aspect mismatch (and the	player
	      adds black bars).

	      Default: yes.

	      This option is misnamed. The difference to the confusingly simi-
	      lar    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-style-override is set high enough).

	      Like --sub-scale-with-window, but	affects	subtitles in ASS  for-
	      mat only.	 Like --sub-scale, this	can break ASS subtitles.

	      Default: no.

       --embeddedfonts,	--no-embeddedfonts
	      Use  fonts  embedded in Matroska container files and ASS scripts
	      (default:	enabled). These	fonts can be used for SSA/ASS subtitle

	      Specify  the  position  of subtitles on the screen. The value is
	      the vertical position of the subtitle in % of the	screen height.

		 This affects ASS subtitles as well, and may lead to incorrect
		 subtitle  rendering. Use with care, or	use --sub-margin-y in-

	      Multiply the subtitle event timestamps with the given value. Can
	      be  used to fix the playback speed for frame-based subtitle for-
	      mats. Affects text subtitles only.


			--sub-speed=25/23.976`	plays  frame  based  subtitles
			which  have been loaded	assuming a framerate of	23.976
			at 25 FPS.

	      Override some style or script info parameters.


		 o --sub-ass-force-style=FontName=Arial,Default.Bold=1

		 o --sub-ass-force-style=PlayResY=768

		 Using this option may lead to incorrect subtitle rendering.

	      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


			Enabling hinting can lead to  mispositioned  text  (in
			situations  it's  supposed  to	match  up  video back-
			ground), or reduce the smoothness of  animations  with
			some  badly authored ASS scripts. It is	recommended to
			not use	this option, unless really needed.

	      Set line spacing value for SSA/ASS renderer.

	      Set the text layout engine used by libass.

	      simple uses Fribidi only,	fast, doesn't  render  some  languages

		     uses HarfBuzz, slower, wider language support

	      complex  is  the default.	If libass hasn't been compiled against
	      HarfBuzz,	libass silently	reverts	to simple.

	      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.

		 Using this option may lead to incorrect subtitle rendering.

	      Control whether user style overrides should be applied.

	      yes    Apply all the --sub-ass-* style override options.	Chang-
		     ing  the default for any of these options can lead	to in-
		     correct subtitle rendering	(default).

	      signfs like yes, but apply --sub-scale only to signs

	      no     Render subtitles as forced	by subtitle scripts.

	      force  Try to force the font style as defined by the --sub-* op-
		     tions. Can	break rendering	easily.

	      strip  Radically	strip  all ASS tags and	styles from the	subti-
		     tle.  This	 is  equivalent	 to   the   old	  --no-ass   /
		     --no-sub-ass options.

	      Enables  placing	toptitles  and subtitles in black borders when
	      they are available, if the subtitles are in the ASS format.

	      Default: no.

	      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-style-override is set high enough).

	      Default: yes.

	      Renamed from --sub-ass-use-margins. To place  ASS	 subtitles  in
	      the   borders   too   (like   the	 old  option  did),  also  add

	      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 re-
	      sulted 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	direc-
	      tion.   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 ex-
	      isting scripts).

	      Enabled by default.

	      Scale \blur tags by video	resolution instead of  script  resolu-
	      tion  (enabled  by  default). This is bug	in VSFilter, which ac-
	      cording to some, can't be	fixed anymore in the name of  compati-

	      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.

	      Mangle  colors  like (xy-)vsfilter do (default: basic). Histori-
	      cally, 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	subti-
	      tle 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

		     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 de-
	      pend 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-style-override option doesn't affect how this  op-
	      tion is interpreted.

	      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 in-
	      put 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 transla-

	      Disabled by default.

	      Stretch DVD and other image subtitles to	the  screen,  ignoring
	      the  video  margins. This	has a similar effect as	--sub-use-mar-
	      gins 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.

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

		 This  has  been deprecated by --sub-ass-style-override=strip.
		 You also may need --embeddedfonts=no to get the  same	behav-
		 ior.  Also,  using --sub-ass-style-override=force 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.

		 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. ex-
	      act is enabled by	default.

	      no     Don't automatically load external subtitle	files.

	      exact  Load the media filename with subtitle file	extension (de-

	      fuzzy  Load all subs containing media filename.

	      all    Load all subs in the current and --sub-paths directories.

	      You can use  this	 option	 to  specify  the  subtitle  codepage.
	      uchardet will be used to guess the charset. (If mpv was not com-
	      piled with uchardet, then	utf-8 is the effective default.)

	      The default value	for this option	is auto, which enables autode-

	      The  following  steps are	taken to determine the final codepage,
	      in order:

	      o	if the specific	codepage has a +, use that codepage

	      o	if the data looks like UTF-8, assume it	is UTF-8

	      o	if --sub-codepage is set to a specific codepage, use that

	      o	run uchardet, and if successful, use that

	      o	otherwise, use UTF-8-BROKEN


		 o --sub-codepage=latin2 Use Latin 2 if	input is not UTF-8.

		 o --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 fall-
	      back for bytes which are not valid  UTF-8	 sequences.  iconv  is
	      never involved in	this mode.

	      This  option  changed  in	mpv 0.23.0. Support for	the old	syntax
	      was fully	removed	in mpv 0.24.0.

       --sub-fix-timing, --no-sub-fix-timing
	      By default, subtitle timing is adjusted to remove	minor gaps  or
	      overlaps	between	 subtitles  (if	the difference is smaller than
	      210 ms, the gap or overlap is removed).

	      Display only forced subtitles for	the DVD	 subtitle  stream  se-
	      lected by	e.g.  --slang.

	      Specify the framerate of the subtitle file (default: video fps).
	      Affects text subtitles only.

		 <rate>	> video	fps speeds the subtitles  up  for  frame-based
		 subtitle files	and slows them down for	time-based ones.

	      See also:	--sub-speed.

	      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

		 Never applied to text subtitles.

	      Convert image subtitles to grayscale. Can	help  to  make	yellow
	      DVD/Vobsubs look nicer.

		 Never applied to text subtitles.

	      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.


			Assuming that /path/to/video/video.avi is  played  and
			--sub-paths=sub:subtitles:/tmp/subs  is	specified, mpv
			searches for subtitle files in these directories:

		 o /path/to/video/

		 o /path/to/video/sub/

		 o /path/to/video/subtitles/

		 o /tmp/subs/

		 o the	sub  configuration   subdirectory   (usually   ~/.con-

       --sub-visibility, --no-sub-visibility
	      Can  be  used  to	disable	display	of subtitles, but still	select
	      and decode them.

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

	      This works for dvb_teletext subtitle streams, and	if FFmpeg  has
	      been compiled with support for it.

	      Specify font to use for subtitles	that do	not themselves specify
	      a	particular font. The default is	sans-serif.


		 o --sub-font='Bitstream Vera Sans'

		 o --sub-font='MS Comic	Sans'

		 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.

	      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

	      Default: 55.

	      See --sub-color. Color used for sub text background.

	      Gaussian blur factor. 0 means no blur applied (default).

	      Format text on bold.

	      Format text on italic.

	      See --sub-color. Color used for the sub font border.

		 ignored  when --sub-back-color	is specified (or more exactly:
		 when that option is not set to	completely transparent).

	      Size  of	the  sub   font	  border   in	scaled	 pixels	  (see
	      --sub-font-size for details). A value of 0 disables borders.

	      Default: 3.

	      Specify the color	used for unstyled text subtitles.

	      The  color is specified in the form r/g/b, where each color com-
	      ponent 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.


		 o --sub-color=1.0/0.0/0.0 set sub to opaque red

		 o --sub-color=1.0/0.0/0.0/0.75	set sub	to opaque red with 75%

		 o --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	 #AAR-


		 o --sub-color='#FF0000' set sub to opaque red

		 o --sub-color='#C0808080' set sub to 50% gray with 75%	alpha

	      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.

	      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 sub-
	      titles.  If you just want	to raise the vertical  subtitle	 posi-
	      tion, use	--sub-pos.

	      Default: 22.

	      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.

	      Vertical position	(default: bottom).  Details see	--sub-align-x.

	      Control  how multi line subs are justified irrespective of where
	      they are aligned (default: auto which justifies  as  defined  by
	      --sub-align-y).	Left  justification is recommended to make the
	      subs easier to read as it	is easier for the eyes.

	      Applies justification as defined by --sub-justify	on ASS	subti-
	      tles if --sub-ass-style-override is not set to no.  Default: no.

	      See --sub-color. Color used for sub text shadow.

	      Displacement  of	the  sub  text	shadow	in  scaled pixels (see
	      --sub-font-size for details). A value of 0 disables shadows.

	      Default: 0.

	      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.

	      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.

	      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.

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

		 There is a danger of this causing significant CPU usage,  de-
		 pending  on the properties used. Changing the window title is
		 often a slow operation, and if	the title changes every	frame,
		 playback can be ruined.

	      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.

		 Note (X11)

			This  option  does  not	 work properly with all	window
			managers. In these cases, you can try to use  --geome-
			try  to	position the window explicitly.	It's also pos-
			sible that the window manager provides native features
			to  control  which  screens application	windows	should

	      See also --fs-screen.

       --fullscreen, --fs
	      Fullscreen playback.

	      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 default  is  provided  mpv  will
	      fallback	on  using the behavior depending on what the user pro-
	      vided with the screen option.

		 Note (X11)

			This option does works properly	only with window  man-
			agers	    which	understand	 the	  EWMH

		 Note (OS X)

			all does not work on OS	X and will  behave  like  cur-

	      See also --screen.

	      Do  not  terminate when playing or seeking beyond	the end	of the
	      file, and	there is not 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

	      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	termi-
		     nate.  (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 automati-
		     cally advance to the next file.

		 This option is	not respected when using --frames.  Explicitly
		 skipping to the next file if the binding uses force will ter-
		 minate	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.)

	      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.

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

	      Create a video output window even	if there is no video. This can
	      be useful	when pretending	that mpv is a  GUI  application.  Cur-
	      rently,  the  window always has the size 640x480,	and is subject
	      to --geometry, --autofit,	and similar options.

		 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.

	      (Windows only) Snap the player window to screen edges.

	      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.

	      (OS X 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.

	      level  A level as	integer.

       --border, --no-border
	      Play video with window border and	decorations. Since this	is  on
	      by default, use --no-border to disable the standard window deco-

       --fit-border, --no-fit-border
	      (Windows only) Fit the whole window with border and  decorations
	      on  the screen. Since this is on by default, use --no-fit-border
	      to make mpv try to only  fit  client  area  with	video  on  the
	      screen. This behavior only applied to window/video with size ex-
	      ceeding size of the screen.

	      (X11 only) Show the video	window on all virtual desktops.

       --geometry=<[W[xH]][+-x+-y]>, --geometry=<x:y>
	      Adjust the initial window	position or size. W and	H set the win-
	      dow 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".

	      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.

		 Generally only	supported by GUI VOs. Ignored for encoding.

		 Note (X11)

			This  option  does  not	 work properly with all	window


		 50:40	Places the window at x=50, y=40.

			Places the window in the middle	of the screen.

			Places the window at the bottom	right  corner  of  the

		 50%	Sets the window	width to half the screen width.	Window
			height is set so that the window has the video	aspect

			Forces	the window width and height to half the	screen
			width and height. Will show black borders  to  compen-
			sate  for  the	video  aspect ratio (with most VOs and
			without	--no-keepaspect).

			Sets the window	to half	the screen widths,  and	 posi-
			tions  it  10 pixels below/left	of the top left	corner
			of the screen.

	      See also --autofit and --autofit-larger for fitting  the	window
	      into a given size	without	changing aspect	ratio.

	      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 dif-
	      ferently 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-moni-
	      tor setups.

	      Use --autofit-larger instead if you just want to limit the maxi-
	      mum  size	 of  the  window,  rather than always forcing a	window

	      Use --geometry if	you want to force both window width and	height
	      to a specific size.

		 Generally only	supported by GUI VOs. Ignored for encoding.


		 70%	Make  the window width 70% of the screen size, keeping
			aspect ratio.

		 1000	Set the	window width to	1000  pixels,  keeping	aspect

			Make  the  window  as large as possible, without being
			wider than 70% of the screen width, or higher than 60%
			of the screen height.

	      This  option  behaves  exactly like --autofit, except the	window
	      size is only changed if the window  would	 be  larger  than  the
	      specified	size.


			If the video is	larger than 90%	of the screen width or
			80% of the screen height, make the window smaller  un-
			til  either  its  width	 is  90% of the	screen,	or its
			height is 80% of the screen.

	      This option behaves exactly like --autofit, except that it  sets
	      the  minimum  size  of the window	(just as --autofit-larger sets
	      the maximum).


			Make the window	at least 500 pixels wide and 500  pix-
			els  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).

	      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.

	      Make mouse cursor	automatically hide after given number of  mil-
	      liseconds.   no  will  disable cursor autohide. always means the
	      cursor will stay hidden.

	      If this option is	given, the cursor is always  visible  in  win-
	      dowed  mode.  In	fullscreen mode, the cursor is shown or	hidden
	      according	to --cursor-autohide.

       --no-fixed-vo, --fixed-vo
	      --no-fixed-vo enforces closing and reopening  the	 video	window
	      for multiple files (one (un)initialization for each file).

	      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 ren-
	      dering (like vdpau, opengl,  direct3d),  this  can  be  slightly
	      faster  or  slower,  depending  on GPU drivers and hardware. For
	      other VOs, this just makes rendering slower.

	      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  af-
	      fects X11	VOs.


	      This  option  is	redundant  with	 Lua  scripting.  Further,  it
	      shouldn't	be needed for disabling	screensaver anyway, since  mpv
	      will  call  xdg-screensaver  when	using X11 backend. As a	conse-
	      quence this option has been deprecated with no  direct  replace-

	  Command  that	 is executed every 30 seconds during playback via sys-
	  tem()	- i.e. using the shell.	The time between the commands  can  be
	  customized  with the --heartbeat-interval option. The	command	is not
	  run while playback is	paused.

	      mpv uses this command without any	checking. It is	your responsi-
	      bility  to ensure	it does	not cause security problems (e.g. make
	      sure to use full paths if	"." is in your path like on  Windows).
	      It  also only works when playing video (i.e. not with --no-video
	      but works	with --vo=null).

	  This can be "misused"	to disable screensavers	that  do  not  support
	  the proper X API (see	also --stop-screensaver). If you think this is
	  too complicated, ask the author of the screensaver program  to  sup-
	  port	the  proper  X APIs. Note that the --stop-screensaver does not
	  influence the	heartbeat code at all.

	      Example for xscreensaver

		     mpv  --heartbeat-cmd="xscreensaver-command	  -deactivate"

	      Example for GNOME	screensaver

		     mpv  --heartbeat-cmd="gnome-screensaver-command --deacti-
		     vate" file

	      Time between --heartbeat-cmd invocations	in  seconds  (default:

		 This  does not	affect the normal screensaver operation	in any

       --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  as-
	      pect  mismatch.  Whether	this  actually works depends on	the VO
	      backend.	(Ignored in fullscreen mode.)

	      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.


		 o --monitoraspect=4:3	or --monitoraspect=1.3333

		 o --monitoraspect=16:9	or --monitoraspect=1.7777

       --hidpi-window-scale, --no-hidpi-window-scale
	      (OS X and	X11 only) Scale	the window size	according to the back-
	      ing  scale  factor (default: yes).  On regular HiDPI resolutions
	      the window opens with double the size but	appears	as having  the
	      same size	as on none-HiDPI resolutions. This is the default OS X

	      Set the aspect of	a single pixel of your monitor	or  TV	screen
	      (default:	1). A value of 1 means square pixels (correct for (al-
	      most?) all LCDs).	See also --monitoraspect and --video-aspect.

       --stop-screensaver, --no-stop-screensaver
	      Turns off	the screensaver	(or screen blanker and similar	mecha-
	      nisms)  at startup and turns it on again on exit (default: yes).
	      The screensaver is always	re-enabled when	the player is paused.

	      This is not supported on all video outputs or  platforms.	 Some-
	      times it is implemented, but does	not work (known	to happen with
	      GNOME). You might	be able	to work	 around	 this  using  --heart-
	      beat-cmd instead.

	      This  tells  mpv to attach to an existing	window.	If a VO	is se-
	      lected that supports this	option,	it will	use  that  window  for
	      video  output. mpv will scale the	video to the size of this win-
	      dow, 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  spe-
	      cially, and mpv will draw	directly on the	root window.

	      On  win32,  the ID is interpreted	as HWND. Pass it as value cast
	      to intptr_t. mpv will create its own window,  and	 set  the  wid
	      window as	parent,	like with X11.

	      On OSX/Cocoa, the	ID is interpreted as NSView*. Pass it as value
	      cast to intptr_t.	mpv will create	its own	sub-view. Because  OSX
	      does  not	 support  window  embedding of foreign processes, this
	      works only with libmpv, and will crash when used from  the  com-
	      mand line.

	      Don't  move  the window when clicking on it and moving the mouse

	      Set the window class name	for X11-based video output methods.

	      (X11 only) Control the use of NetWM protocol features.

	      This may or may not help with broken window managers. This  pro-
	      vides 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. Ap-
	      parently,	 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	proto-
	      cols (as if X isn't bad enough already).

	      By default, NetWM	support	is autodetected	(auto).

	      This option might	be removed in the future.

	      If set to	yes, then ask the compositor  to  unredirect  the  mpv
	      window (default: fs-only). This uses the _NET_WM_BYPASS_COMPOSI-
	      TOR 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

	      never asks the window manager to never disable the compositor.

   Disc	Devices
	      Specify the CD-ROM device	(default: /dev/cdrom).

	      Specify the DVD device or	.iso filename (default:	/dev/dvd). You
	      can also specify a  directory  that  contains  files  previously
	      copied directly from a DVD (with e.g. vobcopy).


			mpv dvd:// --dvd-device=/path/to/dvd/

	      (Blu-ray	only) Specify the Blu-ray disc location. Must be a di-
	      rectory with Blu-ray structure.


			mpv bd:// --bluray-device=/path/to/bd/

	      These options can	be used	to tune	the CD Audio  reading  feature
	      of mpv.

	      Set CD spin speed.

	      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

	      Set atomic read size.

	      Force minimum overlap search during verification to <value> sec-

	      Assume  that  the	beginning offset of track 1 as reported	in the
	      TOC will be addressed as LBA 0. Some discs need this for getting
	      track boundaries correctly.

	      Add  <value>  sectors  to	 the  values  reported when addressing
	      tracks.  May be negative.

	      (Never) accept imperfect data reconstruction.

	      Print CD text. This is disabled by  default,  because  it	 ruins
	      performance with CD-ROM drives for unknown reasons.

	      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.

		 You need write	access to the DVD device to change the speed.

	      Some  DVDs  contain  scenes that can be viewed from multiple an-
	      gles.  This option tells mpv which angle to use (default:	1).

	      Adjust the brightness of the video signal	(default: 0). Not sup-
	      ported by	all video output drivers.

	      Adjust  the  contrast of the video signal	(default: 0). Not sup-
	      ported by	all video output drivers.

	      Adjust the saturation of the video signal	(default: 0). You  can
	      get  grayscale  output  with  this  option. Not supported	by all
	      video output drivers.

	      Adjust the gamma of the video signal (default: 0). Not supported
	      by all video output drivers.

	      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.

	      Force  demuxer type. Use a '+' before the	name to	force it; this
	      will skip	some checks. Give the demuxer name as printed by --de-

	      Maximum length in	seconds	to analyze the stream properties.

	      Whether  to  probe  stream  information (default:	auto). Techni-
	      cally,	this	controls    whether    libavformat's	avfor-
	      mat_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

	      Minimum required libavformat probe score.	Lower values will  re-
	      quire  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 consid-
	      ers the detection	not reliable enough. (Default: 26.)

	      Allow deriving the format	from  the  HTTP	 MIME  type  (default:
	      yes).  Set  this to no in	case playing things from HTTP mysteri-
	      ously fails, even	though the same	files work from	local disk.

	      This is default in order to reduce  latency  when	 opening  HTTP

	      Force a specific libavformat demuxer.

	      By  default, some	formats	will be	handled	differently from other
	      formats by explicitly checking for them. Most of	these  compen-
	      sate  for	weird or imperfect behavior from libavformat demuxers.
	      Passing no disables these. For debugging and testing only.

	      Mode for deriving	missing	packet PTS  values  from  packet  DTS.
	      lavf  enables  libavformat's genpts option. no disables it. This
	      used to be enabled by default, but then it  was  deemed  as  not
	      needed  anymore.	 Enabling this might help with timestamp prob-
	      lems, or make them worse.

	      Pass AVOptions to	libavformat demuxer.

	      Note, a patch to make the	o= unneeded and	pass all  unknown  op-
	      tions  through  the  AVOption  system is welcome.	A full list of
	      AVOptions	can be found in	the FFmpeg manual. Note	that some  op-
	      tions may	conflict with mpv options.



	      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.

	      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.

	      Encryption key the demuxer should	use. This is  the  raw	binary
	      data of the key converted	to a hexadecimal string.

       --demuxer-mkv-subtitle-preroll=<yes|index|no>, --mkv-subtitle-preroll
	      Try  harder  to  show embedded soft subtitles when seeking some-
	      where. 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

	      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 or-
	      der 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	 addi-
	      tionally controlled by --demuxer-mkv-subtitle-preroll-secs-index
	      (it still	uses the value of the option without -index if that is

	      See   also  --hr-seek-demuxer-offset  option.  This  option  can
	      achieve a	similar	effect,	but only  if  hr-seek  is  active.  It
	      works with any demuxer, but makes	seeking	much slower, as	it has
	      to decode	audio and video	data instead of	just skipping over it.

	      --mkv-subtitle-preroll is	a deprecated alias.

	      See --demuxer-mkv-subtitle-preroll.

	      See --demuxer-mkv-subtitle-preroll.

	      When opening the file, seek to the end of	 it,  and  check  what
	      timestamp	the last video packet has, and report that as file du-
	      ration. 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  tra-
	      verses  the  entire  file	 and can make a	reliable estimate even
	      without an index present (such as	partial	files).

	      Number of	channels (or channel layout) if	--demuxer=rawaudio  is
	      used (default: stereo).

	      Sample  format  for  --demuxer=rawaudio  (default:  s16le).  Use
	      --demuxer-rawaudio-format=help to	get a list of all formats.

	      Sample rate for --demuxer=rawaudio (default: 44 kHz).

	      Rate in  frames  per  second  for	 --demuxer=rawvideo  (default:

       --demuxer-rawvideo-w=<value>, --demuxer-rawvideo-h=<value>
	      Image dimension in pixels	for --demuxer=rawvideo.


			Play a raw YUV sample:

		     mpv sample-720x576.yuv --demuxer=rawvideo \
		     --demuxer-rawvideo-w=720 --demuxer-rawvideo-h=576

	      Color  space  (fourcc)  in  hex or string	for --demuxer=rawvideo
	      (default:	YV12).

	      Color space by internal video format for --demuxer=rawvideo. Use
	      --demuxer-rawvideo-mp-format=help	 for  a	 list of possible for-

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

	      Frame size in bytes when using --demuxer=rawvideo.

	      This controls how	much the demuxer is allowed to	buffer	ahead.
	      The  demuxer  will  normally try to read ahead as	much as	neces-
	      sary, or as much is requested with --demuxer-readahead-secs. The
	      option  can be used to restrict the maximum readahead. This lim-
	      its 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 warn-
	      ing, and you think normal	playback  would	 be  possible  with  a
	      larger packet queue.

	      See --list-options for defaults and value	range.

	      Quite  similar  --demuxer-max-bytes=<bytes>. Deprecated, because
	      the other	option does basically the same job. Since mpv  0.25.0,
	      the  code	tries to account for per-packet	overhead, which	is why
	      this option becomes rather pointless.

	      Run the demuxer in a separate thread, and	let it prefetch	a cer-
	      tain  amount  of packets (default: yes). Having this enabled may
	      lead to smoother playback, but on	the other hand can add	delays
	      to seeking or track switching.

	      If  --demuxer-thread  is enabled,	this controls how much the de-
	      muxer 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 the --cache-secs option will override this value if a
	      cache is enabled,	and the	value is larger.

	      (This value tends	to be fuzzy, because many file	formats	 don't
	      store linear timestamps.)

	      Prefetch next playlist entry while playback of the current entry
	      is ending	(default: no). This merely opens the URL of  the  next
	      playlist entry as	soon as	the current URL	is fully read.

	      This does	not work with URLs resolved by the youtube-dl wrapper,
	      and it won't.

	      This does	not affect HLS (.m3u8 URLs) - HLS prefetching  depends
	      on the demuxer cache settings and	is on by default.

	      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 ex-
	      ample,  it  can't	 predict  whether  you	go  backwards  in  the
	      playlist,	and assumes you	won't edit the playlist.

	      Highly experimental.

	      If  the player thinks that the media is not seekable (e.g. play-
	      ing 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.

	      Use  system  settings  for  keyrepeat delay and rate, instead of
	      --input-ar-delay and --input-ar-rate. (Whether this applies  de-
	      pends  on	the VO backend and how it handles keyboard input. Does
	      not apply	to terminal input.)

	      Delay in milliseconds before we start to autorepeat a key	(0  to

	      Number of	key presses to generate	per second on autorepeat.

	      Specify input configuration file other than the default location
	      in the mpv configuration	directory  (usually  ~/.config/mpv/in-

	      Disable mpv default (built-in) key bindings.

	      Prints all commands that can be bound to keys.

	      Time in milliseconds to recognize	two consecutive	button presses
	      as a double-click	(default: 300).

	      Prints all keys that can be bound	to commands.

	      Specify the size of the FIFO that	buffers	key  events  (default:
	      7). If it	is too small, some events may be lost. The main	disad-
	      vantage 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

	      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.

	      Read  commands  from  the	given file. Mostly useful with a FIFO.
	      Since mpv	0.7.0 also understands JSON commands (see  JSON	 IPC),
	      but  you can't get replies or events. Use	--input-ipc-server for
	      something	bi-directional.	On MS Windows, JSON commands  are  not

	      This can also specify a direct file descriptor with fd://N (UNIX
	      only).  In this case, JSON replies will be written if the	FD  is

		 When the given	file is	a FIFO mpv opens both ends, so you can
		 do several echo "seek 10" _ mp_pipe and the  pipe  will  stay

       --input-terminal, --no-input-terminal
	      --no-input-terminal  prevents the	player from reading key	events
	      from standard input. Useful when reading data from standard  in-
	      put.  This  is automatically enabled when	- is found on the com-
	      mand line. There are situations where you	have to	set  it	 manu-
	      ally,  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.

	      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 --in-
	      put-ipc-server=/tmp/mpv-socket		 and		 --in-
	      put-ipc-server=\\.\pipe\tmp\mpv-socket are equivalent for	IPC on

	      See JSON IPC for details.

	      (OS X only) Enable/disable Apple Remote support. Enabled by  de-
	      fault (except for	libmpv).

       --input-cursor, --no-input-cursor
	      Permit  mpv to receive pointer events reported by	the video out-
	      put driver. Necessary to use the OSC, or to select  the  buttons
	      in DVD menus.  Support depends on	the VO in use.

	      (OS  X  only)  Enable/disable media keys support.	Enabled	by de-
	      fault (except for	libmpv).

       --input-right-alt-gr, --no-input-right-alt-gr
	      (Cocoa and Windows only) Use the right Alt key as	Alt Gr to pro-
	      duce  special characters.	If disabled, count the right Alt as an
	      Alt modifier key.	Enabled	by default.

	      Disable all keyboard input on for	VOs which can't	participate in
	      proper  keyboard input dispatching. May not affect all VOs. Gen-
	      erally 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  key-
	      board  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 pro-
	      tocol, 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-de-
	      fault-bindings is	disabled by default in libmpv  as  well	 -  it
	      should be	enabled	if you want the	mpv default key	bindings.

	      (This option was renamed from --input-x11-keyboard.)

       --osc, --no-osc
	      Whether to load the on-screen-controller (default: yes).

       --no-osd-bar, --osd-bar
	      Disable display of the OSD bar. This will	make some things (like
	      seeking) use OSD text messages instead of	the bar.

	      You can configure	this on	a per-command basis in input.conf  us-
	      ing  osd-	 prefixes,  see	Input command prefixes.	If you want to
	      disable the OSD completely, use --osd-level=0.

	      Set the duration of the OSD messages in ms (default: 1000).

	      Specify font to use for OSD. The default is sans-serif.


		 o --osd-font='Bitstream Vera Sans'

		 o --osd-font='MS Comic	Sans'

	      Specify the OSD font size. See --sub-font-size for details.

	      Default: 55.

	      Show this	string as message on OSD with OSD level	1 (visible  by
	      default).	  The  message will be visible by default, and as long
	      no other message covers it, and the OSD level isn't changed (see
	      --osd-level).  Expands properties; see Property Expansion.

	      Similar  as --osd-msg1, but for OSD level	2. If this is an empty
	      string (default),	then the playback time is shown.

	      Similar as --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 also used	for  the  show-progress	 command  (by  default
	      mapped to	P), or in some non-default cases when seeking.

	      --osd-status-msg	is  a legacy equivalent	(but with a minor dif-

	      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), or in some non-default cases when seeking. Expands
	      properties. See Property Expansion.

	      This option has been replaced with --osd-msg3. The only  differ-
	      ence is that this	option implicitly includes ${osd-sym-cc}. This
	      option is	ignored	if --osd-msg3 is not empty.

	      Show a message on	OSD when playback starts. The  string  is  ex-
	      panded  for  properties,	e.g.  --osd-playing-msg='file: ${file-
	      name}' will show the message file: followed by a space  and  the
	      currently	played filename.

	      See Property Expansion.

	      Position of the OSD bar. -1 is far left, 0 is centered, 1	is far
	      right.  Fractional values	(like 0.5) are allowed.

	      Position of the OSD bar. -1 is top, 0 is centered, 1 is  bottom.
	      Fractional values	(like 0.5) are allowed.

	      Width  of	 the  OSD  bar,	in percentage of the screen width (de-
	      fault: 75).  A value of 50 means the  bar	 is  half  the	screen

	      Height  of  the OSD bar, in percentage of	the screen height (de-
	      fault: 3.125).

	      See --osd-color. Color used for OSD text background.

	      Gaussian blur factor. 0 means no blur applied (default).

	      Format text on bold.

	      Format text on italic.

	      See --osd-color. Color used for the OSD font border.

		 ignored when --osd-back-color is specified (or	more  exactly:
		 when that option is not set to	completely transparent).

	      Size   of	  the	OSD   font   border   in  scaled  pixels  (see
	      --sub-font-size for details). A value of 0 disables borders.

	      Default: 3.

	      Specify the color	used for OSD.  See --sub-color for details.

	      Show OSD times with fractions of seconds (in millisecond	preci-
	      sion). Useful to see the exact timestamp of a video frame.

	      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

	      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.

	      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.

	      Control to which corner of the screen OSD	should be  aligned  to
	      (default:	left).

	      Vertical position	(default: top).	 Details see --osd-align-x.

	      OSD font size multiplier,	multiplied with	--osd-font-size	value.

	      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.

	      See --sub-color. Color used for OSD shadow.

	      Displacement  of	the  OSD  shadow   in	scaled	 pixels	  (see
	      --sub-font-size for details). A value of 0 disables shadows.

	      Default: 0.

	      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.

	      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.

	      Set the image file type used for saving screenshots.

	      Available	choices:

	      png    PNG

	      jpg    JPEG (default)

	      jpeg   JPEG (alias for jpg)

	      Tag screenshots with the appropriate colorspace.

	      Note that	not all	formats	are supported.

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

	      Specify the filename template used to save screenshots. The tem-
	      plate  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 re-
	      sults in filenames like mpv-shot0012.png for example.

	      The template can start with a relative or	absolute path, in  or-
	      der  to specify a	directory location where screenshots should be

	      If the final screenshot filename points to an  already  existing
	      file,  the file will not be overwritten. The screenshot will ei-
	      ther not be saved, or if the template contains %n,  saved	 using
	      different, newly generated filename.

	      Allowed format specifiers:

		     A	sequence  number,  padded  with	zeros to length	X (de-
		     fault: 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 ex-
		     ample,   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

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

		     Same as %x, but if	the video file is not on the  filesys-
		     tem, 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.

			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

	      %wX    Specify the current playback time using the format	string
		     X.	   %p	is   like   %wH:%wM:%wS,   and	 %P   is  like

		     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, un-
		     less a fallback is	specified.

	      %%     Replaced with the % character itself.

	      Store screenshots	in this	directory. This	path  is  joined  with
	      the filename generated by	--screenshot-template. If the template
	      filename is already absolute, the	directory is ignored.

	      If the directory does not	exist, it  is  created	on  the	 first
	      screenshot. If it	is not a directory, an error is	generated when
	      trying to	write a	screenshot.

	      This option is not set by	default, and thus will	write  screen-
	      shots to the directory from which	mpv was	started. In pseudo-gui
	      mode (see	PSEUDO GUI MODE), this is set to the desktop.

	      Set the JPEG quality level. Higher means better quality. The de-
	      fault is 90.

	      Write  JPEG  files with the same chroma subsampling as the video
	      (default:	yes). If disabled, the libjpeg default is used.

	      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  compres-
	      sion might occupy	enough CPU time	to interrupt playback. The de-
	      fault is 7.

	      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.

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

	      Software scaler Gaussian blur filter (luma). See --sws-scaler.

	      Software scaler Gaussian blur filter (chroma). See --sws-scaler.

	      Software scaler sharpen filter (luma). See --sws-scaler.

	      Software scaler sharpen filter (chroma). See --sws-scaler.

	      Software scaler chroma horizontal	shifting. See --sws-scaler.

	      Software scaler chroma vertical shifting.	See --sws-scaler.

	      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.

	      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 initial-
	      ization as well.

	      Disable colorful console output on terminals.

	      Control  verbosity  directly  for	 each  module.	The all	module
	      changes the verbosity of all the modules not  explicitly	speci-
	      fied on the command line.

	      Run  mpv with --msg-level=all=trace to see all messages mpv out-
	      puts. You	can use	the module names printed in the	 output	 (pre-
	      fixed  to	each line in [...]) to limit the output	to interesting

		 Some messages are printed before the command line  is	parsed
		 and  are  therefore  not  affected by --msg-level. To control
		 these messages, you have to use the  MPV_VERBOSE  environment
		 variable; see ENVIRONMENT VARIABLES for details.

	      Available	levels:

		 no	complete silence

		 fatal	fatal messages only

		 error	error messages

		 warn	warning	messages

		 info	informational messages

		 status	status messages	(default)

		 v	verbose	messages

		 debug	debug messages

		 trace	very noisy debug messages


		     mpv --msg-level=ao/sndio=no

		 Completely  silences  the  output of ao_sndio,	which uses the
		 log prefix [ao/sndio].

		     mpv --msg-level=all=warn,ao/alsa=error

		 Only show warnings or worse, and let the ao_alsa output  show
		 errors	only.

	      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

       --term-osd-bar, --no-term-osd-bar
	      Enable printing a	progress bar under the status line on the ter-
	      minal.  (Disabled	by default.)

	      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: [-+-].

	      Print  out  a  string after starting playback. The string	is ex-
	      panded for properties,  e.g.  --term-playing-msg='file:  ${file-
	      name}'  will  print the string file: followed by a space and the
	      currently	played filename.

	      See Property Expansion.

	      Print out	a custom string	during playback	instead	of  the	 stan-
	      dard status line.	Expands	properties. See	Property Expansion.

	      Prepend module name to each console message.

	      Prepend timing information to each console message.

	      These  options tune various properties of	the TV capture module.
	      For watching TV with mpv,	use tv:// or tv://<channel_number>  or
	      even  tv://<channel_name>	 (see  option  tv-channels  for	 chan-
	      nel_name below) as a media URL.  You  can	 also  use  tv:///<in-
	      put_id>  to  start  watching a video from	a composite or S-Video
	      input (see option	input for details).

	      Specify TV device	(default: /dev/video0).

	      Set tuner	to <value> channel.

	      no sound

       --tv-automute=<0-255> (v4l and v4l2 only)
	      If signal	strength reported by device is less than  this	value,
	      audio  and  video	will be	muted. In most cases automute=100 will
	      be enough.  Default is 0 (automute disabled).

	      See --tv=driver=help for a list of compiled-in TV	input drivers.
	      available: dummy,	v4l2 (default: autodetect)

	      Specify input (default: 0	(TV), see console output for available

	      Specify the frequency to set the tuner to	 (e.g.	511.250).  Not
	      compatible with the channels parameter.

	      Specify  the output format of the	tuner with a preset value sup-
	      ported by	the V4L	driver (YV12, UYVY, YUY2, I420)	 or  an	 arbi-
	      trary format given as hex	value.

	      output window width

	      output window height

	      framerate	at which to capture video (frames per second)

	      maximum size of the capture buffer in megabytes (default:	dynam-

	      See the console output for a list	of all available norms.

	      See also:	--tv-normid.

       --tv-normid=<value> (v4l2 only)
	      Sets the TV norm to the given numeric ID.	The TV norm depends on
	      the capture card.	See the	console	output for a list of available
	      TV norms.

	      available: argentina, australia, china-bcast,  europe-east,  eu-
	      rope-west,  france,  ireland,  italy,  japan-bcast, japan-cable,
	      newzealand,  russia,  southafrica,  us-bcast,  us-cable,	us-ca-

	      Set names	for channels.

		 If <chan> is an integer greater than 1000, it will be treated
		 as frequency (in kHz) rather than channel name	from frequency
		 table.	  Use  _ for spaces in names (or play with quoting ;-)
		 ). The	channel	names will then	be written using OSD, and  the
		 input	  commands    tv_step_channel,	  tv_set_channel   and
		 tv_last_channel will be usable	for a remote control. Not com-
		 patible with the frequency parameter.

		 The  channel  number  will then be the	position in the	'chan-
		 nels' list, beginning with 1.


			tv://1,	tv://TV1, tv_set_channel 1, tv_set_channel TV1

	      Set the image equalizer on the card.

	      Set input	audio sample rate.

	      Capture audio even if there are no  audio	 sources  reported  by

	      Capture from ALSA.

	      Choose an	audio mode:

	      0	     mono

	      1	     stereo

	      2	     language 1

	      3	     language 2

	      By  default,  the	count of recorded audio	channels is determined
	      automatically by querying	the audio mode from the	TV card.  This
	      option  allows  forcing  stereo/mono recording regardless	of the
	      amode option and the values returned by v4l. This	 can  be  used
	      for  troubleshooting  when  the  TV card is unable to report the
	      current audio mode.

	      Set an audio device. <value> should be /dev/xxx for  OSS	and  a
	      hardware	ID  for	ALSA. You must replace any ':' by a '.'	in the
	      hardware ID for ALSA.

	      Choose an	audio output of	the capture card, if it	has more  than

	      These  options  set parameters of	the mixer on the video capture
	      card.  They will have no effect, if your card does not have one.
	      For  v4l2	 50  maps  to the default value	of the control,	as re-
	      ported by	the driver.

	      Set gain control for video devices (usually webcams) to the  de-
	      sired  value  and	switch off automatic control. A	value of 0 en-
	      ables automatic control. If this option is omitted, gain control
	      will not be modified.

	      A	 value of 0 means capture and buffer audio and video together.
	      A	value of 1 (default) means to do video capture	only  and  let
	      the  audio  go  through a	loopback cable from the	TV card	to the
	      sound card.

	      Use hardware MJPEG compression (if the card supports  it).  When
	      using  this  option,  you	 do  not need to specify the width and
	      height of	the output window, because mpv will determine it auto-
	      matically	from the decimation value (see below).

	      choose  the size of the picture that will	be compressed by hard-
	      ware MJPEG compression:

	      1	     full size

		     o 704x576 PAL

		     o 704x480 NTSC

	      2	     medium size

		     o 352x288 PAL

		     o 352x240 NTSC

	      4	     small size

		     o 176x144 PAL

		     o 176x120 NTSC

	      Choose the quality of the	JPEG compression (< 60 recommended for
	      full size).

	      Begin  channel scanning immediately after	startup	(default: dis-

	      Specify delay in seconds before switching	to next	 channel  (de-
	      fault:  0.5).  Lower  values will	cause faster scanning, but can
	      detect inactive TV channels as active.

	      Threshold	value for the signal strength  (in  percent),  as  re-
	      ported  by  the  device  (default: 50). A	signal strength	higher
	      than this	value will indicate that the currently scanning	 chan-
	      nel is active.

	      Set  the	size of	the cache in kilobytes,	disable	it with	no, or
	      automatically enable it if needed	 with  auto  (default:	auto).
	      With  auto,  the	cache  will  usually  be  enabled  for network
	      streams, using the size set by --cache-default.  With  yes,  the
	      cache  will  always  be enabled with the size set	by --cache-de-
	      fault (unless the	stream cannot be  cached,  or  --cache-default
	      disables caching).

	      May  be  useful when playing files from slow media, but can also
	      have negative effects, especially	with file formats that require
	      a	lot of seeking,	such as	MP4.

	      Note that	half the cache size will be used to allow fast seeking
	      back. This is also the reason why	a full cache  is  usually  not
	      reported	as 100%	full.  The cache fill display does not include
	      the part of the cache reserved for seeking back. The actual max-
	      imum  percentage will usually be the ratio between readahead and
	      backbuffer sizes.

	      Set the size of the cache	in kilobytes (default: 75000 KB).  Us-
	      ing no will not automatically enable the cache e.g. when playing
	      from a network stream. Note that using --cache will always over-
	      ride this	option.

	      Playback	will start when	the cache has been filled up with this
	      many kilobytes of	data (default: 0).

	      If a seek	is to be made to a position  within  <kBytes>  of  the
	      cache  size  from	 the  current  position, mpv will wait for the
	      cache to be filled to this position  rather  than	 performing  a
	      stream seek (default: 500).

	      This  matters  for small forward seeks. With slow	streams	(espe-
	      cially HTTP streams) there is a tradeoff	between	 skipping  the
	      data  between current position and seek destination, or perform-
	      ing an actual seek. Depending on the situation, either of	 these
	      might  be	slower than the	other method.  This option allows con-
	      trol over	this.

	      Size of the cache	back buffer (default: 75000 KB). This will add
	      to  the  total  cache  size, and reserved	the amount for seeking
	      back. The	reserved amount	will not be used  for  readahead,  and
	      instead preserves	already	read data to enable fast seeking back.

	      Create a cache file on the filesystem.

	      There are	two ways of using this:

	      1. Passing  a  path  (a filename). The file will always be over-
		 written. When the general cache is enabled, this  file	 cache
		 will  be  used	 to  store  whatever  is  read from the	source

		 This will always overwrite the	cache file, and	you can't  use
		 an existing cache file	to resume playback of a	stream.	(Tech-
		 nically, mpv wouldn't even know which blocks in the file  are
		 valid and which not.)

		 The  resulting	 file will not necessarily contain all data of
		 the source stream. For	example, if you	seek, the  parts  that
		 were  skipped	over  are  never read and consequently are not
		 written to the	cache. The skipped over	parts are filled  with
		 zeros.	 This  means  that  the	cache file doesn't necessarily
		 correspond to a full download of the source stream.

		 Both of these issues could be improved	if there is  any  user

		    Causes  random  corruption when used with ordered chapters
		    or with --audio-file.

	      2. Passing the string TMP. This will not be interpreted as file-
		 name.	 Instead,  an  invisible temporary file	is created. It
		 depends on your C library where this file is created (usually
		 /tmp/),  and whether filename is visible (the tmpfile() func-
		 tion is used).	On some	systems,  automatic  deletion  of  the
		 cache file might not be guaranteed.

		 If  you  want	to use a file cache, this mode is recommended,
		 because it doesn't break ordered  chapters  or	 --audio-file.
		 These	modes  open multiple cache streams, and	using the same
		 file for them obviously clashes.

	      See also:	--cache-file-size.

	      Maximum size of the file created with --cache-file. For read ac-
	      cesses above this	size, the cache	is simply not used.

	      Keep  in mind that some use-cases, like playing ordered chapters
	      with cache enabled, will actually	create multiple	 cache	files,
	      each of which will use up	to this	much disk space.

	      (Default:	1048576, 1 GB.)

	      Turn off input stream caching. See --cache.

	      How  many	seconds	of audio/video to prefetch if the cache	is ac-
	      tive. This overrides the --demuxer-readahead-secs	option if  and
	      only  if the cache is enabled and	the value is larger. (Default:

       --cache-pause, --no-cache-pause
	      Whether the player should	automatically  pause  when  the	 cache
	      runs low,	and unpause once more data is available	("buffering").

	      Use <string> as user agent for HTTP streaming.

       --cookies, --no-cookies
	      Support cookies when making HTTP requests. Disabled by default.

	      Read  HTTP cookies from <filename>. The file is assumed to be in
	      Netscape format.

	      Set custom HTTP fields when accessing HTTP stream.


		     mpv --http-header-fields='Field1: value1','Field2:	value2'	\

		 Will generate HTTP request:

		     GET / HTTP/1.0
		     Host: localhost:1234
		     User-Agent: MPlayer
		     Icy-MetaData: 1
		     Field1: value1
		     Field2: value2
		     Connection: close

	      Certificate authority database file for use with TLS.  (Silently
	      fails with older FFmpeg or Libav versions.)

	      Verify peer certificates when using TLS (e.g. with https://...).
	      (Silently	fails with older FFmpeg	or Libav versions.)

	      A	file containing	a certificate to use in	the handshake with the

	      A	file containing	the private key	for the	certificate.

	      Specify a	referrer path or URL for HTTP requests.

	      Specify  the  network  timeout in	seconds. This affects at least
	      HTTP. The	special	value 0	(default) uses	the  FFmpeg/Libav  de-
	      faults.  If  a protocol is used which does not support timeouts,
	      this option is silently ignored.

	      Select RTSP transport method (default: tcp).  This  selects  the
	      underlying  network  transport when playing rtsp://... URLs. The
	      value lavf leaves	the decision to	libavformat.

	      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 guar-
	      antee it's actually meaningful.

	      Specifies	using card number 1-4 (default:	1).

	      Instructs	mpv to read the	channels list from <filename>. The de-
	      fault  is	 in  the  mpv configuration directory (usually ~/.con-
	      fig/mpv)	with  the  filename   channels.conf.{sat,ter,cbl,atsc}
	      (based  on  your	card  type) or channels.conf as	a last resort.
	      For DVB-S/2 cards, a VDR 1.7.x format  channel  list  is	recom-
	      mended  as  it allows tuning to DVB-S2 channels, enabling	subti-
	      tles and decoding	the PMT	(which largely improves	the demuxing).
	      Classic  mplayer format channel lists are	still supported	(with-
	      out these	improvements), and for other card types, only  limited
	      VDR  format  channel  list  support is implemented (patches wel-
	      come).  For channels with	dynamic	PID  switching	or  incomplete
	      channels.conf,  --dvbin-full-transponder	or  the	magic PID 8192
	      are recommended.

	      Maximum number of	seconds	to wait	when trying  to	 tune  a  fre-
	      quency before giving up (default:	30).

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

   ALSA	audio output options
	      Deprecated, use --audio-device (requires alsa/ prefix).

	      Enable ALSA resampling plugin. (This is disabled by default, be-
	      cause some drivers report	incorrect audio	delay in some cases.)

	      Set the mixer device used	with ao-volume (default: default).

	      Set the name of the mixer	element	(default: Master). This	is for
	      example PCM or Master.

	      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.

	      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

	      Don't read or set	the channel map	of the ALSA device - only  re-
	      quest  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  de-

   OpenGL renderer options
       The  following  video options are currently all specific	to --vo=opengl
       and --vo=opengl-cb only,	which are the only VOs that implement them.


		 Bilinear hardware texture filtering (fastest, very low	 qual-
		 ity). This is the default for compatibility reasons.

		 Mid  quality  and  speed.  This  is  the  default  when using

		 Lanczos scaling. Provides mid quality	and  speed.  Generally
		 worse than spline36, but it results in	a slightly sharper im-
		 age which is good for some content types. The number of  taps
		 can  be  controlled  with  scale-radius, but is best left un-

		 (This filter is an alias for sinc-windowed sinc)

		 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)

		 A slightly sharpened version of ewa_lanczos, preconfigured to
		 use an	ideal radius and parameter. If your hardware  can  run
		 it, this is probably what you should use by default.

		 Mitchell-Netravali.  The  B  and C parameters can be set with
		 --scale-param1	and --scale-param2. This filter	is  very  good
		 at downscaling	(see --dscale).

		 A  version  of	 nearest  neighbour that (naively) oversamples
		 pixels, so that pixels	overlapping edges get linearly	inter-
		 polated  instead  of  rounded.	 This  essentially removes the
		 small imperfections and  judder  artifacts  caused  by	 near-
		 est-neighbour	interpolation,	in  exchange  for  adding some
		 blur. This filter is good at temporal interpolation, and also
		 known as "smoothmotion" (see --tscale).

	  linear A --tscale filter.

	  There	 are some more filters,	but most are not as useful. For	a com-
	  plete	list, pass help	as value, e.g.:

	      mpv --scale=help

	      As --scale, but for interpolating	chroma information. If the im-
	      age is not subsampled, this option is ignored entirely.

	      Like --scale, but	apply these filters on downscaling instead. If
	      this option is unset, the	filter implied by --scale will be  ap-

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

	      Note that	the maximum supported filter radius  is	 currently  3,
	      due  to  limitations in the number of video textures that	can be
	      loaded simultaneously.

       --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.	Ignored	 if the	filter is not tunable.
	      Currently, this affects the following filter parameters:

		     Spline parameters (B and C). Defaults to 0.5 for both.

		     Scale parameter (t). Increasing  this  makes  the	result
		     blurrier.	Defaults to 1.

		     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>,   --scale-wblur=<value>,	--cscale-blur=<value>,
       --cscale-wblur=<value>, --dscale-blur=<value>,  --dscale-wblur=<value>,
       --tscale-blur=<value>, --tscale-wblur=<value>
	      Kernel/window  scaling factor (also known	as a blur factor). De-
	      creasing 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, --cscale-clamp, --dscale-clamp, --tscale-clamp
	      Clamp the	filter kernel's	value range to [0-1].  This  is	 espe-
	      cially  useful  for --tscale, where it reduces excessive ringing
	      artifacts	in the temporal	domain (which typically	manifest them-
	      selves  as short flashes or fringes of black, mostly around mov-
	      ing edges) in exchange for potentially adding more blur.

       --scale-taper=<value>, --scale-wtaper=<value>,  --dscale-taper=<value>,
       --dscale-wtaper=<value>,	     --cscale-taper=<value>,	 --cscale-wta-
       per=<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-ra-
       dius=<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 dif-
	      ferent (most likely being	increased a bit).

       --scale-antiring=<value>,  --cscale-antiring=<value>,   --dscale-antir-
       ing=<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 dis-
	      ables antiringing	entirely.

	      Note that	this doesn't affect the	special	filters	 bilinear  and

       --scale-window=<window>,	    --cscale-window=<window>,	 --dscale-win-
       dow=<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	 func-

       --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. Ignored if the window is
	      not tunable. Currently, this affects the following window	param-

	      kaiser Window parameter (alpha). Defaults	to 6.33.

		     Window parameter (alpha). Defaults	to 0.16.

		     Scale  parameter  (t).  Increasing	 this makes the	window
		     wider. Defaults to	1.

	      Set the size of the lookup texture for scaler kernels  (default:
	      6). The actual size of the texture is 2^N	for an option value of
	      N. So the	lookup texture with the	default	setting	uses  64  sam-

	      All weights are linearly interpolated from those samples,	so in-
	      creasing the size	of lookup table	might improve the accuracy  of

	      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.

	      Scale   in   linear  light.  It  should  only  be	 used  with  a
	      --opengl-fbo-format that has at least 16 bit precision.

	      When using convolution based filters,  extend  the  filter  size
	      when  downscaling.  Increases  quality,  but reduces performance
	      while downscaling.

	      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.

	      Reduce stuttering	caused by mismatches in	the video fps and dis-
	      play refresh rate	(also known as judder).

		 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.

	      Note  that this relies on	vsync to work, see --opengl-swapinter-
	      val for more information.

	      Threshold	below which frame ratio	 interpolation	gets  disabled
	      (default:	 0.0001). This is calculated as	abs(disphz/vfps	- 1) <
	      threshold, where vfps is the speed-adjusted video	FPS, and  dis-
	      phz  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=dis-
	      play-resample to make video run  synchronously  to  the  display
	      FPS, or if you change the	speed property.)

	      The default is intended to almost	always enable interpolation if
	      the playback rate	is even	slightly different  from  the  display
	      refresh  rate.  But  note	that if	you use	e.g. --video-sync=dis-
	      play-vdrop, small	deviations in the rate can disable  interpola-
	      tion and introduce a discontinuity every other minute.

	      Set this to -1 to	disable	this logic.

	      Enable  use  of  PBOs. On	some drivers this can be faster, espe-
	      cially if	the source video size is huge  (e.g.  so  called  "4K"
	      video). On other drivers it might	be slower or cause latency is-

	      In theory, this can sometimes lead to sporadic and temporary im-
	      age corruption (because reupload is not retried when it fails).

	      Set dither target	depth to N. Default: no.

	      no     Disable any dithering done	by mpv.

	      auto   Automatic	selection.  If	output bit depth cannot	be de-
		     tected, 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.

	      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

	      Used in --dither=fruit mode only.

	      Select dithering	algorithm  (default:  fruit).  (Normally,  the
	      --dither-depth option controls whether dithering is enabled.)

	      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.

	      Determines  how  often  the  dithering  pattern  is updated when
	      --temporal-dither	is in use. 1 (the default) will	update on  ev-
	      ery video	frame, 2 on every other	frame, etc.

	      Check for	OpenGL errors, i.e. call glGetError(). Also, request a
	      debug OpenGL context (which does nothing with  current  graphics
	      drivers as of this writing).

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

	      Custom  GLSL hooks. These	are a flexible way to add custom frag-
	      ment shaders, which can be injected at almost  arbitrary	points
	      in  the rendering	pipeline, and access all previous intermediate


			The syntax is not stable yet and may change any	time.

	      The general syntax of a user shader looks	like this:


		 vec4 hook() {
		    return something;



	      Each block of metadata, along with the non-metadata lines	 after
	      it, defines a single pass. Each pass can set the following meta-

	      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.

	      BIND <name>
		     Loads a texture and makes it available to the  pass,  and
		     sets  up  macros  to enable accessing it. See below for a
		     list of set macros. By default, no	 textures  are	bound.
		     The  special name HOOKED can be used to refer to the tex-
		     ture 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

	      WIDTH <szexpr>, HEIGHT <szexpr>
		     Specifies	the  size  of  the  resulting texture for this
		     pass. szexpr refers to an expression in RPN (reverse pol-
		     ish  notation), using the operators + - * / > < !,	float-
		     ing 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
		     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  de-
		     fault  values  are	0 0 which correspond to	no shift. Note
		     that offsets are ignored when not overwriting the	hooked

		     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.

	      Each bound 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  conver-

	      vec4 NAME_texOff(vec2 offset)
		     Sample  the  texture  at a	certain	offset in pixels. This
		     works like	NAME_tex but additionally takes	care of	neces-
		     sary  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

	      vec2 NAME_size
		     The (rotated) size	in pixels of the texture.

	      mat2 NAME_rot
		     The  rotation  matrix  associated with this texture. (Ro-
		     tates pixel space to texture coordinates)

	      vec2 NAME_pt
		     The (unrotated) size of a single pixel, range [0,1].

	      sampler NAME_raw
		     The raw bound texture itself. The use of this  should  be
		     avoided unless absolutely necessary.

	      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_opengl may	generate any number of	the  following
	      textures.	   Whenever   a	 texture  is  rendered	and  saved  by
	      vo_opengl, 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.

		     Source  planes  (upscaled). These only fire on subsampled

	      NATIVE (resizable)
		     The combined image, in the	source colorspace, before con-
		     version 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  up-

	      LINEAR (fixed)
		     Linear  light image, before scaling. This only fires when
		     --linear-scaling 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.

	      Enable the debanding algorithm. This greatly reduces the	amount
	      of  visible  banding, blocking and other quantization artifacts,
	      at the expensive 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.

	      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  num-
	      bers (>4)	are practically	useless.  (Default 1)

	      The  debanding  filter's	cut-off	 threshold. Higher numbers in-
	      crease the debanding strength dramatically but progressively di-
	      minish image details.  (Default 64)

	      The debanding filter's initial radius. The radius	increases lin-
	      early for	each iteration.	A higher radius	will find more	gradi-
	      ents, but	a lower	radius will smooth more	aggressively. (Default

	      If you increase the --deband-iterations, you should probably de-
	      crease this to compensate.

	      Add  some	 extra	noise  to  the image. This significantly helps
	      cover up remaining quantization artifacts.  Higher  numbers  add
	      more noise. (Default 48)

	      When  upscaling, use a sigmoidal color transform to avoid	empha-
	      sizing ringing artifacts.	This also implies --linear-scaling.

	      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

	      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

	      If set to	a value	other than 0, enable an	unsharp	 masking  fil-
	      ter.  Positive values will sharpen the image (but	add more ring-
	      ing and aliasing). Negative values will blur the image. If  your
	      GPU is powerful enough, consider alternatives like the ewa_lanc-
	      zossharp scale filter, or	the --scale-blur option.

	      Call glFinish() before and after swapping	buffers	(default: dis-
	      abled).  Slower, but might improve results when doing framedrop-
	      ping. Can	completely ruin	performance. The  details  depend  en-
	      tirely on	the OpenGL driver.

	      Call  glXWaitVideoSyncSGI	 after each buffer swap	(default: dis-
	      abled).  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.

	      Synchronize the CPU to the Nth past frame	using the  GL_ARB_sync
	      extension.  A  value  of	0  disables this behavior (default). A
	      value of 1 means it will synchronize to the current frame	 after
	      rendering	it. Like --glfinish and	--waitvsync, this can lower or
	      ruin performance.	Its advantage is that  it  can	span  multiple
	      frames,  and  effectively	 limit	the  number  of	frames the GPU
	      queues ahead (which also has an influence	on vsync).

	      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.

	      Windows only.

	      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 ex-
	      tended OpenGL features will not work  at	lower  feature	levels
	      (similar to --opengl-dumb-mode).

	      Windows with ANGLE only.

	      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.

	      Use ANGLE's built	in EGL windowing functions to  create  a  swap
	      chain  (default:	auto). If this is set to no and	the D3D11 ren-
	      derer 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-max-frame-latency,	 --an-
	      gle-swapchain-length and --angle-flip options will have  no  ef-

	      Windows with ANGLE only.

	      Enable flip-model	presentation, which avoids unnecessarily copy-
	      ing 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  Win-
	      dows 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

	      Windows with ANGLE only.

	      Sets  the	maximum	number of frames that the system is allowed to
	      queue for	rendering with the ANGLE backend (default:  3).	 Lower
	      values  should make VSync	timing more accurate, but a value of 1
	      requires powerful	hardware, since	the CPU	will not  be  able  to
	      "render ahead" of	the GPU.

	      Windows with ANGLE only.

	      Forces  a	 specific  renderer  when using	the ANGLE backend (de-
	      fault: auto). In auto mode this will pick	D3D11 for systems that
	      support Direct3D 11 feature level	9_3 or higher, and D3D9	other-
	      wise. This option	is mainly  for	debugging  purposes.  Normally
	      there  is	 no  reason to force a specific	renderer, though --an-
	      gle-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 ren-
	      derer is selected	(similar to --opengl-dumb-mode).

	      Windows with ANGLE only.

	      Sets  the	number of buffers in the D3D11 presentation queue when
	      using the	ANGLE backend (default:	6). At least 2	are  required,
	      since  one  is the back buffer that mpv renders to and the other
	      is the front buffer that is presented  by	 the  DWM.  Additional
	      buffers  can  improve performance, because for example, mpv will
	      not have to wait on the DWM to release the front	buffer	before
	      rendering	 a  new	frame to it. For this reason, Microsoft	recom-
	      mends at least 4.

	      Windows 8+ with ANGLE only.

	      Deactivates the automatic	graphics switching and forces the ded-
	      icated GPU.  (default: no)

	      OS X only.

	      Continue even if a software renderer is detected.

	      The  value auto (the default) selects the	windowing backend. You
	      can also pass help to get	a complete list	of compiled  in	 back-
	      ends (sorted by autoprobe	order).

	      auto   auto-select (default)

	      cocoa  Cocoa/OS X

	      win    Win32/WGL

	      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 pre-
		     sentation.	Works on Nvidia	and  AMD.  Newer  Intel	 chips
		     with the latest drivers may also work.

	      x11    X11/GLX

		     For  internal  autoprobing,  equivalent to	x11 otherwise.
		     Don't use directly, it could be removed  without  warning
		     as	autoprobing is changed.


	      drm    DRM/EGL (drm-egl is a deprecated alias)

	      x11egl X11/EGL

		     Direct fbdev/EGL support on some ARM/MALI devices.

		     Use  vdpau	presentation with GLX as backing. Experimental
		     use only.	Using this will	have no	advantage (other  than
		     additional	 bugs or performance problems),	and is for do-
		     ing experiments only. Will	not be used automatically.

	      Select whether to	use GLES:

	      yes    Try to prefer ES over Desktop GL

	      force2 Try to request a ES 2.0 context (the driver might	ignore

	      no     Try to prefer desktop GL over ES

	      auto   Use the default for each backend (default)

	      Selects  the internal format of textures used for	FBOs. The for-
	      mat can influence	performance and	quality	of the	video  output.
	      fmt can be one of: rgb8, rgb10, rgb10_a2,	rgb16, rgb16f, rgb32f,
	      rgba12, rgba16, rgba16f, rgba32f.	Default: auto, which  maps  to
	      rgba16  on desktop GL, and rgba16f or rgb10_a2 on	GLES (e.g. AN-
	      GLE), unless GL_EXT_texture_norm16 is available.

	      Set a gamma value	(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.

	      Recommended values based on the environmental brightness:

	      1.0    Brightly illuminated (default)

	      0.9    Slightly dim

	      0.8    Pitch black room

	      NOTE: Typical movie content (Blu-ray etc.)  already  contains  a
	      gamma  drop of about 0.8,	so specifying it here as well will re-
	      sult in even darker image	than intended!

	      Automatically corrects the  gamma	 value	depending  on  ambient
	      lighting conditions (adding a gamma boost	for dark rooms).

	      With  ambient  illuminance of 64lux, mpv will pick the 1.0 gamma
	      value (no	boost),	and slightly increase the boost	up  until  0.8
	      for 16lux.

	      NOTE: Only implemented on	OS X.

	      Specifies	 the  primaries	 of  the display. Video	colors will be
	      adapted to this colorspace when ICC color	management is not  be-
	      ing used.	Valid values are:

	      auto   Disable any adaptation (default)

		     ITU-R BT.470 M

		     ITU-R  BT.601  (525-line  SD  systems,  eg.  NTSC), SMPTE

		     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 An-
		     nex B

		     ITU-R BT.2020 (UHD)

	      apple  Apple RGB

	      adobe  Adobe RGB (1998)

		     ProPhoto RGB (ROMM)

		     CIE 1931 RGB (not to be confused with CIE XYZ)

	      dci-p3 DCI-P3 (Digital Cinema Colorspace), SMPTE RP431-2

		     Panasonic V-Gamut (VARICAM) primaries

	      Specifies	the transfer characteristics (gamma) of	 the  display.
	      Video  colors will be adjusted to	this curve when	ICC color man-
	      agement is not being used.  Valid	values are:

	      auto   Disable any adaptation (default)

		     ITU-R BT.1886 curve (assuming infinite contrast)

	      srgb   IEC 61966-2-4 (sRGB)

	      linear Linear light output

		     Pure power	curve (gamma 1.8), also	used for Apple RGB

		     Pure power	curve (gamma 2.2)

		     Pure power	curve (gamma 2.8), also	used for BT.470-BG

		     ProPhoto RGB (ROMM)

	      st2084 SMPTE ST2084 (HDR)	curve, PQ OETF

		     ARIB STD-B67 (Hybrid  Log-gamma)  curve,  also  known  as
		     BBC/NHK HDR

	      v-log  Panasonic V-Log (VARICAM) curve

		 When  using HDR output	formats, mpv will encode to the	speci-
		 fied curve but	it will	not set	any HDMI flags or  other  sig-
		 nalling  that might be	required for the target	device to cor-
		 rectly	display	the HDR	signal.	 The user should independently
		 guarantee this	before using these signal formats for display.

	      Specifies	 the  display's	approximate brightness in cd/m^2. When
	      playing HDR content on a SDR display (or SDR content on  an  HDR
	      display),	 video	colors	will  be  tone	mapped	to this	target
	      brightness using the algorithm specified by  --hdr-tone-mapping.
	      The default of 250 cd/m^2	corresponds to a typical consumer dis-

	      Specifies	the algorithm used for tone-mapping  HDR  images  onto
	      the target display. Valid	values are:

	      clip   Hard-clip any out-of-range	values.

		     Reinhard  tone  mapping algorithm.	Very simple continuous
		     curve.  Preserves dynamic range and peak but uses nonlin-
		     ear contrast.

	      hable  Similar  to  reinhard  but	preserves dark contrast	better
		     (slightly sigmoidal). Developed by	John Hable for use  in
		     video games. (default)

	      gamma  Fits a logarithmic	transfer between the tone curves.

	      linear Linearly  stretches the entire reference gamut to (a lin-
		     ear multiple of) the display.

	      Set tone mapping parameters. Ignored if the tone	mapping	 algo-
	      rithm  is	 not  tunable. This affects the	following tone mapping

		     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.

	      gamma  Specifies the exponent of the function. Defaults to 1.8.

	      linear Specifies the scale factor	to use while  stretching.  De-
		     faults to 1.0.

	      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

	      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.

	      Store and	load the 3D LUTs created from the ICC profile in  this
	      directory.   This	 can  be  used to speed	up loading, since Lit-
	      tleCMS 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: This is not	cleaned	automatically, so  old,	 unused	 cache
	      files may	stick around indefinitely.

	      Specifies	the ICC	intent used for	the color transformation (when
	      using --icc-profile).

	      0	     perceptual

	      1	     relative colorimetric (default)

	      2	     saturation

	      3	     absolute colorimetric

	      Size of the 3D LUT generated from	the ICC	profile	in each	dimen-
	      sion.  Default is	64x64x64. Sizes	may range from 2 to 512.

	      Specifies	 an upper limit	on the target device's contrast	ratio.
	      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. This only affects BT.1886 content.	The default of
	      0	means no limit.

	      Blend subtitles directly onto upscaled video frames, before  in-
	      terpolation and/or color management (default: no). Enabling this
	      causes subtitles to be affected by --icc-profile,	--target-prim,
	      --target-trc, --interpolation, --opengl-gamma and	--post-shader.
	      It also increases	subtitle performance when  using  --interpola-

	      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.

		 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.

	      Decides what to do if the	input has an alpha component.

		     Blend the frame against a 16x16  gray/white  tiles	 back-
		     ground (default).

	      blend  Blend  the	 frame	against	 the background	color (--back-
		     ground, 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).	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 --opengl-fbo-format option to a non-default
		     value, a format with alpha	must  be  specified,  or  this
		     won't  work.  This	does not work on X11 with EGL and Mesa
		     (freedesktop bug 67676).

	      no     Ignore alpha component.

	      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

	      Color used to draw parts of the mpv window not covered by	video.
	      See --osd-color option how colors	are defined.

       --opengl-tex-pad-x, --opengl-tex-pad-y
	      Enlarge the video	source textures	by this	many pixels.  For  de-
	      bugging  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 re-
	      moved any	time.

	      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 af-
	      ter rendering, instead of	flipping GL front and backbuffers  im-
	      mediately	(i.e. it doesn't call it in display-sync mode).

	      This  mode  is  extremely	 restricted, and will disable most ex-
	      tended OpenGL features. This includes high quality  scalers  and
	      custom shaders!

	      It  is intended for hardware that	does not support FBOs (includ-
	      ing 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. It's	also enabled automatically  if
	      nothing uses features which require FBOs.

	      This option might	be silently removed in the future.

	      Store  and load compiled GL shaders in this directory. Normally,
	      shader compilation is very fast, so this is usually not  needed.
	      But  some	GL implementations (notably ANGLE, the default on Win-
	      dows) have relatively slow shader	 compilation,  and  can	 cause
	      startup delays.

	      NOTE:  This  is  not cleaned automatically, so old, unused cache
	      files may	stick around indefinitely.

	      This option might	be silently removed in the  future,  if	 ANGLE
	      fixes shader compilation speed.

	      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.

	      Maximum A-V sync correction per frame (in	seconds)

	      Gradually	adjusts	the A/V	sync based  on	audio  delay  measure-
	      ments.   Specifying  --autosync=0, the default, will cause frame
	      timing to	be based entirely on audio delay measurements.	Speci-
	      fying  --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.

	      How the player synchronizes audio	and video.

	      If  you  use  this  option,  you	usually	want to	set it to dis-
	      play-resample to enable a	timing mode that tries to not skip  or
	      repeat  frames  when  for	 example playing 24fps video on	a 24Hz

	      The modes	starting with display- try to output video frames com-
	      pletely synchronously to the display, using the detected display
	      vertical refresh rate as a hint how fast	frames	will  be  dis-
	      played  on  average.  These modes	change video speed slightly to
	      match the	display. See --video-sync-...  options for  fine  tun-
	      ing.  The	robustness of this mode	is further reduced by making a
	      some idealized assumptions, which	may not	always apply in	 real-
	      ity.   Behavior  can depend on the VO and	the system's video and
	      audio drivers.  Media files must use  constant  framerate.  Sec-
	      tion-wise	 VFR  might  work  as well with	some container formats
	      (but not e.g. mkv). If the sync code detects severe A/V  desync,
	      or  the  framerate  cannot be detected, the player automatically
	      reverts to audio mode for	some time or permanently.

	      The modes	with desync in their names do not attempt to keep  au-
	      dio/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

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

		     Resample  audio  to match the video. Drop video frames to
		     compensate	for drift.

		     Like the previous mode, but no A/V	compensation.

		     Drop or  repeat  video  frames  to	 compensate  desyncing
		     video.  (Although	it should have the same	effects	as au-
		     dio, the implementation is	very different.)

		     Drop or repeat audio data to compensate desyncing	video.
		     See  --video-sync-adrop-size. This	mode will cause	severe
		     audio artifacts if	the real monitor refresh rate  is  too
		     different from the	reported or forced rate.

		     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.

	      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: play-
	      ing 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 al-
	      low this behavior	by default. Set	this option to a value of 5 to
	      enable it.

	      Note that	in the --video-sync=display-resample mode, audio speed
	      will additionally	be changed by a	small amount if	necessary  for
	      A/V sync.	See --video-sync-max-audio-change.

	      Maximum  additional  speed difference in percent that is applied
	      to audio with --video-sync=display-...  (default:	 0.125).  Nor-
	      mally, 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 skip-
	      ping multiple video frames before	the sync logic can react.

	      For  the	--video-sync=display-adrop  mode.  This	 mode	dupli-
	      cates/drops  audio  data	to  keep  audio	in sync	with video. To
	      avoid audio artifacts on jitter (which would add/remove  samples
	      all  the	time),	this is	done in	relatively large, fixed	units,
	      controlled by this option. The unit is seconds.

	      Framerate	used when decoding from	multiple  PNG  or  JPEG	 files
	      with mf:// (default: 1).

	      Input  file  type	for mf:// (available: jpeg, png, tga, sgi). By
	      default, this is guessed from the	file extension.

	      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.

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

	      (Windows	only.)	 Set  the MMCSS	profile	for the	video renderer
	      thread (default: Playback).

	      (Windows only.)  Set process priority for	mpv according  to  the
	      predefined priorities available under Windows.

	      Possible	values	of  <prio>:  idle|belownormal|normal|abovenor-

		 Using realtime	priority can cause system lockup.

	      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.

	      Add all tracks from the given file. Unlike --sub-file and	 --au-
	      dio-file,	 this  includes	all tracks, and	does not cause default
	      stream selection over the	"proper" file.

	      Automatically load/select	external files (default: yes).

	      If set to	no, then do not	automatically load external  files  as
	      specified	by --sub-auto and --audio-file-auto. If	external files
	      are forcibly added (like with  --sub-file),  they	 will  not  be

	      This  does  not affect playlist expansion, redirection, or other
	      loading of referenced files like with ordered chapters.

	      Record the current stream	to the given target file.  The	target
	      file will	always be overwritten without asking.

	      This  remuxes  the source	stream without reencoding, which makes
	      this a highly fragile and	experimental  feature.	It's  entirely
	      possible	that this writes files which are broken, not standards
	      compliant, not playable with all players (including mpv),	or in-

	      The  target  file	 format	is determined by the file extension of
	      the target filename. It is recommended to	use  the  same	target
	      container	 as  the  source container if possible,	and preferring
	      Matroska as fallback.

	      Seeking during stream recording,	or  enabling/disabling	stream
	      recording	 during	playback, can cut off data, or produce "holes"
	      in the output file.  These are technical restrictions.  In  par-
	      ticular,	video data or subtitles	which were read	ahead can pro-
	      duce such	holes, which might cause playback problems with	 vari-
	      ous players (including mpv).

	      The behavior of this option might	changed	in the future, such as
	      changing it to a template	 (similar  to  --screenshot-template),
	      being  renamed,  removed,	or anything else, until	it is declared

	      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 par-
	      ticipating input tracks and audio/video  output.	The  following
	      rules apply:

	      o	A  label of the	form aidN selects audio	track N	as input (e.g.

	      o	A label	of the form vidN selects video track N as input.

	      o	A label	named ao will be connected to the audio	output.

	      o	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 au-
	      dio stream for multiple filters, you need	to use the asplit fil-
	      ter. Multiple video or audio outputs are not possible,  but  you
	      can use filters to merge them into one.

	      The  complex  filter cannot be changed yet during	playback. It's
	      also not possible	to change the tracks connected to  the	filter
	      at  runtime.  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.

	      Note  that the normal filter chains (--af, --vf) are applied be-
	      tween the	complex	graphs (e.g. ao	label) and the actual output.


		 o --lavfi-complex='[aid1] asplit [ao] [t] ;  [t]  aphasemeter
		   [vo]'  Play	audio track 1, and visualize it	as video using
		   the aphasemeter filter.

		 o --lavfi-complex='[aid1] [aid2] amix [ao]' Play audio	 track
		   1 and 2 at the same time.

		 o --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 initial-
		   ization will	fail (you can add scale	filters	before the vs-
		   tack	filter to fix the size).

		 o --lavfi-complex='[aid1]  asplit  [ao] [t] ; [t] aphasemeter
		   [t2]	; [vid1] [t2] overlay [vo]' Play audio	track  1,  and
		   overlay its visualization over video	track 1.

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

		 o null:// --lavfi-complex='life [vo]' Conways'	Life Game.

	      See the FFmpeg libavfilter  documentation	 for  details  on  the
	      available	filters.

       Audio  output  drivers are interfaces to	different audio	output facili-
       ties. The syntax	is:

	      Specify a	priority list of audio output drivers to be used.

       If the list has a trailing ',', mpv will	fall back on drivers not  con-
       tained in the list.

	  See  --ao=help  for  a list of compiled-in audio output drivers. The
	  driver --ao=alsa is preferred. --ao=pulse is	preferred  on  systems
	  where	PulseAudio is used. On BSD systems, --ao=oss or	--ao=sndio may
	  work (the latter being experimental).

       Available audio output drivers are:

       alsa (Linux only)
	      ALSA audio output	driver

	      See ALSA audio output options for	options	specific to this AO.

		 To  get  multichannel/surround	  audio,   use	 --audio-chan-
		 nels=auto.  The  default  for this option is auto-safe, which
		 makes this audio otuput explicitly reject  multichannel  out-
		 put,  as  there is no way to detect whether a certain channel
		 layout	is actually supported.

		 You can also try using	the upmix plugin.  This	setup  enables
		 multichannel  audio  on the default device with automatic up-
		 mixing	with shared access, so playing stereo and multichannel
		 audio at the same time	will work as expected.

       oss    OSS audio	output driver

	      The following global options are supported by this audio output:

		     Sets the audio output device (default: /dev/dsp).	Depre-
		     cated, use	--audio-device.

		     Sets the audio mixer device (default: /dev/mixer).

		     Sets the audio mixer channel (default: pcm). Other	 valid
		     values include vol, pcm, line. For	a complete list	of op-
		     tions   look   for	  SOUND_DEVICE_NAMES	in    /usr/in-

       jack   JACK (Jack Audio Connection Kit) audio output driver.

	      The following global options are supported by this audio output:

		     Connects to the ports with	the given name (default: phys-
		     ical ports).

		     Client name that is passed	to JACK	(default: mpv).	Useful
		     if	you want to have certain connections established auto-

		     Automatically start jackd	if  necessary  (default:  dis-
		     abled).  Note  that  this tends to	be unreliable and will
		     flood stdout with server messages.

		     Automatically create connections  to  output  ports  (de-
		     fault:  enabled).	 When  enabled,	 the maximum number of
		     output channels will be limited to	the number  of	avail-
		     able output ports.

		     Select  the  standard  channel layout (default: waveext).
		     JACK itself has no	notion of channel  layouts  (i.e.  as-
		     signing  which speaker a given channel is supposed	to map
		     to) - it just takes whatever the application outputs, and
		     reroutes  it to whatever the user defines.	This means the
		     user and the application are in charge  of	 dealing  with
		     the  channel  layout. waveext uses	WAVE_FORMAT_EXTENSIBLE
		     order, which, even	though it was defined by Microsoft, is
		     the  standard  on many systems.  The value	any makes JACK
		     accept whatever comes from	the audio  filter  chain,  re-
		     gardless  of  channel layout and without reordering. This
		     mode is probably not very useful, other than  for	debug-
		     ging or when used with fixed setups.

       coreaudio (Mac OS X only)
	      Native  Mac  OS  X  audio	output driver using AudioUnits and the
	      CoreAudio	sound server.

	      Automatically redirects to coreaudio_exclusive when playing com-
	      pressed formats.

	      The following global options are supported by this audio output:

		     Change  the  physical  format  to	one similar to the re-
		     quested audio format (default: no). This has  the	advan-
		     tage  that	 multichannel audio output will	actually work.
		     The disadvantage is that it will change  the  system-wide
		     audio settings. This is equivalent	to changing the	Format
		     setting in	the Audio Devices dialog  in  the  Audio  MIDI
		     Setup  utility.  Note  that  this does not	affect the se-
		     lected speaker setup.

		     Deprecated, use --audio-exclusive.	  Use  exclusive  mode
		     access. This merely redirects to coreaudio_exclusive, but
		     should be preferred over using that AO directly.

       coreaudio_exclusive (Mac	OS X only)
	      Native Mac OS X audio output driver using	direct	device	access
	      and exclusive mode (bypasses the sound server).

       openal Experimental OpenAL audio	output driver

		 This  driver  is not very useful. Playing multi-channel audio
		 with it is slow.

       pulse  PulseAudio audio output driver

	      The following global options are supported by this audio output:

	      --pulse-host=<host>, --pulse-sink=<sink>
		     Specify the host and optionally output sink  to  use.  An
		     empty  <host> string uses a local connection, "localhost"
		     uses network transfer (most likely	not  what  you	want).
		     Deprecated, use --audio-device.

		     Set the audio buffer size in milliseconds.	A higher value
		     buffers more data,	and has	a lower	probability of	buffer
		     underruns.	 A  smaller value makes	the audio stream react
		     faster, e.g. to playback speed changes. Default: 250.

		     Enable hacks to workaround	PulseAudio  timing  bugs  (de-
		     fault:  no).  If  enabled,	 mpv will do elaborate latency
		     calculations  on  its  own.  If  disabled,	 it  will  use
		     PulseAudio	automatically updated timing information. Dis-
		     abling this might help with e.g. networked	audio or  some
		     plugins,  while  enabling	it  might help in some unknown
		     situations	(it used to be required	to get	good  behavior
		     on	old PulseAudio versions).

		     If	you have stuttering video when using pulse, try	to en-
		     able this option. (Or try to update PulseAudio.)

       sdl    SDL 1.2+ audio output driver. Should work	on any	platform  sup-
	      ported  by SDL 1.2, but may require the SDL_AUDIODRIVER environ-
	      ment variable to be set appropriately for	your system.

		 This driver is	for compatibility with extremely foreign envi-
		 ronments, such	as systems where none of the other drivers are

	      The following global options are supported by this audio output:

		     Sets the audio buffer length in seconds. Is used only  as
		     a	hint  by the sound system. Playing a file with -v will
		     show the requested	and  obtained  exact  buffer  size.  A
		     value of 0	selects	the sound system default.

		     Sets  the	number	of extra audio buffers in mpv. Usually
		     needs not be changed.

       null   Produces no audio	output but maintains video playback speed. You
	      can use --ao=null	--ao-null-untimed for benchmarking.

	      The following global options are supported by this audio output:

		     Do	 not  simulate	timing of a perfect audio device. This
		     means audio decoding will go as fast as possible, instead
		     of	timing it to the system	clock.

		     Simulated buffer length in	seconds.

		     Simulated chunk size in samples.

		     Simulated	audio playback speed as	a multiplier. Usually,
		     a real audio device will not go exactly as	 fast  as  the
		     system clock. It will deviate just	a little, and this op-
		     tion helps	to simulate this.

		     Simulated device latency. This is additional to EOF.

		     Simulate broken audio drivers, which always add the fixed
		     device latency to the reported audio playback position.

		     Simulate broken audio drivers, which don't	report latency

		     If	not empty, this	is a , separated list of channel  lay-
		     outs the AO allows. This can be used to test channel lay-
		     out selection.

       pcm    Raw PCM/WAVE file	writer audio output

	      The following global options are supported by this audio output:

		     Include or	do not include the WAVE	header	(default:  in-
		     cluded). When not included, raw PCM will be generated.

		     Write  the	sound to <filename> instead of the default au-
		     diodump.wav. If no-waveheader is specified,  the  default
		     is	audiodump.pcm.

		     Append to the file, instead of overwriting	it. Always use
		     this with the no-waveheader option	- with waveheader it's
		     broken,  because  it  will	write a	WAVE header every time
		     the file is opened.

       rsound Audio output to an RSound	daemon

		 Completely useless, unless you	intend to run RSound.  Not  to
		 be  confused  with  RoarAudio,	 which is something completely

	      The following global options are supported by this audio output:

		     Set the address of	the server (default: localhost).   Can
		     be	 either	 a  network  hostname for TCP connections or a
		     Unix domain socket	path starting with '/'.

		     Set the TCP port used for connecting to the  server  (de-
		     fault:  12345).   Not used	if connecting to a Unix	domain

	      These options are	deprecated.  If	 anyone	 cares	enough,	 their
	      functionality can	be added back using --audio-device.

       sndio  Audio output to the OpenBSD sndio	sound system

		 Experimental. There are known bugs and	issues.

	      (Note: only supports mono, stereo, 4.0, 5.1 and 7.1 channel lay-

	      The following global options are supported by this audio output:

		     sndio device to use (default: $AUDIODEVICE, resp.	snd0).
		     Deprecated, use --audio-device.

       wasapi Audio output to the Windows Audio	Session	API.

	      The following global options are supported by this audio output:

		     Deprecated,  use  --audio-exclusive.  Requests exclusive,
		     direct hardware  access.  By  definition  prevents	 sound
		     playback of any other program until mpv exits.

		     Deprecated, use --audio-device.

		     Uses  the	requested endpoint instead of the system's de-
		     fault audio endpoint. Both	an ordinal number  (0,1,2,...)
		     and the GUID String are valid; the	GUID string is guaran-
		     teed to not change	unless the driver is uninstalled.

		     Also supports searching active devices by	human-readable
		     name.  If	more than one device matches the name, refuses
		     loading it.

       Video output drivers are	interfaces to different	video  output  facili-
       ties. The syntax	is:

	      Specify a	priority list of video output drivers to be used.

       If  the	list  has a trailing ,,	mpv will fall back on drivers not con-
       tained in the list.

	  See --vo=help	for a list of compiled-in video	output drivers.

	  The recommended output driver	is --vo=opengl,	which is the  default.
	  All  other drivers are for compatibility or special purposes.	If the
	  default does not work, it will fallback to  other  drivers  (in  the
	  same order as	listed by --vo=help).

       Available video output drivers are:

       xv (X11 only)
	      Uses  the	 XVideo	 extension to enable hardware-accelerated dis-
	      play. This is the	most compatible	VO on X, but may be  low-qual-
	      ity, and has issues with OSD and subtitle	display.

		 This driver is	for compatibility with old systems.

	      The following global options are supported by this video output:

		     Select a specific XVideo adapter (check xvinfo results).

		     Select a specific XVideo port.

		     Select  the source	from which the color key is taken (de-
		     fault: cur).

		     cur    The	default	takes the color	key currently  set  in

		     use    Use	but do not set the color key from mpv (use the
			    --colorkey option to change	it).

		     set    Same as use	but also sets the supplied color key.

		     Sets the color key	drawing	method (default: man).

		     none   Disables color-keying.

		     man    Draw the color key manually	 (reduces  flicker  in
			    some cases).

		     bg	    Set	the color key as window	background.

		     auto   Let	Xv draw	the color key.

		     Changes  the  color  key  to an RGB value of your choice.
		     0x000000 is black and 0xffffff is white.

		     Number of image buffers to	use  for  the  internal	 ring-
		     buffer  (default: 2).  Increasing this will use more mem-
		     ory, but might help with  the  X  server  not  responding
		     quickly  enough  if  video	FPS is close to	or higher than
		     the display refresh rate.

       x11 (X11	only)
	      Shared memory video output driver	without	hardware  acceleration
	      that works whenever X11 is present.

		 This is a fallback only, and should not be normally used.

       vdpau (X11 only)
	      Uses  the	 VDPAU interface to display and	optionally also	decode
	      video.  Hardware decoding	is used	with --hwdec=vdpau.

		 Earlier versions of  mpv  (and	 MPlayer,  mplayer2)  provided
		 sub-options   to  tune	 vdpau	post-processing,  like	deint,
		 sharpen,  denoise,  chroma-deint,  pullup,  hqscaling.	 These
		 sub-options  are  deprecated,	and you	should use the vdpaupp
		 video filter instead.

	      The following global options are supported by this video output:

		     (Deprecated. See note about vdpaupp.)

		     For positive values, apply	a sharpening algorithm to  the
		     video, for	negative values	a blurring algorithm (default:

		     (Deprecated. See note about vdpaupp.)

		     Apply a noise reduction algorithm to the video  (default:
		     0;	no noise reduction).

		     (Deprecated. See note about vdpaupp.)

		     Select deinterlacing mode (default: 0). In	older versions
		     (as well as MPlayer/mplayer2) you could use  this	option
		     to	 enable	deinterlacing.	This doesn't work anymore, and
		     deinterlacing is enabled with either the d	 key  (by  de-
		     fault  mapped  to	the command cycle deinterlace),	or the
		     --deinterlace option. Also, to select the	default	 deint
		     mode,  you	 should	 use  something	like --vf-defaults=vd-
		     paupp:deint-mode=temporal instead of this sub-option.

		     0	    Pick the vdpaupp video filter default, which  cor-
			    responds to	3.

		     1	    Show only first field.

		     2	    Bob	deinterlacing.

		     3	    Motion-adaptive  temporal  deinterlacing. May lead
			    to A/V desync with slow video hardware and/or high

		     4	    Motion-adaptive    temporal	  deinterlacing	  with
			    edge-guided	 spatial  interpolation.  Needs	  fast
			    video hardware.

		     (Deprecated. See note about vdpaupp.)

		     Makes  temporal  deinterlacers  operate  both on luma and
		     chroma (default).	Use no-chroma-deint to solely use luma
		     and  speed	 up  advanced  deinterlacing. Useful with slow
		     video memory.

		     (Deprecated. See note about vdpaupp.)

		     Try to apply inverse telecine, needs motion adaptive tem-
		     poral deinterlacing.

		     (Deprecated. See note about vdpaupp.)

		     0	    Use	default	VDPAU scaling (default).

		     1-9    Apply  high	 quality  VDPAU	scaling	(needs capable

		     Override autodetected display  refresh  rate  value  (the
		     value  is	needed	for  framedrop to allow	video playback
		     rates  higher  than  display  refresh   rate,   and   for
		     vsync-aware  frame	 timing	 adjustments). Default 0 means
		     use autodetected value. A positive	value  is  interpreted
		     as	 a  refresh  rate in Hz	and overrides the autodetected
		     value. A negative value disables  all  timing  adjustment
		     and framedrop logic.

		     NVIDIA's  current	VDPAU  implementation behaves somewhat
		     differently under a compositing window manager  and  does
		     not give accurate frame timing information. With this op-
		     tion enabled, the player tries to detect whether  a  com-
		     positing  window  manager	is active. If one is detected,
		     the player	disables timing	adjustments as if the user had
		     specified fps=-1 (as they would be	based on incorrect in-
		     put). This	means timing is	somewhat  less	accurate  than
		     without  compositing, but with the	composited mode	behav-
		     ior of the	NVIDIA driver, there is	no hard	playback speed
		     limit  even  without  the	disabled logic.	Enabled	by de-
		     fault, use	--vo-vdpau-composite-detect=no to disable.

	      --vo-vdpau-queuetime-windowed=<number> and queuetime-fs=<number>
		     Use VDPAU's presentation queue functionality to queue fu-
		     ture  video  frame	changes	at most	this many milliseconds
		     in	advance	(default: 50).	See below for  additional  in-

		     Allocate  this  many  output  surfaces  to	 display video
		     frames (default: 3). See below  for  additional  informa-

		     Set  the VDPAU presentation queue background color, which
		     in	practice is the	colorkey used  if  VDPAU  operates  in
		     overlay  mode (default: #020507, some shade of black). If
		     the alpha component of this value is 0, the default VDPAU
		     colorkey will be used instead (which is usually green).

		     Never  accept  RGBA  input.  This means mpv will insert a
		     filter to convert to a YUV	format before  the  VO.	 Some-
		     times  useful  to	force availability of certain YUV-only
		     features, like video equalizer or deinterlacing.

	      Using the	VDPAU frame queuing functionality  controlled  by  the
	      queuetime	 options  makes	mpv's frame flip timing	less sensitive
	      to system	CPU load and allows mpv	to  start  decoding  the  next
	      frame(s) slightly	earlier, which can reduce jitter caused	by in-
	      dividual slow-to-decode frames.  However,	 the  NVIDIA  graphics
	      drivers  can  make  other	 window	 behavior such as window moves
	      choppy if	VDPAU is using the blit	queue (mainly happens  if  you
	      have  the	 composite  extension enabled) and this	feature	is ac-
	      tive. If this happens on your system and it bothers you then you
	      can  set	the  queuetime value to	0 to disable this feature. The
	      settings to use in windowed and fullscreen mode are separate be-
	      cause  there  should be no reason	to disable this	for fullscreen
	      mode (as the driver issue	should not affect the video itself).

	      You can queue more frames	ahead by increasing the	queuetime val-
	      ues  and the output_surfaces count (to ensure enough surfaces to
	      buffer video for a certain time ahead you	need at	least as  many
	      surfaces	as  the	 video has frames during that time, plus two).
	      This could help make video smoother  in  some  cases.  The  main
	      downsides	 are increased video RAM requirements for the surfaces
	      and laggier display response to user commands  (display  changes
	      only  become visible some	time after they're queued). The	graph-
	      ics driver implementation	may also have limits on	the length  of
	      maximum queuing time or number of	queued surfaces	that work well
	      or at all.

       direct3d	(Windows only)
	      Video output driver that uses the	Direct3D interface.

		 This driver is	for compatibility with systems that don't pro-
		 vide  proper OpenGL drivers, and where	ANGLE does not perform

		 Before	to 0.21.0, direct3d_shaders and	direct3d were  differ-
		 ent,  with direct3d not using shader by default. Now both use
		 shaders by default,  and  direct3d_shaders  is	 a  deprecated
		 alias.	  Use	the  --vo-direct3d-prefer-stretchrect  or  the
		 --vo-direct3d-disable-shaders options to get the old behavior
		 of direct3d.

	      The following global options are supported by this video output:

		     Use  IDirect3DDevice9::StretchRect	 over other methods if

		     Never    render	the    video	using	  IDirect3DDe-

		     Never  render the video using D3D texture rendering. Ren-
		     dering with textures + shader will	still be allowed.  Add
		     disable-shaders  to  completely  disable  video rendering
		     with textures.

		     Never use shaders when rendering video.

		     Never render YUV video with more than 8 bits  per	compo-
		     nent.   Using this	flag will force	software conversion to

		     Normally texture sizes are	always	aligned	 to  16.  With
		     this  option  enabled, the	video texture will always have
		     exactly the same size as the video	itself.

	      Debug options. These might be incorrect, might be	removed	in the
	      future,  might  crash,  might cause slow downs, etc. Contact the
	      developers if you	actually need any of these for performance  or
	      proper operation.

		     Always  force  textures to	power of 2, even if the	device
		     reports non-power-of-2 texture sizes as supported.

		     Only affects operation  with  shaders/texturing  enabled,
		     and (E)OSD.  Possible values:

		     default (default)
			    ture for locking. If the driver  supports  D3DDEV-
			    used directly.

			    Use	D3DPOOL_DEFAULT. (Like default,	but never  use
			    a shadow-texture.)

			    ture for locking. (Like default, but always	 force
			    the	shadow-texture.)


			    ture for locking.

		     Use D3DSWAPEFFECT_DISCARD,	which might be faster.	 Might
		     be	slower too, as it must(?) clear	every frame.

		     Always resize the backbuffer to window size.

       opengl OpenGL  video  output driver. It supports	extended scaling meth-
	      ods, dithering and color management.

	      See OpenGL renderer options for options specific to this VO.

	      By default, it tries to use fast and fail-safe settings. Use the
	      opengl-hq	 profile  to use this driver with defaults set to high
	      quality rendering. (This profile is  also	 the  replacement  for
	      --vo=opengl-hq.)	 The   profile	can  be	 applied  with	--pro-
	      file=opengl-hq and its contents can be viewed  with  --show-pro-

	      Requires at least	OpenGL 2.1.

	      Some features are	available with OpenGL 3	capable	graphics driv-
	      ers only (or if the necessary extensions are available).

	      OpenGL ES	2.0 and	3.0 are	supported as well.

	      Hardware decoding	over OpenGL-interop is supported to  some  de-
	      gree.  Note  that	 in  this  mode, some corner case might	not be
	      gracefully handled, and color space conversion and chroma	upsam-
	      pling is generally in the	hand of	the hardware decoder APIs.

	      opengl  makes  use of FBOs by default. Sometimes you can achieve
	      better quality or	performance by changing	the  --opengl-fbo-for-
	      mat  option  to  rgb16f,	rgb32f	or rgb.	Known problems include
	      Mesa/Intel not accepting rgb16, Mesa sometimes  not  being  com-
	      piled  with  float  texture  support, and	some OS	X setups being
	      very slow	with rgb16 but fast with rgb32f. If you	have problems,
	      you can also try enabling	the --opengl-dumb-mode=yes option.

       sdl    SDL 2.0+ Render video output driver, depending on	system with or
	      without hardware acceleration. Should work on all	platforms sup-
	      ported  by  SDL 2.0.  For	tuning,	refer to your copy of the file

		 This driver is	for compatibility with systems that don't pro-
		 vide proper graphics drivers, or which	support	GLES only.

	      The following global options are supported by this video output:

		     Continue even if a	software renderer is detected.

		     Instruct  SDL to switch the monitor video mode when going

       vaapi  Intel VA API video output	driver with support for	 hardware  de-
	      coding.  Note  that  there  is absolutely	no reason to use this,
	      other than compatibility.	 This is low quality, and  has	issues
	      with OSD.

		 This driver is	for compatibility with crappy systems. You can
		 use vaapi hardware decoding with --vo=opengl too.

	      The following global options are supported by this video output:


			    Driver default (mpv	default	as well).

		     fast   Fast, but low quality.

		     hq	    Unspecified	driver dependent high-quality scaling,

		     nla    non-linear anamorphic scaling

		     Select  deinterlacing  algorithm.	Note  that  by default
		     deinterlacing is initially	always off, and	 needs	to  be
		     enabled  with  the	 d  key	(default key binding for cycle

		     This option doesn't apply if libva	 supports  video  post
		     processing	  (vpp).    In	this  case,  the  default  for
		     deint-mode	is no, and enabling deinterlacing via user in-
		     teraction	using the methods mentioned above actually in-
		     serts the vavpp video filter. If vpp is not actually sup-
		     ported  with  the	libva backend in use, you can use this
		     option to forcibly	enable VO based	deinterlacing.

		     no	    Don't  allow  deinterlacing	 (default  for	 newer

			    Show  only	first  field  (going  by --field-domi-

		     bob    bob	deinterlacing (default for older libva).

		     If	enabled, then the OSD is rendered at video  resolution
		     and  scaled  to  display  resolution. By default, this is
		     disabled, and the OSD is rendered at  display  resolution
		     if	the driver supports it.

       null   Produces no video	output.	Useful for benchmarking.

	      Usually, it's better to disable video with --no-video instead.

	      The following global options are supported by this video output:

		     Simulate  display	FPS. This artificially limits how many
		     frames the	VO accepts per second.

       caca   Color ASCII art video output driver that works on	 a  text  con-

		 This driver is	a joke.

       tct    Color  Unicode art video output driver that works	on a text con-
	      sole.  Depends on	support	of true	color by modern	 terminals  to
	      display  the  images at full color range.	On Windows it requires
	      an ansi terminal such as mintty.

		     Select how	to write the pixels to the terminal.

			    Uses unicode LOWER HALF BLOCK character to achieve
			    higher vertical resolution.	(Default.)

		     plain  Uses  spaces.  Causes  vertical resolution to drop
			    twofolds, but in theory works in more places.

	      --vo-tct-width=<width> --vo-tct-height=<height>
		     Assume the	terminal has  the  specified  character	 width
		     and/or  height.   These  default to 80x25 if the terminal
		     size cannot be determined.

	      --vo-tct-256=<yes|no> (default: no)
		     Use 256 colors - for terminals which don't	 support  true

       image  Output  each  frame into an image	file in	the current directory.
	      Each file	takes the frame	number padded with  leading  zeros  as

	      The following global options are supported by this video output:

		     Select the	image file format.

		     jpg    JPEG files,	extension .jpg.	(Default.)

		     jpeg   JPEG files,	extension .jpeg.

		     png    PNG	files.

		     PNG  compression  factor  (speed  vs. file	size tradeoff)
		     (default: 7)

		     Filter applied prior to PNG compression (0	=  none;  1  =
		     sub; 2 = up; 3 = average; 4 = Paeth; 5 = mixed) (default:

		     JPEG quality factor (default: 90)

		     Specify standard or progressive JPEG (default: no).

		     Specify use of JPEG baseline or not (default: yes).

		     JPEG optimization factor (default:	100)

		     smooth factor (default: 0)

		     JPEG DPI (default:	72)

		     Specify the directory to save the	image  files  to  (de-
		     fault: ./).

       wayland (Wayland	only)
	      Wayland shared memory video output as fallback for opengl.

		 This driver is	for compatibility with systems that don't pro-
		 vide working OpenGL drivers.

	      The following global options are supported by this video output:

		     Use a buffer format that supports videos and images  with
		     alpha information

		     Use  RGB565  as buffer format. This format	is implemented
		     on	most platforms,	especially on embedded where it	is far
		     more efficient then RGB8888.

		     Use  3  buffers instead of	2. This	can lead to more fluid
		     playback, but uses	more memory.

	      For use with libmpv direct  OpenGL  embedding;  useless  in  any
	      other contexts.  (See <mpv/opengl_cb.h>.)

	      This also	supports many of the options the opengl	VO has.

       rpi (Raspberry Pi)
	      Native video output on the Raspberry Pi using the	MMAL API.

	      This  is	deprecated.  Use --vo=opengl instead, which is the de-
	      fault and	provides the same functionality. The rpi  VO  will  be
	      removed  in  mpv	0.23.0.	 Its  functionality  was  folded  into
	      --vo=opengl, which now uses RPI hardware decoding	by treating it
	      as  a  hardware overlay (without applying	GL filtering). Also to
	      be changed in 0.23.0: the	--fs flag will be reset	to "no"	by de-
	      fault (like on the other platforms).

	      The  following  deprecated  global options are supported by this
	      video output:

		     Select the	display	number	on  which  the	video  overlay
		     should be shown (default: 0).

		     Select  the  dispmanx  layer  on  which the video overlay
		     should be shown (default: -10). Note that mpv  will  also
		     use  the 2	layers above the selected layer, to handle the
		     window background and OSD.	Actual	video  rendering  will
		     happen on the layer above the selected layer.

		     Whether  to  render  a  black background behind the video
		     (default: no).  Normally it's better to kill the  console
		     framebuffer instead, which	gives better performance.

		     Enabled  by default. If disabled with no, no OSD layer is
		     created.  This also means there will be no	subtitles ren-

       drm (Direct Rendering Manager)
	      Video output driver using	Kernel Mode Setting / Direct Rendering
	      Manager.	Should be  used	 when  one  doesn't  want  to  install
	      full-blown  graphical  environment (e.g. no X). Does not support
	      hardware acceleration (if	you need this, check the  drm  backend
	      for opengl VO).

	      The following global options are supported by this video output:

		     Select  the connector to use (usually this	is a monitor.)
		     If	<name> is empty	or auto, mpv renders the output	on the
		     first  available  connector.  Use --drm-connector=help to
		     get list of available  connectors.	 When  using  multiple
		     graphic  cards,  use  the <gpu_number> argument to	disam-
		     biguate.  (default: empty)

		     Mode ID to	use (resolution, bit depth  and	 frame	rate).
		     (default: 0)

       Audio  filters allow you	to modify the audio stream and its properties.
       The syntax is:

	      Setup a chain of audio filters. See --vf for the syntax.

	  To get a full	list of	available audio	filters, see --af=help.

	  Also,	keep in	mind that most actual filters are  available  via  the
	  lavfi	 wrapper, which	gives you access to most of libavfilter's fil-
	  ters.	This includes all filters that have been ported	 from  MPlayer
	  to libavfilter.

       See  --vf  group	 of  options  for info on how --af-defaults, --af-add,
       --af-pre, --af-del, --af-clr, and possibly others work.

       Available filters are:

	      This filter uses libavresample (or libswresample,	 depending  on
	      the build) to change sample rate,	sample format, or channel lay-
	      out of the audio stream.	This filter is	automatically  enabled
	      if  the audio output does	not support the	audio configuration of
	      the file being played.

	      It supports only the following sample  formats:  u8,  s16,  s32,

		     Length  of	 the filter with respect to the	lower sampling
		     rate. (default: 16)

		     Log2 of the number	of polyphase entries. (...,  10->1024,
		     11->2048, 12->4096, ...) (default:	10->1024)

		     Cutoff  frequency	(0.0-1.0),  default set	depending upon
		     filter length.

	      linear If	set then filters will be linearly interpolated between
		     polyphase entries.	(default: no)

		     Do	not detach if input and	output audio format/rate/chan-
		     nels match.  (If you just want to set defaults  for  this
		     filter  that  will	be used	even by	automatically inserted
		     lavrresample instances, you should	 prefer	 setting  them
		     with --af-defaults=lavrresample:....)

		     Whether  to  normalize when remixing channel layouts (de-
		     fault: auto).  auto uses the value	set by --audio-normal-

		     Set  AVOptions  on	 the SwrContext	or AVAudioResampleCon-
		     text. These should	be documented by FFmpeg	or Libav.

	      Encode multi-channel audio to AC-3 at runtime using  libavcodec.
	      Supports	16-bit native-endian input format, maximum 6 channels.
	      The output is big-endian when outputting a raw AC-3 stream,  na-
	      tive-endian  when	outputting to S/PDIF. If the input sample rate
	      is not 48	kHz, 44.1 kHz or 32 kHz, it will be  resampled	to  48

		     Output  raw  AC-3	stream	if  no,	 output	 to S/PDIF for
		     pass-through if yes (default).

		     The bitrate use for the AC-3 stream. Set it to 384	to get
		     384 kbps.

		     The  default  is 640. Some	receivers might	not be able to
		     handle this.

		     Valid values: 32, 40, 48, 56, 64, 80, 96, 112, 128,  160,
		     192, 224, 256, 320, 384, 448, 512,	576, 640.

		     The special value auto selects a default bitrate based on
		     the input channel number:

		     1ch    96

		     2ch    192

		     3ch    224

		     4ch    384

		     5ch    448

		     6ch    448

		     If	the input channel number is  less  than	 <minch>,  the
		     filter will detach	itself (default: 3).

		     Select  the  libavcodec  encoder  used.  Currently,  this
		     should be an AC-3 encoder,	and using another  codec  will
		     fail horribly.

	      10  octave  band	graphic	 equalizer,  implemented  using	10 IIR
	      band-pass	filters. This means that it works regardless  of  what
	      type  of	audio is being played back. The	center frequencies for
	      the 10 bands are:

				     |No. | frequency  |
				     |0	  | 31.25  Hz  |
				     |1	  | 62.50  Hz  |
				     |2	  | 125.00  Hz |
				     |3	  | 250.00  Hz |
				     |4	  | 500.00  Hz |
				     |5	  | 1.00 kHz   |
				     |6	  | 2.00 kHz   |
				     |7	  | 4.00 kHz   |
				     |8	  | 8.00 kHz   |
				     |9	  | 16.00 kHz  |

	      If the sample rate of the	sound being played is lower  than  the
	      center  frequency	 for  a	frequency band,	then that band will be
	      disabled.	A known	bug with this filter is	that the  characteris-
	      tics  for	the uppermost band are not completely symmetric	if the
	      sample rate is close to the center frequency of that band.  This
	      problem can be worked around by upsampling the sound using a re-
	      sampling filter before it	reaches	this filter.

		     floating point numbers representing the gain  in  dB  for
		     each frequency band (-12-12)


		 mpv --af=equalizer=11:11:10:5:0:-12:0:5:12:12 media.avi
			Would  amplify	the  sound in the upper	and lower fre-
			quency region while  canceling	it  almost  completely
			around 1 kHz.

	      Can  be  used  for  adding,  removing, routing and copying audio
	      channels.	If only	<nch> is given,	the default routing  is	 used.
	      It works as follows: If the number of output channels is greater
	      than the number of input channels, empty channels	 are  inserted
	      (except  when  mixing from mono to stereo; then the mono channel
	      is duplicated). If the number of output channels	is  less  than
	      the  number  of input channels, the exceeding channels are trun-

	      <nch>  number of output channels (1-8)

		     List   of	 ,   separated	  routes,    in	   the	  form
		     from1-to1,from2-to2,....	Each  pair  defines  where  to
		     route each	channel. There can be at most 8	routes.	 With-
		     out  this	argument, the default routing is used. Since ,
		     is	also used to separate filters, you must	quote this ar-
		     gument with [...] or similar.


		 mpv --af=channels=4:[0-1,1-0,2-2,3-3] media.avi
			Would  change the number of channels to	4 and set up 4
			routes that swap channel 0 and	channel	 1  and	 leave
			channel	 2  and	 3 intact.  Observe that if media con-
			taining	two channels were played back, channels	2  and
			3  would  contain  silence  but	0 and 1	would still be

		 mpv --af=channels=6:[0-0,0-1,0-2,0-3] media.avi
			Would change the number	of channels to 6 and set up  4
			routes that copy channel 0 to channels 0 to 3. Channel
			4 and 5	will contain silence.

		 You should probably not use  this  filter.  If	 you  want  to
		 change	 the  output  channel  layout,	try the	format filter,
		 which can make	mpv automatically  up-	and  downmix  standard
		 channel layouts.

	      Does  not	 do any	format conversion itself. Rather, it may cause
	      the filter system	to insert necessary conversion filters	before
	      or  after	this filter if needed. It is primarily useful for con-
	      trolling the audio format	going into other filters.  To  specify
	      the  format  for	audio output, see --audio-format, --audio-sam-
	      plerate, and --audio-channels. This filter is able  to  force  a
	      particular format, whereas --audio-* may be overridden by	the ao
	      based on output compatibility.

	      All parameters are optional. The	first  3  parameters  restrict
	      what the filter accepts as input.	They will therefore cause con-
	      version filters to be inserted before this one.  The out-	param-
	      eters  tell  the	filters	or audio outputs following this	filter
	      how to interpret the data	without	actually doing	a  conversion.
	      Setting  these will probably just	break things unless you	really
	      know you want this for some reason, such as testing  or  dealing
	      with broken media.

		     Force  conversion	to  this  format. Use --af=format=for-
		     mat=help to get a list of valid formats.

		     Force conversion to a specific sample rate. The  rate  is
		     an	integer, 48000 for example.

		     Force  mixing  to	a  specific  channel layout. See --au-
		     dio-channels option for possible values.




	      NOTE: this filter	used to	be named force.	The old	format	filter
	      used  to	do  conversion	itself,	unlike this one	which lets the
	      filter system handle the conversion.

	      Implements software volume control. Use this filter with caution
	      since  it	 can reduce the	signal to noise	ratio of the sound. In
	      most cases it is best to use the Master volume control  of  your
	      sound card or the	volume knob on your amplifier.

	      NOTE: This filter	is not reentrant and can therefore only	be en-
	      abled once for every audio stream.

		     Sets the desired gain in  dB  for	all  channels  in  the
		     stream  from  -200	 dB to +60 dB, where -200 dB mutes the
		     sound completely and +60 dB equals	a gain	of  1000  (de-
		     fault: 0).

		     Adjust volume gain	according to the track-gain replaygain
		     value stored in the file metadata.

		     Like replaygain-track, but	using the album-gain value in-

		     Pre-amplification gain in dB to apply to the selected re-
		     playgain gain (default: 0).

		     Prevent clipping caused by	 replaygain  by	 automatically
		     lowering  the  gain  (default). Use replaygain-clip=no to
		     disable this.

		     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.

		     Turns  soft clipping on. Soft-clipping can	make the sound
		     more smooth if very high volume levels are	 used.	Enable
		     this  option  if the dynamic range	of the loudspeakers is
		     very low.

		     WARNING: This feature creates distortion  and  should  be
		     considered	a last resort.

	      s16    Force  S16	sample format if set. Lower quality, but might
		     be	faster in some situations.

	      detach Remove the	filter if the volume is	not changed  at	 audio
		     filter  config  time. Useful with replaygain: if the cur-
		     rent file has no replaygain tags, then the	filter will be
		     removed  if this option is	enabled.  (If --softvol=yes is
		     used and the player volume	controls are used during play-
		     back, a different volume filter will be inserted.)


		 mpv --af=volume=10.1 media.avi
			Would  amplify	the  sound by 10.1 dB and hard-clip if
			the sound level	is too high.

	      Mixes channels arbitrarily. Basically a combination of the  vol-
	      ume  and	the  channels filter that can be used to down-mix many
	      channels to only a few, e.g. stereo to mono, or vary the "width"
	      of the center speaker in a surround sound	system.	This filter is
	      hard to use, and will require some tinkering before the  desired
	      result  is  obtained.  The number	of options for this filter de-
	      pends on the number of output channels. An example how to	 down-
	      mix  a  six-channel file to two channels with this filter	can be
	      found in the examples section near the end.

	      <n>    Number of output channels (1-8).

		     A		    list	       of		values
		     [L00,L01,L02,...,L10,L11,L12,...,Ln0,Ln1,Ln2,...],	 where
		     each element Lij means how	much of	 input	channel	 i  is
		     mixed  into output	channel	j (range 0-1). So in principle
		     you first have n numbers saying what to do	with the first
		     input  channel, then n numbers that act on	the second in-
		     put channel etc. If you do	not specify  any  numbers  for
		     some  input channels, 0 is	assumed.  Note that the	values
		     are separated by ,, which is already used by  the	option
		     parser  to	 separate  filters. This is why	you must quote
		     the value list with [...] or similar.


		 mpv --af=pan=1:[0.5,0.5] media.avi
			Would downmix from stereo to mono.

		 mpv --af=pan=3:[1,0,0.5,0,1,0.5] media.avi
			Would give 3 channel output leaving channels 0	and  1
			intact,	and mix	channels 0 and 1 into output channel 2
			(which could be	sent to	a subwoofer for	example).

		 If you	just want to force remixing to a certain output	 chan-
		 nel  layout, it is easier to use the format filter. For exam-
		 ple,  mpv  '--af=format=channels=5.1'	'--audio-channels=5.1'
		 would	always	force remixing audio to	5.1 and	output it like

	      This filter supports the following af-command commands:

		     Set the <matrix> argument dynamically. This can  be  used
		     to	 change	 the  mixing matrix at runtime,	without	reini-
		     tializing the entire filter chain.

	      Scales audio tempo without altering pitch, optionally synced  to
	      playback speed (default).

	      This  works by playing 'stride' ms of audio at normal speed then
	      consuming	'stride*scale'	ms  of	input  audio.  It  pieces  the
	      strides  together	 by  blending  'overlap'% of stride with audio
	      following	the previous stride. It	optionally  performs  a	 short
	      statistical  analysis on the next	'search' ms of audio to	deter-
	      mine the best overlap position.

		     Nominal amount to scale tempo. Scales this	amount in  ad-
		     dition to speed. (default:	1.0)

		     Length in milliseconds to output each stride. Too high of
		     a value will cause	noticeable skips at high scale amounts
		     and  an  echo  at low scale amounts. Very low values will
		     alter pitch. Increasing improves  performance.  (default:

		     Percentage	of stride to overlap. Decreasing improves per-
		     formance.	(default: .20)

		     Length in milliseconds to search for best	overlap	 posi-
		     tion.  Decreasing	improves  performance greatly. On slow
		     systems, you will probably	want to	 set  this  very  low.
		     (default: 14)

		     Set response to speed change.

		     tempo  Scale tempo	in sync	with speed (default).

		     pitch  Reverses  effect  of  filter. Scales pitch without
			    altering tempo.  Add this to  your	input.conf  to
			    step by musical semi-tones:

			       [ multiply speed	0.9438743126816935
			       ] multiply speed	1.059463094352953

			       Loses sync with video.

		     both   Scale both tempo and pitch.

		     none   Ignore speed changes.


		 mpv --af=scaletempo --speed=1.2 media.ogg
			Would  play  media at 1.2x normal speed, with audio at
			normal pitch. Changing playback	speed would change au-
			dio tempo to match.

		 mpv   --af=scaletempo=scale=1.2:speed=none   --speed=1.2  me-
			Would play media at 1.2x normal	speed, with  audio  at
			normal	pitch,	but changing playback speed would have
			no effect on audio tempo.

		 mpv --af=scaletempo=stride=30:overlap=.50:search=10 media.ogg
			Would tweak the	quality	and performance	parameters.

		 mpv --af=scaletempo=scale=1.2:speed=pitch audio.ogg
			Would play media at 1.2x normal	speed, with  audio  at
			normal	pitch.	 Changing  playback speed would	change
			pitch, leaving audio tempo at 1.2x.

	      High quality pitch correction with librubberband.	 This  can  be
	      used  in	place  of scaletempo, and will be used to adjust audio
	      pitch when playing at speed different from normal. It  can  also
	      be used to adjust	audio pitch without changing playback speed.

		     Sets the pitch scaling factor. Frequencies	are multiplied
		     by	this value.

	      This filter has a	number of additional sub-options. You can list
	      them  with mpv --af=rubberband=help. This	will also show the de-
	      fault values for each option. The	 options  are  not  documented
	      here,  because  they are merely passed to	librubberband. Look at
	      the librubberband	documentation to learn what each option	 does:
	      (The mapping of the mpv rubberband filter	sub-option  names  and
	      values  to those of librubberband	follows	a simple pattern: "Op-
	      tion" + Name + Value.)

	      This filter supports the following af-command commands:

		     Set the <pitch-scale> argument dynamically. This  can  be
		     used  to  change the playback pitch at runtime. Note that
		     speed is controlled using the  standard  speed  property,
		     not af-command.

	      Filter audio using FFmpeg's libavfilter.

		     Libavfilter  graph.  See lavfi video filter for details -
		     the graph syntax is the same.

			Don't forget to	quote libavfilter graphs as  described
			in the lavfi video filter section.


       Video  filters allow you	to modify the video stream and its properties.
       The syntax is:

	      Setup a chain of video filters.  This  consists  on  the	filter
	      name,  and  an option list of parameters after =.	The parameters
	      are separated by : (not ,, as that starts	a new filter entry).

	      Before the filter	name, a	label can be  specified	 with  @name:,
	      where name is an arbitrary user-given name, which	identifies the
	      filter. This is only needed if you want to toggle	the filter  at

	      A	 !  before  the	filter name means the filter is	enabled	by de-
	      fault. It	will be	skipped	on filter creation. This is also  use-
	      ful for runtime filter toggling.

	      See the vf command (and toggle sub-command) for further explana-
	      tions and	examples.

	      The general filter entry syntax is:
		 ["@"<label-name>":"] ["!"] <filter-name> [ "="	<filter-param-
		 eter-list> ]

	      or for the special "toggle" syntax (see vf command):

	      and the filter-parameter-list:
		 <filter-parameter>  |	<filter-parameter> "," <filter-parame-

	      and filter-parameter:
		 ( <param-name>	"=" <param-value> ) | <param-value>

	      param-value can further be quoted	in [ / ]  in  case  the	 value
	      contains characters like , or =. This is used in particular with
	      the lavfi	filter,	which  uses  a	very  similar  syntax  as  mpv
	      (MPlayer historically) to	specify	filters	and their parameters.

       You can also set	defaults for each filter. The defaults are applied be-
       fore the	normal filter parameters.

	      Set defaults for each filter.

	  To get a full	list of	available video	filters, see --vf=help.

	  Also,	keep in	mind that most actual filters are  available  via  the
	  lavfi	 wrapper, which	gives you access to most of libavfilter's fil-
	  ters.	This includes all filters that have been ported	 from  MPlayer
	  to libavfilter.

	  Most filters are deprecated in some ways, unless they're only	avail-
	  able in mpv (such as filters which deal with mpv specifics, or which
	  are implemented in mpv only).

	  If  a	 filter	is not builtin,	the lavfi-bridge will be automatically
	  tried. This bridge does not support help output, and does not	verify
	  parameters before the	filter is actually used. Although the mpv syn-
	  tax is rather	similar	to libavfilter's, it's not  the	 same.	(Which
	  means	not everything accepted	by vf_lavfi's graph option will	be ac-
	  cepted by --vf.)

       Video filters are managed in lists. There are a few commands to	manage
       the filter list.

	      Appends the filters given	as arguments to	the filter list.

	      Prepends the filters given as arguments to the filter list.

	      Deletes the filters at the given indexes.	Index numbers start at
	      0, negative numbers address the end  of  the  list  (-1  is  the

	      Completely empties the filter list.

       With filters that support it, you can access parameters by their	name.

	      Prints the parameter names and parameter value ranges for	a par-
	      ticular filter.

	      Sets a named parameter to	the given value. Use on	and off	or yes
	      and no to	set flag parameters.

       Available filters are:

	      Crops  the given part of the image and discards the rest.	Useful
	      to remove	black bands from widescreen videos.

		     Cropped width and height, defaults	to original width  and

		     Position of the cropped picture, defaults to center.

	      Expands  (not  scales)  video  resolution	to the given value and
	      places the unscaled original at coordinates x, y.

		     Expanded width,height (default:  original	width,height).
		     Negative values for w and h are treated as	offsets	to the
		     original size.


			       Adds a 50 pixel border to  the  bottom  of  the

		     position  of  original  image  on the expanded image (de-
		     fault: center)

		     Expands to	fit an aspect instead  of  a  resolution  (de-
		     fault: 0).


			       Expands to 800x600, unless the source is	higher
			       resolution, in which case it expands to fill  a
			       4/3 aspect.

		     Rounds  up	to make	both width and height divisible	by <r>
		     (default: 1).

       flip   Flips the	image upside down.

       mirror Mirrors the image	on the Y axis.

	      Rotates the image	by a multiple of 90 degrees clock-wise.

	      Scales the image with the	software scaler	(slow) and performs  a
	      YUV<->RGB	color space conversion (see also --sws).

	      All parameters are optional.

		     scaled width/height (default: original width/height)

		     0	    scaled d_width/d_height

		     -1	    original width/height

		     -2	    Calculate  w/h  using  the other dimension and the
			    prescaled aspect ratio.

		     -3	    Calculate w/h using	the other  dimension  and  the
			    original aspect ratio.

		     -(n+8) Like  -n  above, but rounding the dimension	to the
			    closest multiple of	16.

	      <param>[:<param2>] (see also --sws)
		     Set some scaling parameters  depending  on	 the  type  of
		     scaler selected with --sws:

			--sws=2	(bicubic):  B (blurring) and C (ringing)
			    0.00:0.60 default
			    0.00:0.75 VirtualDub's "precise bicubic"
			    0.00:0.50 Catmull-Rom spline
			    0.33:0.33 Mitchell-Netravali spline
			    1.00:0.00 cubic B-spline

			--sws=7	(Gaussian): sharpness (0 (soft)	- 100 (sharp))

			--sws=9	(Lanczos):  filter length (1-10)

		     chroma skipping

		     0	    Use	 all  available	 input	lines  for chroma (de-

		     1	    Use	only every 2. input line for chroma.

		     2	    Use	only every 4. input line for chroma.

		     3	    Use	only every 8. input line for chroma.

	      <noup> Disallow upscaling	past the original dimensions.

		     0	    Allow upscaling (default).

		     1	    Disallow upscaling if one  dimension  exceeds  its
			    original value.

		     2	    Disallow upscaling if both dimensions exceed their
			    original values.

	      <arnd> Accurate rounding for the vertical	scaler,	which  may  be
		     faster or slower than the default rounding.

		     no	    Disable accurate rounding (default).

		     yes    Enable accurate rounding.

	      Changes the intended display aspect at an	arbitrary point	in the
	      filter chain. Aspect can be given	as a fraction (4/3) or	float-
	      ing  point  number (1.33). Note that this	filter does not	do any
	      scaling itself; it just affects what later scalers (software  or
	      hardware)	will do	when auto-scaling to the correct aspect.

		     New aspect	ratio given by a display width and height. Un-
		     like older	mpv versions or	MPlayer, this does not set the
		     display size.

		     Can also be these special values:

		     0	    original display width and height

		     -1	    original video width and height (default)

		     -2	    Calculate  w/h  using  the other dimension and the
			    original display aspect ratio.

		     -3	    Calculate w/h using	the other  dimension  and  the
			    original video aspect ratio.


			       Specifies a display resolution of 800x600 for a
			       4/3 aspect video, or 800x450 for	a 16/9	aspect

		     Modifies  width  and  height according to original	aspect

		     -1	    Ignore original aspect ratio (default).

		     0	    Keep display aspect	ratio by using <w> and <h>  as
			    maximum resolution.

		     1	    Keep  display aspect ratio by using	<w> and	<h> as
			    minimum resolution.

		     2	    Keep video aspect ratio by using <w>  and  <h>  as
			    maximum resolution.

		     3	    Keep  video	 aspect	 ratio by using	<w> and	<h> as
			    minimum resolution.


			       Specifies  a  display  resolution  of  at  most
			       800x600,	or smaller, in order to	keep aspect.

	      <r>    Rounds  up	to make	both width and height divisible	by <r>
		     (default: 1).

		     Force an aspect ratio.

	      Restricts	the color space	for the	next filter without doing  any
	      conversion.   Use	together with the scale	filter for a real con-

		 For a list of available formats, see format=fmt=help.

	      <fmt>  Format name, e.g.	rgb15,	bgr24,	420p,  etc.  (default:
		     don't change).

		     Format name that should be	substituted for	the output. If
		     they do not have the same bytes per pixel and chroma sub-
		     sampling, it will fail.

		     Controls the YUV to RGB color space conversion when play-
		     ing video.	There are various standards. Normally,	BT.601
		     should  be	 used  for  SD video, and BT.709 for HD	video.
		     (This is done by default.)	Using  incorrect  color	 space
		     results  in  slightly under or over saturated and shifted

		     These options are not always supported.  Different	 video
		     outputs  provide  varying	degrees	of support. The	opengl
		     and vdpau video output drivers usually  offer  full  sup-
		     port. The xv output can set the color space if the	system
		     video driver supports it, but not input and  output  lev-
		     els. The scale video filter can configure color space and
		     input levels, but only if the output format  is  RGB  (if
		     the  video	 output	 driver	 supports  RGB output, you can
		     force this	with -vf scale,format=rgba).

		     If	this option is set to auto (which is the default), the
		     video's  color  space  flag will be used. If that flag is
		     unset, the	color space will  be  selected	automatically.
		     This  is  done  using a simple heuristic that attempts to
		     distinguish SD and	HD video. If the video is larger  than
		     1279x576  pixels,	BT.709	(HD)  will  be used; otherwise
		     BT.601 (SD) is selected.

		     Available color spaces are:

		     auto   automatic selection	(default)

		     bt.601 ITU-R BT.601 (SD)

		     bt.709 ITU-R BT.709 (HD)

			    ITU-R BT.2020 non-constant luminance system

			    ITU-R BT.2020 constant luminance system


		     YUV color levels used with	YUV to	RGB  conversion.  This
		     option  is	only necessary when playing broken files which
		     do	not follow standard color levels or which are  flagged
		     wrong.  If	the video does not specify its color range, it
		     is	assumed	to be limited range.

		     The same limitations as with <colormatrix>	apply.

		     Available color ranges are:

		     auto   automatic selection	(normally limited range)  (de-

			    limited range (16-235 for luma, 16-240 for chroma)

		     full   full range (0-255 for both luma and	chroma)

		     RGB  primaries the	source file was	encoded	with. Normally
		     this should be set	in the file header, but	 when  playing
		     broken  or	 mistagged  files this can be used to override
		     the setting.

		     This option only affects video output drivers  that  per-
		     form  color  management, for example opengl with the tar-
		     get-prim or icc-profile suboptions	set.

		     If	this option is set to auto (which is the default), the
		     video's  primaries	flag will be used. If that flag	is un-
		     set, the color space will be selected automatically,  us-
		     ing the following heuristics: If the <colormatrix>	is set
		     or	determined as BT.2020  or  BT.709,  the	 corresponding
		     primaries are used. Otherwise, if the video height	is ex-
		     actly 576 (PAL), BT.601-625 is used. If it's exactly  480
		     or	 486  (NTSC), BT.601-525 is used. If the video resolu-
		     tion is anything else, BT.709 is used.

		     Available primaries are:

		     auto   automatic selection	(default)

			    ITU-R BT.601 (SD) 525-line systems (NTSC, SMPTE-C)

			    ITU-R BT.601 (SD) 625-line systems (PAL, SECAM)

		     bt.709 ITU-R BT.709 (HD) (same primaries as sRGB)

			    ITU-R BT.2020 (UHD)

		     apple  Apple RGB

		     adobe  Adobe RGB (1998)

			    ProPhoto RGB (ROMM)

			    CIE	1931 RGB

		     dci-p3 DCI-P3 (Digital Cinema)

			    Panasonic V-Gamut primaries

		     Gamma function the	source file was	encoded	with. Normally
		     this  should  be set in the file header, but when playing
		     broken or mistagged files this can	be  used  to  override
		     the setting.

		     This  option  only	affects	video output drivers that per-
		     form color	management.

		     If	this option is set to auto (which is the default), the
		     gamma  will be set	to BT.1886 for YCbCr content, sRGB for
		     RGB content and Linear for	XYZ content.

		     Available gamma functions are:

		     auto   automatic selection	(default)

			    ITU-R    BT.1886	(EOTF	  corresponding	    to

		     srgb   IEC	61966-2-4 (sRGB)

		     linear Linear light

			    Pure power curve (gamma 1.8)

			    Pure power curve (gamma 2.2)

			    Pure power curve (gamma 2.8)

			    ProPhoto RGB (ROMM)	curve

		     st2084 SMPTE ST2084 (HDR) curve

			    ARIB STD-B67 (Hybrid Log-gamma) curve

		     v-log  Panasonic V-Log transfer curve

	      <peak> Reference	peak  illumination for the video file. This is
		     mostly interesting	for HDR, but it	can also be used  tone
		     map SDR content to	a darker or brighter exposure.

		     The  default  of 0.0 will default to the display's	refer-
		     ence  brightness  for  SDR	 and  the  source's  reference
		     brightness	for HDR.

		     Set  the  stereo  mode the	video is assumed to be encoded
		     in. Takes the same	values as the --video-stereo-mode  op-

		     Set  the  stereo  mode  the video should be displayed as.
		     Takes the same values as the --video-stereo-mode option.

		     Set the rotation the video	is assumed to be encoded  with
		     in	degrees.  The special value -1 uses the	input format.

	      <dw>, <dh>
		     Set  the display size. Note that setting the display size
		     such that the video is scaled in both directions  instead
		     of	 just  changing	 the aspect ratio is an	implementation
		     detail, and might change later.

	      <dar>  Set the display aspect ratio of the video frame. This  is
		     a	float,	but  values  such  as [16:9] can be passed too
		     ([...] for	quoting	to prevent the option parser from  in-
		     terpreting	the : character).

	      Restricts	 the color space for the next filter without doing any
	      conversion.  Unlike the format filter, this will allow any color
	      space except the one you specify.

		 For a list of available formats, see noformat=fmt=help.

	      <fmt>  Format  name,  e.g.  rgb15,  bgr24,  420p,	etc. (default:

	      Filter video using FFmpeg's libavfilter.

		     The libavfilter graph string. The filter must have	a sin-
		     gle video input pad and a single video output pad.

		     See	for syntax and
		     available filters.

			If you want to use the full filter  syntax  with  this
			option,	you have to quote the filter graph in order to
			prevent	mpv's syntax and the filter graph syntax  from


			-vf lavfi=[gradfun=20:30,vflip]
			       gradfun	filter	with nonsense parameters, fol-
			       lowed by	a vflip	filter.	(This demonstrates how
			       libavfilter takes a graph and not just a	single
			       filter.)	The filter graph string	is quoted with
			       [ and ].	This requires no additional quoting or
			       escaping	with some shells  (like	 bash),	 while
			       others  (like  zsh) require additional "	quotes
			       around the option string.

			       Same as before, but uses	quoting	that should be
			       safe  with  all shells. The outer ' quotes make
			       sure that the  shell  does  not	remove	the  "
			       quotes needed by	mpv.

			       Same as before, but uses	named  parameters  for

		     If	 libavfilter  inserts filters for pixel	format conver-
		     sion, this	option gives the flags which should be	passed
		     to	 libswscale.  This  option  is	numeric	 and  takes  a
		     bit-wise combination of SWS_ flags.


	      <o>    Set  AVFilterGraph	options. These should be documented by


			       forces a	specific threading configuration.

	      Software equalizer that  uses  lookup  tables  (slow),  allowing
	      gamma  correction	 in addition to	simple brightness and contrast
	      adjustment. The parameters are given as floating point values.

		     initial gamma value (default: 1.0)

	      <-2-2> initial contrast, where negative values result in a nega-
		     tive image	(default: 1.0)

	      <-1-1> initial brightness	(default: 0.0)

	      <0-3>  initial saturation	(default: 1.0)

		     gamma value for the red component (default: 1.0)

		     gamma value for the green component (default: 1.0)

		     gamma value for the blue component	(default: 1.0)

	      <0-1>  The  weight parameter can be used to reduce the effect of
		     a high gamma value	on bright image	areas, e.g. keep  them
		     from  getting overamplified and just plain	white. A value
		     of	0.0 turns the gamma correction all the way down	 while
		     1.0 leaves	it at its full strength	(default: 1.0).

	      Pulldown reversal	(inverse telecine) filter, capable of handling
	      mixed hard-telecine, 24000/1001 fps progressive, and  30000/1001
	      fps  progressive	content. The pullup filter makes use of	future
	      context in making	its decisions. It is stateless	in  the	 sense
	      that  it	does not lock onto a pattern to	follow,	but it instead
	      looks forward to the  following  fields  in  order  to  identify
	      matches and rebuild progressive frames.

	      jl, jr, jt, and jb
		     These  options  set the amount of "junk" to ignore	at the
		     left, right, top, and bottom of the image,	 respectively.
		     Left/right	are in units of	8 pixels, while	top/bottom are
		     in	units of 2 lines. The default  is  8  pixels  on  each

	      sb (strict breaks)
		     Setting  this  option  to	1  will	 reduce	the chances of
		     pullup generating an occasional mismatched	frame, but  it
		     may  also	cause  an  excessive  number  of  frames to be
		     dropped during high motion	sequences.   Conversely,  set-
		     ting  it to -1 will make pullup match fields more easily.
		     This may help process video with slight blurring  between
		     the  fields,  but may also	cause interlaced frames	in the

	      mp (metric plane)
		     This option may be	set to u or v to use  a	 chroma	 plane
		     instead  of  the  luma  plane for doing pullup's computa-
		     tions. This may improve accuracy on very clean source ma-
		     terial,  but  more	 likely	 will decrease accuracy, espe-
		     cially if there is	chroma noise (rainbow effect)  or  any
		     grayscale	video.	The  main  purpose  of setting mp to a
		     chroma plane is to	reduce CPU load	and make pullup	usable
		     in	realtime on slow machines.

	      Yet another deinterlacing	filter


		     frame  Output 1 frame for each frame.

		     field  Output 1 frame for each field (default).

			    Like frame but skips spatial interlacing check.

			    Like field but skips spatial interlacing check.


		     no	    Deinterlace	all frames.

		     yes    Only  deinterlace frames marked as interlaced (de-

	      This filter is automatically inserted when using the d  key  (or
	      any  other key that toggles the deinterlace property or when us-
	      ing the --deinterlace switch), assuming the  video  output  does
	      not have native deinterlacing support.

	      If  you  just  want to set the default mode, put this filter and
	      its options into --vf-defaults instead, and enable deinterlacing
	      with d or	--deinterlace.

	      Also,  note that the d key is stupid enough to insert a deinter-
	      lacer twice when inserting yadif with --vf, so using  the	 above
	      methods is recommended.

	      Moves  subtitle  rendering  to  an arbitrary point in the	filter
	      chain, or	force subtitle rendering in the	video  filter  as  op-
	      posed to using video output OSD support.

		     Adds a black band at the bottom of	the frame. The SSA/ASS
		     renderer can place	subtitles there	 (with	--sub-use-mar-

		     Black band	on the top for toptitles  (with	--sub-use-mar-


			Moves sub rendering before the eq  filter.  This  will
			put both subtitle colors and video under the influence
			of the video equalizer settings.

	      Stereo3d converts	between	different stereoscopic image formats.

	      <in>   Stereoscopic image	format of input. Possible values:

		     sbsl or side_by_side_left_first
			    side by side parallel (left	eye  left,  right  eye

		     sbsr or side_by_side_right_first
			    side  by  side  crosseye (right eye	left, left eye

		     abl or above_below_left_first
			    above-below	(left eye above, right eye below)

		     abr or above_below_right_first
			    above-below	(right eye above, left eye below)

		     ab2l or above_below_half_height_left_first
			    above-below	with half height resolution (left  eye
			    above, right eye below)

		     ab2r or above_below_half_height_right_first
			    above-below	with half height resolution (right eye
			    above, left	eye below)

	      <out>  Stereoscopic image	format of output. Possible values  are
		     all the input formats as well as:

		     arcg or anaglyph_red_cyan_gray
			    anaglyph  red/cyan	gray  (red filter on left eye,
			    cyan filter	on right eye)

		     arch or anaglyph_red_cyan_half_color
			    anaglyph red/cyan half colored (red	filter on left
			    eye, cyan filter on	right eye)

		     arcc or anaglyph_red_cyan_color
			    anaglyph  red/cyan	color (red filter on left eye,
			    cyan filter	on right eye)

		     arcd or anaglyph_red_cyan_dubois
			    anaglyph  red/cyan	color	optimized   with   the
			    least-squares  projection of Dubois	(red filter on
			    left eye, cyan filter on right eye)

		     agmg or anaglyph_green_magenta_gray
			    anaglyph green/magenta gray	(green filter on  left
			    eye, magenta filter	on right eye)

		     agmh or anaglyph_green_magenta_half_color
			    anaglyph  green/magenta half colored (green	filter
			    on left eye, magenta filter	on right eye)

		     agmc or anaglyph_green_magenta_color
			    anaglyph green/magenta colored  (green  filter  on
			    left eye, magenta filter on	right eye)

		     aybg or anaglyph_yellow_blue_gray
			    anaglyph  yellow/blue  gray	(yellow	filter on left
			    eye, blue filter on	right eye)

		     aybh or anaglyph_yellow_blue_half_color
			    anaglyph yellow/blue half colored  (yellow	filter
			    on left eye, blue filter on	right eye)

		     aybc or anaglyph_yellow_blue_color
			    anaglyph  yellow/blue  colored  (yellow  filter on
			    left eye, blue filter on right eye)

		     irl or interleave_rows_left_first
			    Interleaved	rows (left eye has top row, right  eye
			    starts on next row)

		     irr or interleave_rows_right_first
			    Interleaved	 rows (right eye has top row, left eye
			    starts on next row)

		     ml	or mono_left
			    mono output	(left eye only)

		     mr	or mono_right
			    mono output	(right eye only)

	      Fix the banding artifacts	that  are  sometimes  introduced  into
	      nearly flat regions by truncation	to 8-bit color depth. Interpo-
	      lates the	gradients that should go  where	 the  bands  are,  and
	      dithers them.

		     Maximum  amount  by  which	the filter will	change any one
		     pixel. Also the threshold for detecting nearly  flat  re-
		     gions (default: 1.5).

		     Neighborhood  to fit the gradient to. Larger radius makes
		     for smoother gradients, but also prevents the filter from
		     modifying	pixels	near  detailed	regions	(default: dis-

	      <size> size of the filter	in percent of the image	diagonal size.
		     This is used to calculate the final radius	size (default:

	      Loads an external	library	to filter the image. The  library  in-
	      terface  is  the	vf_dlopen  interface  specified	 using	libmp-

		 This filter is	deprecated.

		     Specify the library to load. This may require a full file
		     system path in some cases.	This argument is required.

		     Specify the first parameter to pass to the	library.

		     Specify the second	parameter to pass to the library.

		     Specify the third parameter to pass to the	library.

		     Specify the fourth	parameter to pass to the library.

	      Loads a VapourSynth filter script. This is intended for streamed
	      processing: mpv actually provides	a source  filter,  instead  of
	      using a native VapourSynth video source. The mpv source will an-
	      swer frame requests only within a	small window  of  frames  (the
	      size  of	this window is controlled with the buffered-frames pa-
	      rameter),	and requests outside of	that will  return  errors.  As
	      such,  you  can't	use the	full power of VapourSynth, but you can
	      use certain filters.

	      If you just want to play video generated by a VapourSynth	 (i.e.
	      using  a	native	VapourSynth  video source), it's better	to use
	      vspipe and a FIFO	to feed	the video to mpv. The same applies  if
	      the   filter   script   requires	 random	  frame	  access  (see
	      buffered-frames parameter).

	      This filter is experimental. If it turns out that	it works  well
	      and  is  used,  it  will be ported to libavfilter. Otherwise, it
	      will be just removed.

	      file   Filename of the script source. Currently, this is	always
		     a	python script. The variable video_in is	set to the mpv
		     video source, and it is expected that  the	 script	 reads
		     video  from it. (Otherwise, mpv will decode no video, and
		     the video packet queue will overflow, eventually  leading
		     to	 audio	being stopped.)	The script is also expected to
		     pass through timestamps using the _DurationNum and	_Dura-
		     tionDen frame properties.


			    import vapoursynth as vs
			    core = vs.get_core()
			    core.std.AddBorders(video_in, 10, 10, 20, 20).set_output()

			The  script  will  be  reloaded	on every seek. This is
			done to	reset the filter properly on discontinuities.

		     Maximum number of decoded video  frames  that  should  be
		     buffered  before  the filter (default: 4).	This specifies
		     the maximum number	of frames the script  can  request  in
		     reverse  direction.   E.g.	 if buffered-frames=5, and the
		     script just requested frame  15,  it  can	still  request
		     frame  10,	 but  frame 9 is not available anymore.	 If it
		     requests frame 30,	mpv will decode	15  more  frames,  and
		     keep only frames 25-30.

		     The  actual number	of buffered frames also	depends	on the
		     value of the concurrent-frames  option.  Currently,  both
		     option  values  are  multiplied  to  get the final	buffer

		     (Normally,	VapourSynth source filters must	provide	random
		     access,  but mpv was made for playback, and does not pro-
		     vide frame-exact random access. The way this video	filter
		     works  is	a  compromise to make simple filters work any-

		     Number of frames that should be  requested	 in  parallel.
		     The  level	 of  concurrency depends on the	filter and how
		     quickly mpv can decode video to  feed  the	 filter.  This
		     value  should  probably  be proportional to the number of
		     cores on your machine. Most time, making it  higher  than
		     the number	of cores can actually make it slower.

		     By	 default, this uses the	special	value auto, which sets
		     the option	to the number of detected logical CPU cores.

	      The following variables are defined by mpv:

		     The mpv video source as vapoursynth clip. Note that  this
		     has  no  length  set,  which confuses many	filters. Using
		     Trim on the clip with a high dummy	 length	 can  turn  it
		     into a finite clip.

	      video_in_dw, video_in_dh
		     Display  size  of	the video. Can be different from video
		     size if the video does not	use square pixels (e.g.	DVD).

		     FPS value as reported by file headers. This value can  be
		     wrong  or	completely broken (e.g.	0 or NaN). Even	if the
		     value is correct, if another filter changes the real  FPS
		     (by  dropping  or	inserting  frames),  the value of this
		     variable might not	be useful. Note	that the --fps command
		     line option overrides this	value.

		     Useful for	some filters which insist on having a FPS.

		     Refresh rate of the current display. Note that this value
		     can be 0.

	      The same as vapoursynth, but doesn't load	 Python	 scripts.  In-
	      stead, a custom backend using Lua	and the	raw VapourSynth	API is
	      used. The	syntax is completely different,	and absolutely no con-
	      venience features	are provided. There's no type checking either,
	      and you can trigger crashes.


		     video_out = invoke("morpho", "Open", {clip	= video_in})

	      The special variable video_in is the mpv video source, while the
	      special  variable	 video_out is used to read video from. The 1st
	      argument is the plugin (queried with getPluginByNs), the 2nd  is
	      the  filter name,	and the	3rd argument is	a table	with the argu-
	      ments. Positional	arguments are not supported.  The  types  must
	      match exactly. Since Lua is terrible and can't distinguish inte-
	      gers and floats, integer arguments must be prefixed with i_,  in
	      which  case the prefix is	removed	and the	argument is cast to an
	      integer. Should the argument's name start	with i_, you're	out of

	      Clips  (VSNodeRef)  are  passed  as light	userdata, so trying to
	      pass any other userdata type will	result in hard crashes.

       vavpp  VA-AP-API	video  post  processing.  Works	 with  --vo=vaapi  and
	      --vo=opengl  only.  Currently deinterlaces. This filter is auto-
	      matically	inserted if deinterlacing is requested	(either	 using
	      the  d  key, by default mapped to	the command cycle deinterlace,
	      or the --deinterlace option).

		     Select the	deinterlacing algorithm.

		     no	    Don't perform deinterlacing.

			    Show only  first  field  (going  by	 --field-domi-

		     bob    bob	deinterlacing (default).

		     weave, motion-adaptive, motion-compensated
			    Advanced  deinterlacing  algorithms. Whether these
			    actually work depends on the GPU hardware, the GPU
			    drivers, driver bugs, and mpv bugs.


		     no	    Deinterlace	all frames.

		     yes    Only  deinterlace frames marked as interlaced (de-


		     no	    Use	the API	as it was interpreted  by  older  Mesa
			    drivers.  While this interpretation	was more obvi-
			    ous	and inuitive, it was apparently	wrong, and not
			    shared by Intel driver developers.

		     yes    Use	 Intel	interpretation	of surface forward and
			    backwards references (default). This is what Intel
			    drivers  and  newer	 Mesa  drivers expect. Matters
			    only for the advanced deinterlacing	algorithms.

	      VDPAU  video  post  processing.  Works   with   --vo=vdpau   and
	      --vo=opengl only.	This filter is automatically inserted if dein-
	      terlacing	is requested (either  using  the  d  key,  by  default
	      mapped  to  the  command cycle deinterlace, or the --deinterlace
	      option). When enabling deinterlacing,  it	 is  always  preferred
	      over  software deinterlacer filters if the vdpau VO is used, and
	      also if opengl is	used and hardware decoding  was	 activated  at
	      least once (i.e. vdpau was loaded).

		     For  positive values, apply a sharpening algorithm	to the
		     video, for	negative values	a blurring algorithm (default:

		     Apply  a noise reduction algorithm	to the video (default:
		     0;	no noise reduction).

		     Whether deinterlacing is enabled (default:	 no).  If  en-
		     abled, it will use	the mode selected with deint-mode.

		     Select deinterlacing mode (default: temporal).  All modes
		     respect --field-dominance.

		     Note that there's currently a mechanism that  allows  the
		     vdpau  VO	to  change the deint-mode of auto-inserted vd-
		     paupp filters. To avoid confusion,	it's  recommended  not
		     to	use the	--vo=vdpau suboptions related to filtering.

			    Show only first field.

		     bob    Bob	deinterlacing.

			    Motion-adaptive  temporal  deinterlacing. May lead
			    to A/V desync with slow video hardware and/or high

			    Motion-adaptive    temporal	  deinterlacing	  with
			    edge-guided	 spatial  interpolation.  Needs	  fast
			    video hardware.

		     Makes  temporal  deinterlacers  operate  both on luma and
		     chroma (default).	Use no-chroma-deint to solely use luma
		     and  speed	 up  advanced  deinterlacing. Useful with slow
		     video memory.

	      pullup Try to apply inverse telecine, needs motion adaptive tem-
		     poral deinterlacing.

		     If	 yes  (default), only deinterlace frames marked	as in-


		     0	    Use	default	VDPAU scaling (default).

		     1-9    Apply high quality VDPAU  scaling  (needs  capable

	      Direct3D	11  video  post	 processing.  Currently	requires D3D11
	      hardware decoding	for use.

		     Whether deinterlacing is enabled (default:	no).

		     If	yes (default), only deinterlace	frames marked  as  in-

		     Tries to select a video processor with the	given process-
		     ing capability.  If a video processor  supports  multiple
		     capabilities, it is not clear which algorithm is actually
		     selected. none always falls back.	On  most  if  not  all
		     hardware, this option will	probably do nothing, because a
		     video processor usually supports all modes	or none.

	      Buffer <num> frames in the filter	chain. This filter is probably
	      pretty useless, except for debugging. (Note that this won't help
	      to smooth	out latencies with decoding, because the  filter  will
	      never output a frame if the buffer isn't full, except on EOF.)

       You can encode files from one format/codec to another using this	facil-

	      Enables encoding mode and	specifies the output file name.

	      Specifies	the output format (overrides autodetection by the file
	      name extension of	the file specified by -o). This	can be a comma
	      separated	list of	possible formats to try. See --of=help	for  a
	      full list	of supported formats.

	      Specifies	 the  output  format  options  for  libavformat.   See
	      --ofopts=help for	a full list of supported options.

	      Options are managed in lists. There are a	few commands to	manage
	      the options list.

		     Appends  the  options  given  as arguments	to the options

		     Prepends the options given	as arguments  to  the  options

		     Deletes  the  options at the given	indexes. Index numbers
		     start at 0, negative numbers address the end of the  list
		     (-1 is the	last).

		     Completely	empties	the options list.

       --ofps=<float value>
	      Specifies	the output format time base (default: 24000). Low val-
	      ues like 25 limit	video fps by dropping frames.

	      Sets the output format time base to the guessed  frame  rate  of
	      the  input  video	 (simulates MEncoder behavior, useful for AVI;
	      may cause	frame drops).  Note that not all codecs	 and  not  all
	      formats support VFR encoding, and	some which do have bugs	when a
	      target bitrate is	specified - use	--ofps or --oautofps to	 force
	      CFR encoding in these cases.

       --omaxfps=<float	value>
	      Specifies	 the  minimum distance of adjacent frames (default: 0,
	      which means unset). Content of lower frame  rate	is  not	 read-
	      justed to	this frame rate; content of higher frame rate is deci-
	      mated to this frame rate.

	      If set, the frame	rate given by --ofps is	attained not by	 skip-
	      ping  time codes,	but by duplicating frames (constant frame rate

	      If set, frames are never dropped.	Instead, time codes  of	 video
	      are  readjusted  to  always  increase. This may cause AV desync,
	      though; to work around this, use	a  high-fps  time  base	 using
	      --ofps and absolutely avoid --oautofps.

	      Specifies	 the output audio codec. This can be a comma separated
	      list of possible codecs to try. See --oac=help for a  full  list
	      of supported codecs.

	      Shifts  audio  data by the given time (in	seconds) by adding/re-
	      moving samples at	the start.

	      Specifies	the output audio codec options	for  libavcodec.   See
	      --oacopts=help for a full	list of	supported options.


		 --oac=libmp3lame --oacopts=b=128000
			selects	128 kbps MP3 encoding.

	      Options are managed in lists. There are a	few commands to	manage
	      the options list.

		     Appends the options given as  arguments  to  the  options

		     Prepends  the  options  given as arguments	to the options

		     Deletes the options at the	given indexes.	Index  numbers
		     start  at 0, negative numbers address the end of the list
		     (-1 is the	last).

		     Completely	empties	the options list.

	      Force the	audio stream to	become the first stream	in the output.
	      By default, the order is unspecified.

	      Specifies	 the output video codec. This can be a comma separated
	      list of possible codecs to try. See --ovc=help for a  full  list
	      of supported codecs.

	      Shifts video data	by the given time (in seconds) by shifting the
	      pts values.

       --ovcopts <options>
	      Specifies	the output video codec options	for  libavcodec.   See
	      --ovcopts=help for a full	list of	supported options.


		 "--ovc=mpeg4 --ovcopts=qscale=5"
			selects	 constant  quantizer scale 5 for MPEG-4	encod-

		 "--ovc=libx264	--ovcopts=crf=23"
			selects	VBR quality factor 23 for H.264	encoding.

	      Options are managed in lists. There are a	few commands to	manage
	      the options list.

		     Appends  the  options  given  as arguments	to the options

		     Prepends the options given	as arguments  to  the  options

		     Deletes  the  options at the given	indexes. Index numbers
		     start at 0, negative numbers address the end of the  list
		     (-1 is the	last).

		     Completely	empties	the options list.

	      Force the	video stream to	become the first stream	in the output.
	      By default, the order is unspecified.

	      Copies input pts to the output video (not	supported by some out-
	      put  container  formats,	e.g.  AVI).  Discontinuities are still
	      fixed.  By default, audio	pts are	set to playback	time and video
	      pts  are synchronized to match audio pts,	as some	output formats
	      do not support anything else.

	      Copies input pts to the output video (not	supported by some out-
	      put  container formats, e.g. AVI). In this mode, discontinuities
	      are not fixed and	all pts	are passed through as-is.  Never  seek
	      backwards	or use multiple	input files in this mode!

	      Turns  off  copying of metadata from input files to output files
	      when encoding (which is enabled by default).

       The mpv core can	be controlled with commands and	properties.  A	number
       of  ways	 to  interact  with  the  player  use  them: key bindings (in-
       put.conf), OSD (showing information with	 properties),  JSON  IPC,  the
       client API (libmpv), and	the classic slave mode.

       The input.conf file consists of a list of key bindings, for example:

	  s screenshot	    # take a screenshot	with the s key
	  LEFT seek 15	    # map the left-arrow key to	seeking	forward	by 15 seconds

       Each line maps a	key to an input	command. Keys are specified with their
       literal value (upper case if combined with Shift), or a name  for  spe-
       cial  keys.  For	example, a maps	to the a key without shift, and	A maps
       to a with shift.

       The file	is located in the mpv  configuration  directory	 (normally  at
       ~/.config/mpv/input.conf	 depending  on platform). The default bindings
       are defined here:

       A list of special keys can be obtained with
	  mpv --input-keylist

       In general, keys	can be combined	with Shift, Ctrl and Alt:

	  ctrl+q quit

       mpv can be started in input test	mode, which displays key bindings  and
       the commands they're bound to on	the OSD, instead of executing the com-

	  mpv --input-test --force-window --idle

       (Only closing the window	will make mpv exit, pressing normal keys  will
       merely display the binding, even	if mapped to quit.)

   General Input Command Syntax
       [Shift+][Ctrl+][Alt+][Meta+]<key>  [{<section>}]	[<prefixes>] <command>
       (<argument>)* [;	<command>]

       Note that by default, the right Alt key can be used to  create  special
       characters,  and	 thus  does  not  register  as	a modifier. The	option
       --no-input-right-alt-gr changes this behavior.

       Newlines	always start a new binding. # starts  a	 comment  (outside  of
       quoted  string  arguments). To bind commands to the # key, SHARP	can be

       <key> is	either the literal character the key produces (ASCII  or  Uni-
       code character),	or a symbolic name (as printed by --input-keylist).

       <section> (braced with {	and }) is the input section for	this command.

       Arguments  are separated	by whitespace. This applies even to string ar-
       guments.	 For this reason, string arguments should be  quoted  with  ".
       Inside quotes, C-style escaping can be used.

       You can bind multiple commands to one key. For example:
       a show-text "command 1" ; show-text "command 2"

       It's also possible to bind a command to a sequence of keys:
       a-b-c show-text "command	run after a, b,	c have been pressed"

       (This is	not shown in the general command syntax.)

       If  a  or  a-b  or b are	already	bound, this will run the first command
       that matches, and the multi-key command will never be called.  Interme-
       diate  keys can be remapped to ignore in	order to avoid this issue. The
       maximum number of (non-modifier)	keys for combinations is currently 4.

   List	of Input Commands
       ignore Use this to "block" keys that should be unbound, and do nothing.
	      Useful  for  disabling  default  bindings, without disabling all
	      bindings with --no-input-default-bindings.

       seek <seconds> [relative|absolute|absolute-percent|relative-percent|ex-
	      Change  the  playback  position. By default, seeks by a relative
	      amount of	seconds.

	      The second argument consists of flags controlling	the seek mode:

	      relative (default)
		     Seek relative to current position (a negative value seeks

		     Seek  to  a  given	time (a	negative value starts from the
		     end of the	file).

		     Seek to a given percent position.

		     Seek relative to current position in percent.

		     Always restart playback at	keyframe boundaries (fast).

	      exact  Always do exact/hr/precise	seeks (slow).

	      Multiple flags can be combined, e.g.: absolute+keyframes.

	      By default, keyframes is used for	relative seeks,	and  exact  is
	      used for absolute	seeks.

	      Before  mpv  0.9,	the keyframes and exact	flags had to be	passed
	      as 3rd parameter (essentially using a space instead of  +).  The
	      3rd parameter is still parsed, but is considered deprecated.

       revert-seek [mode]
	      Undoes  the seek command,	and some other commands	that seek (but
	      not necessarily all of them). Calling  this  command  once  will
	      jump to the playback position before the seek. Calling it	a sec-
	      ond time undoes the revert-seek command itself. This only	 works
	      within a single file.

	      The first	argument is optional, and can change the behavior:

	      mark   Mark  the	current	 time  position.  The  next normal re-
		     vert-seek command will seek back to this point, no	matter
		     how many seeks happened since last	time.

	      Using it without any arguments gives you the default behavior.

	      Play  one	 frame,	then pause. Does nothing with audio-only play-

	      Go back by one frame, then pause.	Note that  this	 can  be  very
	      slow  (it	tries to be precise, not fast),	and sometimes fails to
	      behave as	expected. How well this	works depends on whether  pre-
	      cise  seeking  works  correctly  (e.g.   see  the	 --hr-seek-de-
	      muxer-offset option). Video filters or other video post-process-
	      ing  that	 modifies timing of frames (e.g. deinterlacing)	should
	      usually work, but	might make backstepping	silently behave	incor-
	      rectly  in  corner  cases.  Using	 --hr-seek-framedrop=no	should
	      help, although it	might make precise seeking slower.

	      This does	not work with audio-only playback.

       set <property> <value>
	      Set the given property to	the given value.

       add <property> [<value>]
	      Add the given value to the property. On overflow	or  underflow,
	      clamp the	property to the	maximum. If <value> is omitted,	assume

       cycle <property>	[up|down]
	      Cycle the	given property.	up and down set	the  cycle  direction.
	      On  overflow, set	the property back to the minimum, on underflow
	      set it to	the maximum. If	up or down is omitted, assume up.

       multiply	<property> <factor>
	      Multiplies the value of a	property with the numeric factor.

       screenshot [subtitles|video|window|single|each-frame]
	      Take a screenshot.

	      Multiple flags are available (some can be	combined with +):

	      <subtitles> (default)
		     Save the video image, in  its  original  resolution,  and
		     with subtitles.  Some video outputs may still include the
		     OSD in the	output under certain circumstances.

		     Like subtitles, but typically without OSD	or  subtitles.
		     The exact behavior	depends	on the selected	video output.

		     Save  the	contents  of the mpv window. Typically scaled,
		     with OSD and subtitles. The exact behavior	depends	on the
		     selected  video  output,  and if no support is available,
		     this will act like	video.

		     Take a screenshot each frame. Issue this command again to
		     stop  taking  screenshots.	 Note  that you	should disable
		     frame-dropping when using this mode - or  you  might  re-
		     ceive duplicate images in cases when a frame was dropped.
		     This flag can be combined	with  the  other  flags,  e.g.

	      Older  mpv  versions  required  passing single and each-frame as
	      second argument (and did not have	flags).	This syntax  is	 still
	      understood, but deprecated and might be removed in the future.

	      Setting the async	flag will make encoding	and writing the	actual
	      image file asynchronous in most cases. (each-frame mode  ignores
	      this  flag currently.) Requesting	async screenshots too early or
	      too often	could lead to the same	filenames  being  chosen,  and
	      overwriting each others in undefined order.

       screenshot-to-file <filename> [subtitles|video|window]
	      Take a screenshot	and save it to a given file. The format	of the
	      file will	be guessed by the extension  (and  --screenshot-format
	      is  ignored  - the behavior when the extension is	missing	or un-
	      known is arbitrary).

	      The second argument is like the first argument to	screenshot.

	      If the file already exists, it's overwritten.

	      Like all input command parameters, the filename  is  subject  to
	      property expansion as described in Property Expansion.

	      The  async  flag	has  an	effect on this command (see screenshot

       playlist-next [weak|force]
	      Go to the	next entry on the playlist.

	      weak (default)
		     If	the last file on the playlist is currently played,  do

	      force  Terminate	playback  if  there  are  no more files	on the

       playlist-prev [weak|force]
	      Go to the	previous entry on the playlist.

	      weak (default)
		     If	the first file on the playlist is currently played, do

	      force  Terminate playback	if the first file is being played.

       loadfile	<file> [replace|append|append-play [options]]
	      Load the given file and play it.

	      Second argument:

	      <replace>	(default)
		     Stop  playback of the current file, and play the new file

		     Append the	file to	the playlist.

		     Append the	file, and if  nothing  is  currently  playing,
		     start playback.  (Always starts with the added file, even
		     if	the playlist was not empty before  running  this  com-

	      The  third argument is a list of options and values which	should
	      be  set  while  the  file	 is  playing.  It  is  of   the	  form
	      opt1=value1,opt2=value2,...  Not all options can be changed this
	      way. Some	options	require	a restart of the player.

       loadlist	<playlist> [replace|append]
	      Load the given playlist file (like --playlist).

	      Clear the	playlist, except the currently played file.

       playlist-remove current|<index>
	      Remove the playlist entry	at the given index. Index values start
	      counting	with  0. The special value current removes the current
	      entry. Note that removing	the current entry also stops  playback
	      and starts playing the next entry.

       playlist-move <index1> <index2>
	      Move the playlist	entry at index1, so that it takes the place of
	      the entry	index2.	(Paradoxically,	the moved playlist entry  will
	      not have the index value index2 after moving if index1 was lower
	      than index2, because index2 refers to the	target entry, not  the
	      index the	entry will have	after moving.)

	      Shuffle  the  playlist. This is similar to what is done on start
	      if the --shuffle option is used.

       run command arg1	arg2 ...
	      Run the given command. Unlike in	MPlayer/mplayer2  and  earlier
	      versions	of mpv (0.2.x and older), this doesn't call the	shell.
	      Instead, the command is run directly, with each argument	passed
	      separately.  Each	 argument  is expanded like in Property	Expan-
	      sion. Note that there is a static	limit of (as of	this  writing)
	      9	arguments (this	limit could be raised on demand).

	      The program is run in a detached way. mpv	doesn't	wait until the
	      command is completed, but	continues playback right after	spawn-
	      ing it.

	      To get the old behavior, use /bin/sh and -c as the first two ar-


			run "/bin/sh" "-c" "echo ${title} > /tmp/playing"

			This is	not a particularly good	 example,  because  it
			doesn't	handle escaping, and a specially prepared file
			might allow an attacker	 to  execute  arbitrary	 shell
			commands.  It  is  recommended	to write a small shell
			script,	and call that with run.

       quit [<code>]
	      Exit the player. If an argument is given,	it's used  as  process
	      exit code.

       quit-watch-later	[<code>]
	      Exit  player,  and store current playback	position. Playing that
	      file later will seek to the previous position on start. The (op-
	      tional) argument is exactly as in	the quit command.

       sub-add <file> [<flags> [<title>	[<lang>]]]
	      Load the given subtitle file. It is selected as current subtitle
	      after loading.

	      The flags	args is	one of the following values:

		 Select	the subtitle immediately.

		 Don't select the subtitle. (Or	in  some  special  situations,
		 let the default stream	selection mechanism decide.)

		 Select	the subtitle. If a subtitle with the same filename was
		 already added,	that one is selected, instead of loading a du-
		 plicate  entry.   (In	this case, title/language are ignored,
		 and if	the was	changed	since it  was  loaded,	these  changes
		 won't be reflected.)

	      The title	argument sets the track	title in the UI.

	      The  lang	 argument sets the track language, and can also	influ-
	      ence stream selection with flags set to auto.

       sub-remove [<id>]
	      Remove the given subtitle	track. If the id argument is  missing,
	      remove  the  current  track.  (Works  on external	subtitle files

       sub-reload [<id>]
	      Reload the given subtitle	tracks.	If the id argument is missing,
	      reload  the  current  track.  (Works  on external	subtitle files

	      This works by unloading and re-adding the	subtitle track.

       sub-step	<skip>
	      Change subtitle timing such, that	the subtitle event  after  the
	      next <skip> subtitle events is displayed.	<skip> can be negative
	      to step backwards.

       sub-seek	<skip>
	      Seek to the next (skip set to 1) or the previous	(skip  set  to
	      -1) subtitle.  This is similar to	sub-step, except that it seeks
	      video and	audio instead of adjusting the subtitle	delay.

	      For embedded subtitles (like with	 Matroska),  this  works  only
	      with  subtitle  events  that have	already	been displayed,	or are
	      within a short prefetch range.

       osd [<level>]
	      Toggle OSD level.	If <level> is specified, set the OSD mode (see
	      --osd-level for valid values).

       print-text <string>
	      Print  text  to  stdout.	The string can contain properties (see
	      Property Expansion).

       show-text <string> [<duration>|-	[<level>]]
	      Show text	on the OSD. The	string can contain  properties,	 which
	      are  expanded  as	 described  in Property	Expansion. This	can be
	      used to show playback time, filename, and	so on.

		     The time in ms to show the	message	for.  By  default,  it
		     uses the same value as --osd-duration.

		     The   minimum   OSD  level	 to  show  the	text  at  (see

       expand-text <string>
	      Property-expand the argument and	return	the  expanded  string.
	      This  can	 be  used only through the client API or from a	script
	      using mp.command_native. (see Property Expansion).

	      Show the progress	bar, the elapsed time and the  total  duration
	      of the file on the OSD.

	      Write  the  resume config	file that the quit-watch-later command
	      writes, but continue playback normally.

       stop   Stop playback and	clear playlist.	With default settings, this is
	      essentially  like	 quit. Useful for the client API: playback can
	      be stopped without terminating the player.

       mouse <x> <y> [<button> [single|double]]
	      Send a mouse event with given coordinate (<x>, <y>).

	      Second argument:

		     The button	number of clicked mouse	button.	This should be
		     one  of  0-19.  If	<button> is omitted, only the position
		     will be updated.

	      Third argument:

	      <single> (default)
		     The mouse event represents	regular	single click.

		     The mouse event represents	double-click.

       keypress	<key_name>
	      Send a key event through mpv's input handler,  triggering	 what-
	      ever  behavior  is configured to that key. key_name uses the in-
	      put.conf naming scheme for keys and modifiers.  Useful  for  the
	      client  API:  key	 events	can be sent to libmpv to handle	inter-

       keydown <key_name>
	      Similar to keypress, but sets the	KEYDOWN	flag so	 that  if  the
	      key  is bound to a repeatable command, it	will be	run repeatedly
	      with mpv's key repeat timing until the keyup command is called.

       keyup [<key_name>]
	      Set the KEYUP flag, stopping any repeated	behavior that had been
	      triggered.  key_name is optional.	If key_name is not given or is
	      an empty string, KEYUP will be set on all	keys. Otherwise, KEYUP
	      will only	be set on the key specified by key_name.

       audio-add <file>	[<flags> [<title> [<lang>]]]
	      Load the given audio file. See sub-add command.

       audio-remove [<id>]
	      Remove the given audio track. See	sub-remove command.

       audio-reload [<id>]
	      Reload the given audio tracks. See sub-reload command.

       rescan-external-files [<mode>]
	      Rescan  external	files  according to the	current	--sub-auto and
	      --audio-file-auto	settings. This can be used to auto-load	exter-
	      nal files	after the file was loaded.

	      The mode argument	is one of the following:

	      <reselect> (default)
		     Select the	default	audio and subtitle streams, which typ-
		     ically selects external files with	 the  highest  prefer-
		     ence.  (The  implementation  is not perfect, and could be
		     improved on request.)

		     Do	not change current track selections.

   Input Commands that are Possibly Subject to Change
       af set|add|toggle|del|clr filter1=params,filter2,...
	      Change audio filter chain. See vf	command.

       vf set|add|toggle|del|clr filter1=params,filter2,...
	      Change video filter chain.

	      The first	argument decides what happens:

	      set    Overwrite the previous filter chain with the new one.

	      add    Append the	new filter chain to the	previous one.

	      toggle Check if the given	filter (with the exact parameters)  is
		     already in	the video chain. If yes, remove	the filter. If
		     no, add the filter.  (If several filters  are  passed  to
		     the command, this is done for each	filter.)

		     A	special	variant	is combining this with labels, and us-
		     ing @name without filter name and	parameters  as	filter
		     entry. This toggles the enable/disable flag.

	      del    Remove  the given filters from the	video chain. Unlike in
		     the other cases, the second parameter is  a  comma	 sepa-
		     rated  list  of  filter names or integer indexes. 0 would
		     denote the	first filter. Negative indexes start from  the
		     last filter, and -1 denotes the last filter.

	      clr    Remove  all  filters.  Note  that like the	other sub-com-
		     mands, this does not control automatically	inserted  fil-

	      The  argument  is	 always	needed.	E.g. in	case of	clr use	vf clr

	      You can assign labels to filter by prefixing  them  with	@name:
	      (where  name  is a user-chosen arbitrary identifier). Labels can
	      be used to refer to filters by name in all of the	 filter	 chain
	      modification  commands.	For  add,  using an already used label
	      will replace the existing	filter.

	      The vf command shows the list of requested filters  on  the  OSD
	      after  changing  the filter chain. This is roughly equivalent to
	      show-text	${vf}. Note that auto-inserted filters for format con-
	      version  are  not	 shown on the list, only what was requested by
	      the user.

	      Normally,	the commands will check	whether	 the  video  chain  is
	      recreated	 successfully, and will	undo the operation on failure.
	      If the command is	run before video is configured (can happen  if
	      the command is run immediately after opening a file and before a
	      video frame is decoded), this check can't	be run.	 Then  it  can
	      happen that creating the video chain fails.

		 Example for input.conf

		 o a vf	set flip turn video upside-down	on the a key

		 o b vf	set "" remove all video	filters	on b

		 o c vf	toggle lavfi=gradfun toggle debanding on c

		 Example how to	toggle disabled	filters	at runtime

		 o Add	something vf-add=@deband:!lavfi=[gradfun] to mpv.conf.
		   The @deband:	is the label,  and  deband  is	an  arbitrary,
		   user-given  name  for  this	filter entry. The ! before the
		   filter name disables	the filter by default. Everything  af-
		   ter	this  is the normal filter name	and the	filter parame-

		 o Add a vf toggle @deband to  input.conf.  This  toggles  the
		   "disabled" flag for the filter identified with deband.

       cycle-values ["!reverse"] <property> <value1> <value2> ...
	      Cycle  through  a	list of	values.	Each invocation	of the command
	      will set the given property to the next value in the  list.  The
	      command  maintains an internal counter which value to pick next,
	      and which	is initially 0.	It is reset to 0 once the  last	 value
	      is reached.

	      The  internal  counter is	associated using the property name and
	      the value	list. If multiple commands (bound to  different	 keys)
	      use  the	same name and value list, they will share the internal

	      The special argument !reverse can	be used	 to  cycle  the	 value
	      list  in	reverse.  Compared  with a command that	just lists the
	      value in reverse,	this command will actually share the  internal
	      counter  with  the  forward-cycling  key binding (as long	as the
	      rest of the arguments are	the same).

	      Note that	there is a static limit	of (as of this writing)	10 ar-
	      guments (this limit could	be raised on demand).

       enable-section <section>	[flags]
	      Enable all key bindings in the named input section.

	      The enabled input	sections form a	stack. Bindings	in sections on
	      the top of the stack are preferred to lower sections. This  com-
	      mand  puts  the  section on top of the stack. If the section was
	      already on the stack, it is implicitly  removed  beforehand.  (A
	      section cannot be	on the stack more than once.)

	      The flags	parameter can be a combination (separated by +)	of the
	      following	flags:

		     All sections enabled before the newly enabled section are
		     disabled.	 They will be re-enabled as soon as all	exclu-
		     sive sections above them are removed. In other words, the
		     new section shadows all previous sections.

		     This feature can't	be used	through	the public API.


       disable-section <section>
	      Disable the named	input section. Undoes enable-section.

       define-section <section>	<contents> [default|force]
	      Create  a	named input section, or	replace	the contents of	an al-
	      ready existing input section. The	contents  parameter  uses  the
	      same  syntax  as the input.conf file (except that	using the sec-
	      tion syntax in it	is not allowed), including the need  to	 sepa-
	      rate bindings with a newline character.

	      If the contents parameter	is an empty string, the	section	is re-

	      The section with the name	default	is the normal input section.

	      In general, input	sections have  to  be  enabled	with  the  en-
	      able-section command, or they are	ignored.

	      The last parameter has the following meaning:

	      <default>	(also used if parameter	omitted)
		     Use  a  key  binding  defined by this section only	if the
		     user hasn't already bound this key	to a command.

		     Always bind a key.	(The input section that	was  made  ac-
		     tive most recently	wins if	there are ambiguities.)

	      This  command can	be used	to dispatch arbitrary keys to a	script
	      or a client API user. If the input section defines  script-bind-
	      ing  commands, it	is also	possible to get	separate events	on key
	      up/down, and  relatively	detailed  information  about  the  key
	      state.  The  special  key	name unmapped can be used to match any
	      unmapped key.

       overlay-add <id>	<x> <y>	<file> <offset>	<fmt> <w> <h> <stride>
	      Add an OSD overlay sourced from raw data.	This might  be	useful
	      for  scripts and applications controlling	mpv, and which want to
	      display things on	top of the video window.

	      Overlays are usually displayed in	screen	resolution,  but  with
	      some  VOs, the resolution	is reduced to that of the video's. You
	      can read the osd-width and osd-height properties.	At least  with
	      --vo-xv  and  anamorphic	video (such as DVD), osd-par should be
	      read as well, and	the overlay should be aspect-compensated.

	      id is an integer between 0 and 63	identifying the	 overlay  ele-
	      ment. The	ID can be used to add multiple overlay parts, update a
	      part by using this command with an already existing  ID,	or  to
	      remove  a	part with overlay-remove. Using	a previously unused ID
	      will add a new overlay, while reusing an ID will update it.

	      x	and y specify the position where the OSD should	be displayed.

	      file specifies the file the raw image data is read from. It  can
	      be  either  a numeric UNIX file descriptor prefixed with @ (e.g.
	      @4), or a	filename. The file will	be  mapped  into  memory  with
	      mmap(), copied, and unmapped before the command returns (changed
	      in mpv 0.18.1).

	      It is also possible to pass a raw	memory address for use as bit-
	      map  memory by passing a memory address as integer prefixed with
	      an & character.  Passing the wrong thing	here  will  crash  the
	      player.  This mode might be useful for use with libmpv. The off-
	      set parameter is simply added to the memory address  (since  mpv
	      0.8.0, ignored before).

	      offset is	the byte offset	of the first pixel in the source file.
	      (The current implementation always mmap's	the  whole  file  from
	      position	0  to the end of the image, so large offsets should be
	      avoided. Before mpv 0.8.0, the offset was	 actually  passed  di-
	      rectly to	mmap, but it was changed to make using it easier.)

	      fmt  is  a  string identifying the image format. Currently, only
	      bgra is defined. This format has 4 bytes per pixels, with	8 bits
	      per  component.	The least significant 8	bits are blue, and the
	      most significant 8 bits are alpha	(in little endian, the	compo-
	      nents  are  B-G-R-A,  with B as first byte). This	uses premulti-
	      plied alpha: every color component is  already  multiplied  with
	      the alpha	component. This	means the numeric value	of each	compo-
	      nent is equal to or smaller than the alpha component. (Violating
	      this rule	will lead to different results with different VOs: nu-
	      meric overflows resulting	from blending broken alpha  values  is
	      considered something that	shouldn't happen, and consequently im-
	      plementations don't ensure that you get predictable behavior  in
	      this case.)

	      w, h, and	stride specify the size	of the overlay.	w is the visi-
	      ble width	of the overlay,	while stride gives the width in	 bytes
	      in  memory.  In  the  simple  case,  and	with  the bgra format,
	      stride==4*w.  In general,	the total amount of memory accessed is
	      stride * h.  (Technically, the minimum size would	be stride * (h
	      -	1) + w * 4, but	for simplicity,	the  player  will  access  all
	      stride * h bytes.)

		 Before	 mpv  0.18.1,  you had to do manual "double buffering"
		 when updating an overlay by replacing	it  with  a  different
		 memory	 buffer. Since mpv 0.18.1, the memory is simply	copied
		 and doesn't reference any of the memory indicated by the com-
		 mand's	 arguments  after the commend returns.	If you want to
		 use this command before mpv 0.18.1, reads the old docs	to see
		 how to	handle this correctly.

       overlay-remove <id>
	      Remove  an  overlay added	with overlay-add and the same ID. Does
	      nothing if no overlay with this ID exists.

       script-message <arg1> <arg2> ...
	      Send a message to	all clients, and pass it the following list of
	      arguments.   What	 this  message	means,	how  many arguments it
	      takes, and what the arguments mean is fully up to	 the  receiver
	      and the sender. Every client receives the	message, so be careful
	      about name clashes (or use script-message-to).

       script-message-to <target> <arg1> <arg2>	...
	      Same as script-message, but send it only	to  the	 client	 named
	      <target>.	 Each client (scripts etc.) has	a unique name. For ex-
	      ample, Lua scripts can get their name via	mp.get_script_name().

       script-binding <name>
	      Invoke a script-provided key binding. This can be	used to	 remap
	      key bindings provided by external	Lua scripts.

	      The argument is the name of the binding.

	      It can optionally	be prefixed with the name of the script, using
	      /	as separator, e.g. script-binding scriptname/bindingname.

	      For completeness,	here is	how this command works internally. The
	      details  could  change  any  time.  On  any  matching key	event,
	      script-message-to	or  script-message  is	called	(depending  on
	      whether  the  script name	is included), with the following argu-

	      1. The string key-binding.

	      2. The name of the binding (as established above).

	      3. The key state as string (see below).

	      4. The key name (since mpv 0.15.0).

	      The key state consists of	2 letters:

	      1. One of	d (key was pressed down), u (was released), r (key  is
		 still	down,  and was repeated; only if key repeat is enabled
		 for this binding), p (key was	pressed;  happens  if  up/down
		 can't be tracked).

	      2. Whether  the event originates from the	mouse, either m	(mouse
		 button) or - (something else).

	      Cycle through A-B	loop states. The first command will set	the  A
	      point  (the ab-loop-a property); the second the B	point, and the
	      third will clear both points.

	      Drop audio/video/demuxer buffers,	and restart from fresh.	 Might
	      help  with  unseekable streams that are going out	of sync.  This
	      command might be changed or removed in the future.

       screenshot-raw [subtitles|video|window]
	      Return a screenshot in memory. This can be used only through the
	      client API. The MPV_FORMAT_NODE_MAP returned by this command has
	      the w, h,	stride fields set  to  obvious	contents.  The	format
	      field  is	 set  to  bgr0 by default. This	format is organized as
	      B8G8R8X8 (where B	is the LSB). The contents of the padding X are
	      undefined.  The data field is of type MPV_FORMAT_BYTE_ARRAY with
	      the actual image data. The image is freed	as soon	as the	result
	      mpv_node	is  freed. As usual with client	API semantics, you are
	      not allowed to write to the image	data.

       vf-command <label> <cmd>	<args>
	      Send a command to	the filter with	the given <label>. Use all  to
	      send  it to all filters at once. The command and argument	string
	      is filter	specific. Currently, this only works  with  the	 lavfi
	      filter  -	see the	libavfilter documentation for which commands a
	      filter supports.

	      Note that	the <label> is a mpv filter label, not	a  libavfilter
	      filter name.

       af-command <label> <cmd>	<args>
	      Same as vf-command, but for audio	filters.

       apply-profile <name>
	      Apply  the  contents of a	named profile. This is like using pro-
	      file=name	in a config file, except you can map it	to a key bind-
	      ing to change it at runtime.

	      There  is	 no  such thing	as "unapplying"	a profile - applying a
	      profile merely sets all option values listed within the profile.

       load-script <path>
	      Load a script, similar to	the --script option.

       Undocumented commands: tv-last-channel (TV/DVB only), ao-reload (exper-

       Hooks  are synchronous events between player core and a script or simi-
       lar. This applies to client API (including  the	Lua  scripting	inter-
       face).  Normally,  events are supposed to be asynchronous, and the hook
       API provides an awkward and obscure way to handle events	 that  require
       stricter	 coordination. There are no API	stability guarantees made. Not
       following the protocol exactly can make the player freeze randomly. Ba-
       sically,	nobody should use this API.

       There  are  two special commands	involved. Also,	the client must	listen
       for client messages (MPV_EVENT_CLIENT_MESSAGE in	the C API).

       hook-add	<hook-name> <id> <priority>
	      Subscribe	to the hook identified by the  first  argument	(basi-
	      cally, the name of event). The id	argument is an arbitrary inte-
	      ger chosen by the	user. priority is used to sort all  hook  han-
	      dlers globally across all	clients. Each client can register mul-
	      tiple hook handlers (even	for the	same hook-name). Once the hook
	      is registered, it	cannot be unregistered.

	      When  a  specific	event happens, all registered handlers are run
	      serially.	 This uses a protocol every client has to  follow  ex-
	      plicitly.	  When	a  hook	 handler  is  run,  a  client  message
	      (MPV_EVENT_CLIENT_MESSAGE) is sent to the	 client	 which	regis-
	      tered the	hook. This message has the following arguments:

	      1. the string hook_run

	      2. the  id argument the hook was registered with as string (this
		 can be	used to	correctly handle multiple hooks	registered  by
		 the  same client, as long as the id argument is unique	in the

	      3. something undefined, used by the hook mechanism to track hook
		 execution  (currently,	 it's  the  hook-name,	but this might
		 change	without	warning)

	      Upon receiving this message, the client can  handle  the	event.
	      While  doing this, the player core will still react to requests,
	      but playback will	typically be stopped.

	      When the client is done, it must continue	the core's hook	execu-
	      tion by running the hook-ack command.

       hook-ack	<string>
	      Run  the next hook in the	global chain of	hooks. The argument is
	      the 3rd argument of the client message that starts  hook	execu-
	      tion for the current client.

       The following hooks are currently defined:

	      Called  when a file is to	be opened, before anything is actually
	      done.    For   example,	you   could   read   and   write   the
	      stream-open-filename  property  to  redirect an URL to something
	      else (consider support for streaming sites which rarely give the
	      user a direct media URL),	or you could set per-file options with
	      by setting the property  file-local-options/<option  name>.  The
	      player will wait until all hooks are run.

	      Called  after  a file has	been opened, and before	tracks are se-
	      lected and decoders are created. This has	some usefulness	if  an
	      API  users  wants	to select tracks manually, based on the	set of
	      available	tracks.	It's also useful to initialize --lavfi-complex
	      in  a  specific way by API, without having to "probe" the	avail-
	      able streams at first.

	      Note that	this does not yet apply	default	track selection. Which
	      operations  exactly can be done and not be done, and what	infor-
	      mation is	available and what is not yet available	 yet,  is  all
	      subject to change.

	      Run  before  closing  a file, and	before actually	uninitializing
	      everything. It's not possible to resume playback in this state.

   Input Command Prefixes
       These prefixes are placed between key name and the actual command. Mul-
       tiple prefixes can be specified.	They are separated by whitespace.

	      Use  the	default	behavior for this command. This	is the default
	      for input.conf commands. Some libmpv/scripting/IPC APIs  do  not
	      use this as default, but use no-osd instead.

       no-osd Do not use any OSD for this command.

	      If  possible,  show  a bar with this command. Seek commands will
	      show the progress	bar, property changing commands	may  show  the
	      newly set	value.

	      If possible, show	an OSD message with this command. Seek command
	      show the current playback	time, property changing	commands  show
	      the newly	set value as text.

	      Combine osd-bar and osd-msg.

       raw    Do  not  expand  properties  in string arguments.	(Like "${prop-
	      erty-name}".)  This is the default for some libmpv/scripting/IPC

	      All  string  arguments are expanded as described in Property Ex-
	      pansion.	This is	the default for	input.conf commands.

	      For some commands, keeping a key pressed doesn't run the command
	      repeatedly.  This	prefix forces enabling key repeat in any case.

       async  Allow asynchronous execution (if possible). Note that only a few
	      commands will support this (usually  this	 is  explicitly	 docu-
	      mented).	Some  commands are asynchronous	by default (or rather,
	      their effects might manifest after completion of	the  command).
	      The  semantics  of  this flag might change in the	future.	Set it
	      only if you don't	rely on	the  effects  of  this	command	 being
	      fully realized when it returns.

       All  of the osd prefixes	are still overridden by	the global --osd-level

   Input Sections
       Input sections group a set of bindings, and enable or disable  them  at
       once.  In input.conf, each key binding is assigned to an	input section,
       rather than actually having explicit text sections.

       See also: enable-section	and disable-section commands.

       Predefined bindings:

	      Bindings without input section are implicitly assigned  to  this
	      section. It is enabled by	default	during normal playback.

       encode Section  which  is active	in encoding mode. It is	enabled	exclu-
	      sively, so that bindings in the default sections are ignored.

       Properties are used to set mpv options during runtime, or to query  ar-
       bitrary	information.  They  can	 be manipulated	with the set/add/cycle
       commands, and retrieved with show-text,	or  anything  else  that  uses
       property	expansion. (See	Property Expansion.)

       The property name is annotated with RW to indicate whether the property
       is generally writable.

       If an option is referenced, the property	will normally take/return  ex-
       actly  the  same	 values	 as the	option.	In these cases,	properties are
       merely a	way to change an option	at runtime.

   Property list
	  Most options can be set as runtime via properties as well. Just  re-
	  move	the leading -- from the	option name. These are not documented.
	  Only properties which	do not exist as	option with the	same name,  or
	  which	 have  very different behavior from the	options	are documented

       audio-speed-correction, video-speed-correction
	      Factor multiplied	with speed at which  the  player  attempts  to
	      play  the	 file. Usually it's exactly 1. (Display	sync mode will
	      make this	useful.)

	      OSD formatting will display it in	the form  of  +1.23456%,  with
	      the  number  being  (raw	-  1) *	100 for	the given raw property

	      Return whether --video-sync=display is actually active.

	      Currently	played file, with path stripped. If this  is  an  URL,
	      try  to undo percent encoding as well. (The result is not	neces-
	      sarily correct, but looks	better for display purposes.  Use  the
	      path property to get an unmodified filename.)

	      This has a sub-property:

		     Like the filename property, but if	the text contains a .,
		     strip all text after the last .. Usually this removes the
		     file extension.

	      Length  in bytes of the source file/stream. (This	is the same as
	      ${stream-end}. For ordered chapters and such, the	 size  of  the
	      currently	played segment is returned.)

	      Total number of frames in	current	file.

		 This  is only an estimate. (It's computed from	two unreliable
		 quantities: fps and stream length.)

	      Number of	current	frame in current stream.

		 This is only an estimate. (It's computed from two  unreliable
		 quantities: fps and possibly rounded timestamps.)

       path   Full  path of the	currently played file. Usually this is exactly
	      the same string you pass on the mpv command line or the loadfile
	      command, even if it's a relative path. If	you expect an absolute
	      path, you	will have to determine it yourself, for	example	by us-
	      ing the working-directory	property.

	      If the currently played file has a title tag, use	that.

	      Otherwise,  if  the  media  type is DVD, return the volume ID of

	      Otherwise, return	the filename property.

	      Symbolic name of the file	format.	 In  some  cases,  this	 is  a
	      comma-separated	 list	of   format   names,   e.g.   mp4   is
	      mov,mp4,m4a,3gp,3g2,mj2 (the list	may grow in the	future for any

	      Name of the current demuxer. (This is useless.)

	      (Renamed from demuxer.)

	      Filename	(full  path)  of  the  stream layer filename. (This is
	      probably useless.	It looks like this can be different from  path
	      only when	using e.g. ordered chapters.)

	      Raw  byte	 position  in source stream. Technically, this returns
	      the position of the most recent packet passed to a decoder.

	      Raw end position in bytes	in source stream.

	      Duration of the current file in seconds. If the duration is  un-
	      known,  the property is unavailable. Note	that the file duration
	      is not always exactly known, so this is an estimate.

	      This replaces the	length property, which	was  deprecated	 after
	      the mpv 0.9 release. (The	semantics are the same.)

       avsync Last  A/V	 synchronization  difference.  Unavailable if audio or
	      video is disabled.

	      Total A-V	sync correction	done. Unavailable if audio or video is

	      Video frames dropped by decoder, because video is	too far	behind
	      audio (when using	--framedrop=decoder). Sometimes, this  may  be
	      incremented  in  other  situations,  e.g.	when video packets are
	      damaged, or the decoder doesn't follow the usual rules. Unavail-
	      able if video is disabled.

	      drop-frame-count is a deprecated alias.

	      Frames dropped by	VO (when using --framedrop=vo).

	      vo-drop-frame-count is a deprecated alias.

	      Number  of  video	 frames	 that were not timed correctly in dis-
	      play-sync	mode for the sake of keeping A/V sync. This  does  not
	      include  external	 circumstances,	 such as video rendering being
	      too slow or the graphics driver somehow  skipping	 a  vsync.  It
	      does  not	include	rounding errors	either (which can happen espe-
	      cially with bad source timestamps). For example, using the  dis-
	      play-desync mode should never change this	value from 0.

	      For  how	many  vsyncs  a	frame is displayed on average. This is
	      available	if display-sync	is active only.	For 30 FPS video on  a
	      60 Hz screen, this will be 2. This is the	moving average of what
	      actually has been	scheduled, so 24 FPS on	60 Hz will  never  re-
	      main exactly on 2.5, but jitter depending	on the last frame dis-

	      Estimated	number of frames delayed due to	external circumstances
	      in  display-sync	mode.  Note  that in general, mpv has to guess
	      that this	is happening, and the guess can	be inaccurate.

       percent-pos (RW)
	      Position in current file (0-100).	The advantage over using  this
	      instead  of  calculating	it  out	of other properties is that it
	      properly falls back to estimating	the playback position from the
	      byte position, if	the file duration is not known.

       time-pos	(RW)
	      Position in current file in seconds.

	      Deprecated.  Always returns 0. Before mpv	0.14, this used	to re-
	      turn the start time of the file  (could  affect  e.g.  transport
	      streams).	See --rebase-start-time	option.

	      Remaining	 length	of the file in seconds.	Note that the file du-
	      ration is	not always exactly known, so this is an	estimate.

       audio-pts (R)
	      Current audio playback position in current file in seconds.  Un-
	      like  time-pos, this updates more	often than once	per frame. For
	      audio-only files,	it is mostly equivalent	to time-pos, while for
	      video-only files this property is	not available.

	      time-remaining scaled by the current speed.

       playback-time (RW)
	      Position	in  current file in seconds. Unlike time-pos, the time
	      is clamped to the	range of the file. (Inaccurate file  durations
	      etc.  could  make	it go out of range. Useful on attempts to seek
	      outside of the file, as the seek target time is  considered  the
	      current position during seeking.)

       chapter (RW)
	      Current chapter number. The number of the	first chapter is 0.

       edition (RW)
	      Current MKV edition number. Setting this property	to a different
	      value will restart playback. The number of the first edition  is

	      Number of	BD/DVD titles.

	      This  has	a number of sub-properties. Replace N with the 0-based
	      edition index.

		     Number of titles.

		     Title ID as integer. Currently, this is the same  as  the
		     title index.

		     Length  in	 seconds.  Can	be  unavailable	in a number of
		     cases (currently it works for libdvdnav only).

	      When querying the	property with the client  API  using  MPV_FOR-
	      MAT_NODE,	or with	Lua mp.get_property_native, this will return a
	      mpv_node with the	following contents:

		     MPV_FORMAT_NODE_MAP (for each edition)
			 "id"		     MPV_FORMAT_INT64
			 "length"	     MPV_FORMAT_DOUBLE

	      List of BD/DVD titles.

       disc-title (RW)
	      Current BD/DVD title number. Writing works  only	for  dvdnav://
	      and bd://	(and aliases for these).

	      Number of	chapters.

	      Number of	MKV editions.

	      List of editions,	current	entry marked. Currently, the raw prop-
	      erty value is useless.

	      This has a number	of sub-properties. Replace N with the  0-based
	      edition index.

		     Number of editions. If there are no editions, this	can be
		     0 or 1 (1 if there's a useless dummy edition).

		     Edition ID	as integer. Use	this to	set the	edition	 prop-
		     erty.  Currently, this is the same	as the edition index.

		     yes if this is the	default	edition, no otherwise.

		     Edition  title  as	 stored	in the file. Not always	avail-

	      When querying the	property with the client  API  using  MPV_FOR-
	      MAT_NODE,	or with	Lua mp.get_property_native, this will return a
	      mpv_node with the	following contents:

		     MPV_FORMAT_NODE_MAP (for each edition)
			 "id"		     MPV_FORMAT_INT64
			 "title"	     MPV_FORMAT_STRING
			 "default"	     MPV_FORMAT_FLAG

       angle (RW)
	      Current DVD angle.

	      Metadata key/value pairs.

	      If the property is accessed with	Lua's  mp.get_property_native,
	      this returns a table with	metadata keys mapping to metadata val-
	      ues. If it is accessed with  the	client	API,  this  returns  a
	      MPV_FORMAT_NODE_MAP, with	tag keys mapping to tag	values.

	      For  OSD,	 it  returns a formatted list. Trying to retrieve this
	      property as a raw	string doesn't work.

	      This has a number	of sub-properties:

		     Value of metadata entry <key>.

		     Number of metadata	entries.

		     Key name of the Nth metadata entry. (The first  entry  is

		     Value of the Nth metadata entry.

		     Old version of metadata/by-key/<key>. Use is discouraged,
		     because the metadata key string could conflict with other

	      The  layout of this property might be subject to change. Sugges-
	      tions are	welcome	how exactly this property should work.

	      When querying the	property with the client  API  using  MPV_FOR-
	      MAT_NODE,	or with	Lua mp.get_property_native, this will return a
	      mpv_node with the	following contents:

		     (key and string value for each metadata entry)

	      Like metadata, but includes only fields  listed  in  the	--dis-
	      play-tags	 option.  This is the same set of tags that is printed
	      to the terminal.

	      Metadata of current chapter. Works similar to metadata property.
	      It also allows the same access methods (using sub-properties).

	      Per-chapter  metadata  is	 very  rare. Usually, only the chapter
	      name (title) is set.

	      For accessing other information, like  chapter  start,  see  the
	      chapter-list property.

	      Metadata	added  by video	filters. Accessed by the filter	label,
	      which, if	not explicitly specified using the @filter-label: syn-
	      tax, will	be <filter-name>NN.

	      Works  similar  to  metadata property. It	allows the same	access
	      methods (using sub-properties).

	      An example of this kind of metadata are the cropping  parameters
	      added by --vf=lavfi=cropdetect.

	      Equivalent to vf-metadata/<filter-label>,	but for	audio filters.

	      Return  yes  if  no  file	 is  loaded, but the player is staying
	      around because of	the --idle option.

	      (Renamed from idle.)

	      Return yes if the	playback core is paused,  otherwise  no.  This
	      can  be  different pause in special situations, such as when the
	      player pauses itself due to low network cache.

	      This also	returns	yes if playback	is restarting or if nothing is
	      playing at all. In other words, it's only	no if there's actually
	      video playing. (Behavior since mpv 0.7.0.)

       cache  Network cache fill state (0-100.0).

       cache-size (RW)
	      Network cache size in KB.	This is	similar	to --cache.  This  al-
	      lows setting the cache size at runtime. Currently, it's not pos-
	      sible to enable or disable the cache at runtime using this prop-
	      erty, just to resize an existing cache.

	      This  does  not  include	the backbuffer size (changed after mpv

	      Note that	this tries to keep the cache contents as far as	possi-
	      ble.  To make this easier, the cache resizing code will allocate
	      the new cache while the old cache	is still allocated.

	      Don't use	this when playing DVD or Blu-ray.

       cache-free (R)
	      Total free cache size in KB.

       cache-used (R)
	      Total used cache size in KB.

       cache-speed (R)
	      Current I/O read speed between the cache	and  the  lower	 layer
	      (like  network).	This gives the number bytes per	seconds	over a
	      1	second window (using the type MPV_FORMAT_INT64 for the	client

       cache-idle (R)
	      Returns  yes  if	the  cache  is	idle, which means the cache is
	      filled as	much as	possible, and is currently  not	 reading  more

	      Approximate  duration  of	video buffered in the demuxer, in sec-
	      onds. The	guess is very unreliable, and often the	property  will
	      not be available at all, even if data is buffered.

	      Approximate  time	 of video buffered in the demuxer, in seconds.
	      Same as demuxer-cache-duration but returns the last timestamp of
	      buffered data in demuxer.

	      Returns  yes  if	the  demuxer  is idle, which means the demuxer
	      cache is filled to the requested amount, and  is	currently  not
	      reading more data.

	      Returns  yes  if the stream demuxed via the main demuxer is most
	      likely played via	network. What constitutes "network" is not al-
	      ways  clear, might be used for other types of untrusted streams,
	      could be wrong in	certain	cases, and  its	 definition  might  be
	      changing.	 Also,	external  files	 (like separate	audio files or
	      streams) do not influence	 the  value  of	 this  property	 (cur-

       demuxer-start-time (R)
	      Returns  the  start  time	 reported by the demuxer in fractional

	      Returns yes when playback	is paused because of waiting  for  the

	      Return the percentage (0-100) of the cache fill status until the
	      player will unpause (related to paused-for-cache).

	      Returns yes if end of playback was reached, no  otherwise.  Note
	      that this	is usually interesting only if --keep-open is enabled,
	      since otherwise the player will immediately play the  next  file
	      (or exit or enter	idle mode), and	in these cases the eof-reached
	      property will logically be cleared immediately after it's	set.

	      Returns yes if the player	is  currently  seeking,	 or  otherwise
	      trying  to  restart playback. (It's possible that	it returns yes
	      while a file is loaded, or when switching	ordered	 chapter  seg-
	      ments.  This  is	because	 the  same underlying code is used for
	      seeking and resyncing.)

	      Return yes if the	audio mixer is active, no otherwise.

	      This option is relatively	useless. Before	mpv 0.18.1,  it	 could
	      be used to infer behavior	of the volume property.

       ao-volume (RW)
	      System volume. This property is available	only if	mpv audio out-
	      put is currently active, and only	if the underlying  implementa-
	      tion  supports  volume control. What this	option does depends on
	      the API. For example, on ALSA this usually  changes  system-wide
	      audio,  while with PulseAudio this controls per-application vol-

       ao-mute (RW)
	      Similar to ao-volume, but	controls the mute state. May be	 unim-
	      plemented	even if	ao-volume works.

	      Audio codec selected for decoding.

	      Audio codec.

	      Audio  format as output by the audio decoder.  This has a	number
	      of sub-properties:

		     The sample	format as string. This uses the	same names  as
		     used in other places of mpv.


		     The  channel  layout as a string. This is similar to what
		     the --audio-channels accepts.

		     As	channels, but instead of the possibly  cryptic	actual
		     layout  sent to the audio device, return a	hopefully more
		     human    readable	  form.	     (Usually	  only	   au-
		     dio-out-params/hr-channels	makes sense.)

		     Number  of	audio channels.	This is	redundant to the chan-
		     nels field	described above.

	      When querying the	property with the client  API  using  MPV_FOR-
	      MAT_NODE,	or with	Lua mp.get_property_native, this will return a
	      mpv_node with the	following contents:

		     "format"		 MPV_FORMAT_STRING
		     "samplerate"	 MPV_FORMAT_INT64
		     "channels"		 MPV_FORMAT_STRING
		     "channel-count"	 MPV_FORMAT_INT64
		     "hr-channels"	 MPV_FORMAT_STRING

	      Same as audio-params, but	the format of the data written to  the
	      audio API.

       colormatrix (R)
	      Redirects	 to  video-params/colormatrix. This parameter (as well
	      as similar ones) can be overridden with the format video filter.

       colormatrix-input-range (R)
	      See colormatrix.

       colormatrix-primaries (R)
	      See colormatrix.

       hwdec (RW)
	      Reflects the --hwdec option.

	      Writing to it may	change the currently used hardware decoder, if
	      possible.	 (Internally, the player may reinitialize the decoder,
	      and will perform a seek to refresh the video properly.) You  can
	      watch  the  other	 hwdec properties to see whether this was suc-

	      Unlike in	mpv 0.9.x and before, this does	not  return  the  cur-
	      rently  active hardware decoder. Since mpv 0.18.0, hwdec-current
	      is available for this purpose.

	      Return the current hardware decoding in use. If decoding is  ac-
	      tive,  return  one  of the values	used by	the hwdec option/prop-
	      erty. no indicates software decoding. If no decoder  is  loaded,
	      the property is unavailable.

	      This  returns  the currently loaded hardware decoding/output in-
	      terop driver.  This is known only	once the VO  has  opened  (and
	      possibly	later).	 With  some  VOs  (like	opengl), this might be
	      never known in advance, but only when the	decoder	 attempted  to
	      create  the  hw  decoder successfully. (Using --opengl-hwdec-in-
	      terop can	load  it  eagerly.)  If	 there	are  multiple  drivers
	      loaded, they will	be separated by	,.

	      If  no VO	is active or no	interop	driver is known, this property
	      is unavailable.

	      This does	not necessarily	use the	same values  as	 hwdec.	 There
	      can  be  multiple	interop	drivers	for the	same hardware decoder,
	      depending	on platform and	VO.

	      This is somewhat similar to the  --opengl-hwdec-interop  option,
	      but  it  returns	the  actually loaded backend, not the value of
	      this option.

	      Video format as string.

	      Video codec selected for decoding.

       width, height
	      Video size. This uses the	size of	the video as decoded, or if no
	      video  frame has been decoded yet, the (possibly incorrect) con-
	      tainer indicated size.

	      Video parameters,	as output by the decoder (with overrides  like
	      aspect etc. applied). This has a number of sub-properties:

		     The  pixel	 format	as string. This	uses the same names as
		     used in other places of mpv.

		     Average bits-per-pixel as integer.	Subsampled planar for-
		     mats use a	different resolution, which is the reason this
		     value can sometimes be odd	or confusing. Can be  unavail-
		     able with some formats.

		     Bit  depth	 for  each color component as integer. This is
		     only exposed for planar or	single-component formats,  and
		     is	unavailable for	other formats.

	      video-params/w, video-params/h
		     Video  size  as  integers,	 with no aspect	correction ap-

	      video-params/dw, video-params/dh
		     Video size	as integers, scaled for	correct	aspect ratio.

		     Display aspect ratio as float.

		     Pixel aspect ratio.

		     The colormatrix in	use as string. (Exact  values  subject
		     to	change.)

		     The  colorlevels  as  string.  (Exact  values  subject to

		     The primaries in use as string. (Exact values subject  to

		     The  gamma	 function in use as string. (Exact values sub-
		     ject to change.)

		     The video encoding's nominal peak brightness as float.

		     The video file's tagged signal peak as float.

		     Chroma location  as  string.  (Exact  values  subject  to

		     Intended display rotation in degrees (clockwise).

		     Source  file stereo 3D mode. (See --video-stereo-mode op-

	      When querying the	property with the client  API  using  MPV_FOR-
	      MAT_NODE,	or with	Lua mp.get_property_native, this will return a
	      mpv_node with the	following contents:

		     "pixelformat"	 MPV_FORMAT_STRING
		     "w"		 MPV_FORMAT_INT64
		     "h"		 MPV_FORMAT_INT64
		     "dw"		 MPV_FORMAT_INT64
		     "dh"		 MPV_FORMAT_INT64
		     "aspect"		 MPV_FORMAT_DOUBLE
		     "par"		 MPV_FORMAT_DOUBLE
		     "colormatrix"	 MPV_FORMAT_STRING
		     "colorlevels"	 MPV_FORMAT_STRING
		     "primaries"	 MPV_FORMAT_STRING
		     "gamma"		 MPV_FORMAT_STRING
		     "nom-peak"		 MPV_FORMAT_DOUBLE
		     "sig-peak"		 MPV_FORMAT_DOUBLE
		     "chroma-location"	 MPV_FORMAT_STRING
		     "rotate"		 MPV_FORMAT_INT64
		     "stereo-in"	 MPV_FORMAT_STRING

       dwidth, dheight
	      Video display size. This is the video size after filters and as-
	      pect scaling have	been applied. The actual video window size can
	      still be different from this, e.g. if the	user resized the video
	      window manually.

	      These   have   the   same	  values  as  video-out-params/dw  and

	      Exactly like video-params, but no	overrides applied.

	      Same as video-params, but	after video filters have been applied.
	      If there are no video filters in use, this will contain the same
	      values as	video-params. Note that	this is	still not  necessarily
	      what the video window uses, since	the user can change the	window
	      size, and	all real VOs do	their own scaling  independently  from
	      the filter chain.

	      Has the same sub-properties as video-params.

	      Approximate  information	of the current frame. Note that	if any
	      of these are used	on OSD,	the information	might be off by	a  few
	      frames  due  to  OSD  redrawing and frame	display	being somewhat
	      disconnected, and	you might have to pause	and force a redraw.


	      video-frame-info/picture-type	   video-frame-info/interlaced
	      video-frame-info/tff video-frame-info/repeat

	      Container	 FPS. This can easily contain bogus values. For	videos
	      that use modern container	formats	or video codecs, this will of-
	      ten be incorrect.

	      (Renamed from fps.)

	      Estimated/measured  FPS of the video filter chain	output.	(If no
	      filters are used,	this corresponds to decoder output.) This uses
	      the average of the 10 past frame durations to calculate the FPS.
	      It will be inaccurate if frame-dropping  is  involved  (such  as
	      when framedrop is	explicitly enabled, or after precise seeking).
	      Files with imprecise timestamps (such as Matroska) might lead to
	      unstable results.

       window-scale (RW)
	      Window  size multiplier. Setting this will resize	the video win-
	      dow to the values	contained in  dwidth  and  dheight  multiplied
	      with  the	value set with this property. Setting 1	will resize to
	      original video size (or to be exact, the size the	video  filters
	      output). 2 will set the double size, 0.5 halves the size.

	      Return whether the video window is minimized or not.

	      Names  of	the displays that the mpv window covers. On X11, these
	      are the xrandr names (LVDS1, HDMI1, DP1, VGA1,  etc.).  On  Win-
	      dows, these are the GDI names (\.DISPLAY1, \.DISPLAY2, etc.) and
	      the first	display	in the list will be the	one that Windows  con-
	      siders associated	with the window	(as determined by the Monitor-
	      FromWindow API.)

       display-fps (RW)
	      The refresh rate of the current display. Currently, this is  the
	      lowest  FPS of any display covered by the	video, as retrieved by
	      the underlying system APIs (e.g. xrandr on X11). It is  not  the
	      measured	FPS.  It's not necessarily available on	all platforms.
	      Note that	any of the listed facts	may change any time without  a

	      Only   available	 if   display-sync   mode   (as	  selected  by
	      --video-sync) is active. Returns the actual rate at  which  dis-
	      play refreshes seem to occur, measured by	system time.

	      Estimated	deviation factor of the	vsync duration.

       video-aspect (RW)
	      Video aspect, see	--video-aspect.

	      If video is active, this reports the effective aspect value, in-
	      stead of the value of the	--video-aspect option.

       osd-width, osd-height
	      Last known OSD width (can	be 0). This is needed if you  want  to
	      use  the	overlay-add command. It	gives you the actual OSD size,
	      which can	be different from the window size in some cases.

	      Last known OSD display pixel aspect (can be 0).

       program (W)
	      Switch TS	program	(write-only).

       dvb-channel (W)
	      Pair of integers:	card,channel of	current	DVB  stream.   Can  be
	      switched to switch to another channel on the same	card.

       dvb-channel-name	(RW)
	      Name  of current DVB program.  On	write, a channel-switch	to the
	      named channel on the same	card is	performed. Can	also  be  used
	      for channel switching.

	      Return  the  current subtitle text. Formatting is	stripped. If a
	      subtitle is selected, but	no text	is currently visible,  or  the
	      subtitle	is  not	 text-based  (i.e. DVD/BD subtitles), an empty
	      string is	returned.

	      This property is experimental and	might be removed  in  the  fu-

       tv-brightness, tv-contrast, tv-saturation, tv-hue (RW)
	      TV stuff.

       playlist-pos (RW)
	      Current  position	on playlist. The first entry is	on position 0.
	      Writing to the property will restart playback at the written en-

       playlist-pos-1 (RW)
	      Same as playlist-pos, but	1-based.

	      Number of	total playlist entries.

	      Playlist,	 current  entry	 marked.  Currently,  the raw property
	      value is useless.

	      This has a number	of sub-properties. Replace N with the  0-based
	      playlist entry index.

		     Number of playlist	entries	(same as playlist-count).

		     Filename of the Nth entry.

	      playlist/N/current, playlist/N/playing
		     yes if this entry is currently playing (or	being loaded).
		     Unavailable or no otherwise. When changing	files, current
		     and playing can be	different, because the currently play-
		     ing file hasn't been unloaded yet;	in this	case,  current
		     refers to the new selection. (Since mpv 0.7.0.)

		     Name  of  the  Nth	 entry.	Only available if the playlist
		     file contains such	fields,	and only if mpv's parser  sup-
		     ports it for the given playlist format.

	      When  querying  the  property with the client API	using MPV_FOR-
	      MAT_NODE,	or with	Lua mp.get_property_native, this will return a
	      mpv_node with the	following contents:

		     MPV_FORMAT_NODE_MAP (for each playlist entry)
			 "filename"  MPV_FORMAT_STRING
			 "current"   MPV_FORMAT_FLAG (might be missing;	since mpv 0.7.0)
			 "playing"   MPV_FORMAT_FLAG (same)
			 "title"     MPV_FORMAT_STRING (optional)

	      List of audio/video/sub tracks, current entry marked. Currently,
	      the raw property value is	useless.

	      This has a number	of sub-properties. Replace N with the  0-based
	      track index.

		     Total number of tracks.

		     The  ID as	it's used for -sid/--aid/--vid.	This is	unique
		     within tracks of the  same	 type  (sub/audio/video),  but
		     otherwise not.

		     String  describing	 the  media type. One of audio,	video,

		     Track ID as used in the source file.  Not	always	avail-

		     Track  title  as  it  is  stored  in the file. Not	always

		     Track language as identified  by  the  file.  Not	always

		     yes  if  this  is a video track that consists of a	single
		     picture, no or unavailable	otherwise. This	 is  used  for
		     video  tracks  that are really attached pictures in audio

		     yes if the	track has the default flag set in the file, no

		     yes  if the track has the forced flag set in the file, no

		     The codec name used by this track,	for example h264.  Un-
		     available in some rare cases.

		     yes  if the track is an external file, no otherwise. This
		     is	set for	separate subtitle files.

		     The filename if the track is from an external  file,  un-
		     available otherwise.

		     yes if the	track is currently decoded, no otherwise.

		     The stream	index as usually used by the FFmpeg utilities.
		     Note that this can	be  potentially	 wrong	if  a  demuxer
		     other  than libavformat (--demuxer=lavf) is used. For mkv
		     files, the	index will usually match even if  the  default
		     (builtin)	demuxer	 is used, but there is no hard guaran-

		     If	this track is being decoded,  the  human-readable  de-
		     coder name,

	      track-list/N/demux-w, track-list/N/demux-h
		     Video  size  hint as indicated by the container. (Not al-
		     ways accurate.)

		     Number of audio channels as indicated by  the  container.
		     (Not  always accurate - in	particular, the	track could be
		     decoded as	a different number of channels.)

		     Channel layout as indicated by the	container. (Not	always

		     Audio sample rate as indicated by the container. (Not al-
		     ways accurate.)

		     Video FPS as indicated by the container. (Not always  ac-

	      track-list/N/audio-channels (deprecated)
		     Deprecated	alias for track-list/N/demux-channel-count.

	      track-list/N/replaygain-track-peak,	  track-list/N/replay-
		     Per-track replaygain values.  Only	 available  for	 audio
		     tracks  with  corresponding  information  stored  in  the
		     source file.

	      track-list/N/replaygain-album-peak,  track-list/N/replaygain-al-
		     Per-album	replaygain  values.  If	the file has per-track
		     but no per-album information, the per-album  values  will
		     be	 copied	from the per-track values currently. It's pos-
		     sible that	future mpv versions will make these properties
		     unavailable instead in this case.

	      When  querying  the  property with the client API	using MPV_FOR-
	      MAT_NODE,	or with	Lua mp.get_property_native, this will return a
	      mpv_node with the	following contents:

		     MPV_FORMAT_NODE_MAP (for each track)
			 "id"		     MPV_FORMAT_INT64
			 "type"		     MPV_FORMAT_STRING
			 "src-id"	     MPV_FORMAT_INT64
			 "title"	     MPV_FORMAT_STRING
			 "lang"		     MPV_FORMAT_STRING
			 "albumart"	     MPV_FORMAT_FLAG
			 "default"	     MPV_FORMAT_FLAG
			 "forced"	     MPV_FORMAT_FLAG
			 "selected"	     MPV_FORMAT_FLAG
			 "external"	     MPV_FORMAT_FLAG
			 "external-filename" MPV_FORMAT_STRING
			 "codec"	     MPV_FORMAT_STRING
			 "ff-index"	     MPV_FORMAT_INT64
			 "decoder-desc"	     MPV_FORMAT_STRING
			 "demux-w"	     MPV_FORMAT_INT64
			 "demux-h"	     MPV_FORMAT_INT64
			 "demux-channel-count" MPV_FORMAT_INT64
			 "demux-channels"    MPV_FORMAT_STRING
			 "demux-samplerate"  MPV_FORMAT_INT64
			 "demux-fps"	     MPV_FORMAT_DOUBLE
			 "audio-channels"    MPV_FORMAT_INT64
			 "replaygain-track-peak" MPV_FORMAT_DOUBLE
			 "replaygain-track-gain" MPV_FORMAT_DOUBLE
			 "replaygain-album-peak" MPV_FORMAT_DOUBLE
			 "replaygain-album-gain" MPV_FORMAT_DOUBLE

	      List of chapters,	current	entry marked. Currently, the raw prop-
	      erty value is useless.

	      This has a number	of sub-properties. Replace N with the  0-based
	      chapter index.

		     Number of chapters.

		     Chapter  title  as	 stored	in the file. Not always	avail-

		     Chapter start time	in seconds as float.

	      When querying the	property with the client  API  using  MPV_FOR-
	      MAT_NODE,	or with	Lua mp.get_property_native, this will return a
	      mpv_node with the	following contents:

		     MPV_FORMAT_NODE_MAP (for each chapter)

       af, vf (RW)
	      See --vf/--af and	the vf/af command.

	      When querying the	property with the client  API  using  MPV_FOR-
	      MAT_NODE,	or with	Lua mp.get_property_native, this will return a
	      mpv_node with the	following contents:

		     MPV_FORMAT_NODE_MAP (for each filter entry)
			 "name"	     MPV_FORMAT_STRING
			 "label"     MPV_FORMAT_STRING [optional]
			 "enabled"   MPV_FORMAT_FLAG [optional]
			 "params"    MPV_FORMAT_NODE_MAP [optional]
			     "key"   MPV_FORMAT_STRING
			     "value" MPV_FORMAT_STRING

	      It's also	possible to write the property using this format.

	      Return whether it's generally possible to	seek  in  the  current

	      Return  yes if the current file is considered seekable, but only
	      because the cache	is active. This	means small relative seeks may
	      be  fine,	 but larger seeks may fail anyway. Whether a seek will
	      succeed or not is	generally not known in advance.

	      If this property returns true, seekable will also	return true.

	      Return whether playback is stopped or is to be stopped.  (Useful
	      in  obscure situations like during on_load hook processing, when
	      the user can stop	playback, but the script has to	explicitly end

       cursor-autohide (RW)
	      See  --cursor-autohide.  Setting this to a new value will	always
	      update the cursor, and reset the internal	timer.

	      Inserts the current OSD symbol as	opaque OSD control code	 (cc).
	      This  makes  sense  only	with  the show-text command or options
	      which set	OSD messages.  The control code	is implementation spe-
	      cific and	is useless for anything	else.

	      ${osd-ass-cc/0}  disables	escaping ASS sequences of text in OSD,
	      ${osd-ass-cc/1} enables it again.	By default, ASS	sequences  are
	      escaped  to  avoid  accidental formatting, and this property can
	      disable this behavior. Note that the properties return an	opaque
	      OSD  control code, which only makes sense	for the	show-text com-
	      mand or options which set	OSD messages.


		 o --osd-status-msg='This is ${osd-ass-cc/0}{\\b1}bold text'

		 o show-text "This is ${osd-ass-cc/0}{\b1}bold text"

	      Any ASS override tags as understood by libass can	be used.

	      Note that	you need to escape the \ character, because the	string
	      is processed for C escape	sequences before passing it to the OSD

	      A	    list     of	    tags     can      be      found	 here:

	      Return whether the VO is configured right	now. Usually this cor-
	      responds	to  whether  the  video	 window	 is  visible.  If  the
	      --force-window  option  is  used,	this is	usually	always returns

	      Some video output	performance metrics. Not  implemented  by  all
	      VOs. This	has a number of	sup-properties,	of the form vo-perfor-
	      mance/<metric>-<value>, all of them in milliseconds.

	      <metric> refers to one of:

	      upload Time needed to make the frame available to	 the  GPU  (if

	      render Time needed to perform all	necessary video	postprocessing
		     and rendering passes (if necessary).

		     Time needed to present a rendered frame on-screen.

	      When a step is unnecessary or skipped, it	will have the value 0.

	      <value> refers to	one of:

	      last   Last measured value.

	      avg    Average over a fixed number of past samples.  (The	 exact
		     timeframe varies, but it should generally be a handful of

	      peak   The peak (highest value) within this averaging range.

	      When querying the	property with the client  API  using  MPV_FOR-
	      MAT_NODE,	or with	Lua mp.get_property_native, this will return a
	      mpv_node with the	following contents:

		     "<metric>-<value>"	 MPV_FORMAT_INT64

	      (One entry for each <metric> and <value> combination)

       video-bitrate, audio-bitrate, sub-bitrate
	      Bitrate values calculated	on the packet level. This works	by di-
	      viding  the  bit	size  of  all packets between two keyframes by
	      their presentation timestamp distance. (This uses	the timestamps
	      are  stored  in the file,	so e.g.	playback speed does not	influ-
	      ence the returned	values.) In particular,	the video bitrate will
	      update  only  per	keyframe, and show the "past" bitrate. To make
	      the property more	UI friendly, updates to	these  properties  are
	      throttled	in a certain way.

	      The  unit	 is bits per second. OSD formatting turns these	values
	      in kilobits (or megabits,	if appropriate),  which	 can  be  pre-
	      vented  by  using	the raw	property value,	e.g. with ${=video-bi-

	      Note that	the accuracy of	these properties is  influenced	 by  a
	      few  factors.  If	the underlying demuxer rewrites	the packets on
	      demuxing (done for some file  formats),  the  bitrate  might  be
	      slightly	off.  If  timestamps  are  bad or jittery (like	in Ma-
	      troska), even constant bitrate streams  might  show  fluctuating

	      How  exactly these values	are calculated might change in the fu-

	      In earlier versions of mpv, these	properties returned  a	static
	      (but bad)	guess using a completely different method.

       packet-video-bitrate, packet-audio-bitrate, packet-sub-bitrate
	      Old  and deprecated properties for video-bitrate,	audio-bitrate,
	      sub-bitrate. They	behave exactly the same, but return a value in
	      kilobits.	 Also,	they don't have	any OSD	formatting, though the
	      same can be achieved with	e.g. ${=video-bitrate}.

	      These properties shouldn't be used anymore.

	      Return the list of discovered audio devices. This	is mostly  for
	      use  with	 the client API, and reflects what --audio-device=help
	      with the command line player returns.

	      When querying the	property with the client  API  using  MPV_FOR-
	      MAT_NODE,	or with	Lua mp.get_property_native, this will return a
	      mpv_node with the	following contents:

		     MPV_FORMAT_NODE_MAP (for each device entry)
			 "name"		 MPV_FORMAT_STRING
			 "description"	 MPV_FORMAT_STRING

	      The name is what is to be	passed to  the	--audio-device	option
	      (and  often  a  rather cryptic audio API-specific	ID), while de-
	      scription	is human readable free form text. The  description  is
	      set  to the device name (minus mpv-specific <driver>/ prefix) if
	      no description is	available or the description would  have  been
	      an empty string.

	      The  special entry with the name set to auto selects the default
	      audio output driver and the default device.

	      The property can be watched with the property observation	mecha-
	      nism  in the client API and in Lua scripts. (Technically,	change
	      notification is enabled the first	time this property is read.)

       audio-device (RW)
	      Set the audio device. This directly reads/writes the --audio-de-
	      vice  option,  but  on  write accesses, the audio	output will be
	      scheduled	for reloading.

	      Writing this property while no audio output is active  will  not
	      automatically  enable audio. (This is also true in the case when
	      audio was	disabled due to	reinitialization failure after a  pre-
	      vious write access to audio-device.)

	      This  property also doesn't tell you which audio device is actu-
	      ally in use.

	      How these	details	are handled may	change in the future.

	      Current video output driver (name	as used	with --vo).

	      Current audio output driver (name	as used	with --ao).

	      Return the audio device selected by the AO driver	 (only	imple-
	      mented for some drivers: currently only coreaudio).

	      Return  the  working directory of	the mpv	process. Can be	useful
	      for JSON IPC users, because  the	command	 line  player  usually
	      works with relative paths.

	      List  of protocol	prefixes potentially recognized	by the player.
	      They are returned	without	trailing :// suffix  (which  is	 still
	      always required).	 In some cases,	the protocol will not actually
	      be supported (consider https if ffmpeg is	not compiled with  TLS

	      List  of	decoders  supported.  This lists decoders which	can be
	      passed to	--vd and --ad.

	      family Decoder driver. Usually lavc for libavcodec.

	      codec  Canonical codec name, which identifies the	format the de-
		     coder can handle.

	      driver The  name	of the decoder itself. Often, this is the same
		     as	codec.	Sometimes it can be different. It is  used  to
		     distinguish multiple decoders for the same	codec.

		     Human readable description	of the decoder and codec.

	      When  querying  the  property with the client API	using MPV_FOR-
	      MAT_NODE,	or with	Lua mp.get_property_native, this will return a
	      mpv_node with the	following contents:

		     MPV_FORMAT_NODE_MAP (for each decoder entry)
			 "family"	 MPV_FORMAT_STRING
			 "codec"	 MPV_FORMAT_STRING
			 "driver"	 MPV_FORMAT_STRING
			 "description"	 MPV_FORMAT_STRING

	      List  of	libavcodec  encoders.  This has	the same format	as de-
	      coder-list.  The encoder names (driver entries) can be passed to
	      --ovc  and  --oac	(without the lavc: prefix required by --vd and

	      Return the mpv version/copyright string. Depending  on  how  the
	      binary  was built, it might contain either a release version, or
	      just a git hash.

	      Return the configuration arguments  which	 were  passed  to  the
	      build  system  (typically	 the  way  ./waf configure ... was in-

	      Return the contents of the av_version_info() API call. This is a
	      string  which identifies the build in some way, either through a
	      release version number, or a git hash. This applies to Libav  as
	      well  (the  property  is still named the same.) This property is
	      unavailable if mpv is linked against older FFmpeg	and Libav ver-

       options/<name> (RW)
	      Read-only	 access	 to value of option --<name>. Most options can
	      be changed at runtime by writing to  this	 property.  Note  that
	      many  options require reloading the file for changes to take ef-
	      fect. If there is	an equivalent  property,  prefer  setting  the
	      property instead.

	      There  shouldn't	be any reason to access	options/<name> instead
	      of <name>, except	in situations in  which	 the  properties  have
	      different	behavior or conflicting	semantics.

	      Similar  to  options/<name>,  but	when setting an	option through
	      this property, the option	is reset to its	 old  value  once  the
	      current  file  has  stopped  playing.  Trying to write an	option
	      while no file is playing (or is being loaded) results in an  er-

	      (Note  that  if an option	is marked as file-local, even options/
	      will access the local value, and the old value,  which  will  be
	      restored on end of playback, cannot be read or written until end
	      of playback.)

	      Additional per-option information.

	      This has a number	of sub-properties.  Replace  <name>  with  the
	      name  of	a top-level option. No guarantee of stability is given
	      to any of	these sub-properties - they may	 change	 radically  in
	      the feature.

		     Returns the name of the option.

		     Return  the name of the option type, like String or Inte-
		     ger.  For many complex types, this	isn't very accurate.

		     Return yes	if the option was set  from  the  mpv  command
		     line,  no otherwise. What this is set to if the option is
		     e.g. changed at runtime is	 left  undefined  (meaning  it
		     could change in the future).

		     Return  yes  if  the option was set per-file. This	is the
		     case with automatically loaded  profiles,	file-dir  con-
		     figs,  and	other cases. It	means the option value will be
		     restored to the value before playback start when playback

		     The default value of the option. May not always be	avail-

	      option-info/<name>/min, option-info/<name>/max
		     Integer minimum and maximum values	allowed	 for  the  op-
		     tion.  Only available if the options are numeric, and the
		     minimum/maximum has been set internally. It's also	possi-
		     ble that only one of these	is set.

		     If	 the  option is	a choice option, the possible choices.
		     Choices that are integers may  or	may  not  be  included
		     (they  can	 be implied by min and max). Note that options
		     which behave like choice  options,	 but  are  not	actual
		     choice  options internally, may not have this info	avail-

	      Return the list of top-level properties.

	      Return the list of profiles and their contents. This  is	highly
	      implementation-specific,	and may	change any time. Currently, it
	      returns an array of options for each profile. Each option	has  a
	      name  and	 a  value,  with  the  value  currently	always being a
	      string. Note that	the options array is not a map,	as order  mat-
	      ters  and	duplicate entries are possible.	Recursive profiles are
	      not expanded, and	show up	as special profile options.

   Inconsistencies between options and properties
       You can access (almost) all options as  properties,  though  there  are
       some caveats with some properties (due to historical reasons):

       vid, aid, sid
	      While playback is	active,	you can	set existing tracks only. (The
	      option allows setting any	track ID, and which tracks  to	enable
	      is chosen	at loading time.)

	      Option changes at	runtime	are affected by	this as	well.

	      While video is active, this behaves differently from the option.
	      It will never return the auto value (but the state  as  observed
	      by the video chain). If you set auto, the	property will set this
	      as the option value, and will  return  the  actual  video	 chain
	      state as observed	instead	of auto.

	      While  video  is active, always returns the effective aspect ra-
	      tio. Setting a special value (like no, values <=	0)  will  make
	      the  property set	this as	option,	and return whatever actual as-
	      pect was derived from the	option setting.

       brightness (and other color options)
	      If --vo=xv is used, these	properties may	return	the  adapter's
	      current values instead of	the option values.

	      If  a  VO	is created, this will return either the	actual display
	      FPS, or an invalid value,	instead	of the option value.

       vf, af If you set the properties	during playback, and the filter	 chain
	      fails  to	 reinitialize, the new value will be rejected. Setting
	      the option or setting the	property outside of playback will  al-
	      ways  succeed/fail  in  the  same	way. Also, there are no	vf-add
	      etc. properties, but you can use the vf/af group of commands  to
	      achieve the same.

	      Option changes at	runtime	are affected by	this as	well.

	      While  a file is loaded, the property will always	return the ef-
	      fective edition, and setting the auto value will	show  somewhat
	      strange  behavior	(the property eventually switching to whatever
	      is the default edition).

	      The property is  read-only  and  returns	the  current  internal
	      playlist.	The option is for loading playlist during command line
	      parsing. For client API uses, you	should use the	loadlist  com-
	      mand instead.

	      Might  verify  the set value when	setting	while a	window is cre-

       audio-file, sub-file, external-file
	      These options/properties are actually  lists  of	filenames.  To
	      make  the	 command-line  interface easier, each --audio-file=...
	      option appends the full string to	the  internal  list.  However,
	      when  used  as  properties, every	time you set the property as a
	      string the internal list will be replaced	with  a	 single	 entry
	      containing  the  string you set. , or other separators are never
	      used. You	have to	use  MPV_FORMAT_NODE_ARRAY  (or	 corresponding
	      API,  e.g.  mp.set_property_native() with	a table	in Lua)	to set
	      multiple entries.

	      Strictly speaking,  option  access  via  API  (e.g.  mpv_set_op-
	      tion_string())  has the same problem, and	it's only a difference
	      between CLI/API.

       playlist-pos, chapter
	      These properties behave different	from  the  deprecated  options
	      with the same names.

   Property Expansion
       All string arguments to input commands as well as certain options (like
       --term-playing-msg) are subject to property expansion. Note that	 prop-
       erty  expansion	does  not work in places where e.g. numeric parameters
       are expected.  (For example, the	add command does not do	 property  ex-
       pansion.	The set	command	is an exception	and not	a general rule.)

	  Example for input.conf

	  i show-text Filename:	${filename}
		 shows	the  filename  of the current file when	pressing the i

       Within input.conf, property expansion can be inhibited by  putting  the
       raw prefix in front of commands.

       The following expansions	are supported:

	      Expands  to  the	value  of the property NAME. If	retrieving the
	      property fails, expand to	an error string. (Use ${NAME:} with  a
	      trailing	:  to  expand to an empty string instead.)  If NAME is
	      prefixed with =, expand to the raw value of  the	property  (see
	      section below).

	      Expands  to  the value of	the property NAME, or STR if the prop-
	      erty cannot be retrieved.	STR is expanded	recursively.

	      Expands to STR (recursively) if the property NAME	is available.

	      Expands to STR (recursively) if the property NAME	cannot be  re-

	      Expands  to  STR (recursively) if	the property NAME expands to a
	      string equal to VALUE. You can prefix NAME with =	 in  order  to
	      compare  the raw value of	a property (see	section	below).	If the
	      property is unavailable, or other	errors happen when  retrieving
	      it,  the value is	never considered equal.	 Note that VALUE can't
	      contain any of the characters : or }.  Also, it is possible that
	      escaping	with  "	 or % might be added in	the future, should the
	      need arise.

	      Same as with the ? variant, but STR is expanded if the value  is
	      not equal. (Using	the same semantics as with ?.)

       $$     Expands to $.

       $}     Expands to }. (To	produce	this character inside recursive	expan-

       $>     Disable property expansion and special handling  of  $  for  the
	      rest of the string.

       In  places where	property expansion is allowed, C-style escapes are of-
       ten accepted as well. Example:

	  o \n becomes a newline character

	  o \\ expands to \

   Raw and Formatted Properties
       Normally, properties are	formatted as human-readable text, meant	to  be
       displayed  on OSD or on the terminal. It	is possible to retrieve	an un-
       formatted (raw) value from a property by	prefixing  its	name  with  =.
       These  raw  values  can be parsed by other programs and follow the same
       conventions as the options associated with the properties.


	  o ${time-pos}	expands	to 00:14:23 (if	playback  position  is	at  14
	    minutes 23 seconds)

	  o ${=time-pos}  expands to 863.4 (same time, plus 400	milliseconds -
	    milliseconds are normally not shown	in the formatted case)

       Sometimes, the difference in amount of information carried by  raw  and
       formatted  property values can be rather	big. In	some cases, raw	values
       have  more  information,	 like  higher  precision  than	seconds	  with
       time-pos.  Sometimes  it	 is the	other way around, e.g. aid shows track
       title and language in the formatted case, but only the track number  if
       it is raw.

       The  On Screen Controller (short: OSC) is a minimal GUI integrated with
       mpv to offer basic mouse-controllability. It is intended	to make	inter-
       action easier for new users and to enable precise and direct seeking.

       The  OSC	is enabled by default if mpv was compiled with Lua support. It
       can be disabled entirely	using the --osc=no option.

   Using the OSC
       By default, the OSC will	show up	whenever the mouse is moved inside the
       player  window  and will	hide if	the mouse is not moved outside the OSC
       for 0.5 seconds or if the mouse leaves the window.

   The Interface
	  | pl prev | pl next  |  title					  |    cache |
	  | play | skip	| skip | time	 |  seekbar  | time | audio | sub | vol	| fs |
	  |	 | back	| frwd | elapsed |	     | left |	    |	  |	|    |

       pl prev

			|left-click    | play  previous	  file	 in |
			|	       | playlist		    |
			|right-click   | show playlist		    |
			|shift+L-click | show playlist		    |

       pl next

			|left-click    | play next file	in playlist |

			|right-click   | show playlist		    |
			|shift+L-click | show playlist		    |

	      Displays current media-title, filename, or custom	title

			 |left-click  |	show playlist position and |
			 |	      |	length and full	title	   |
			 |right-click |	show filename		   |

	      Shows current cache fill status


			      |left-click | toggle play/pause |

       skip back

			|left-click    | go to beginning of chapter |
			|	       | / previous chapter	    |
			|right-click   | show chapters		    |
			|shift+L-click | show chapters		    |

       skip frwd

			    |left-click	   | go	to next	chapter	|
			    |right-click   | show chapters	|
			    |shift+L-click | show chapters	|

       time elapsed
	      Shows current playback position timestamp

			 |left-click | toggle	displaying  time- |
			 |	     | codes with milliseconds	  |

	      Indicates	current	playback position and position of chapters

			      |left-click | seek to position |

       time left
	      Shows remaining playback time timestamp

			 |left-click | toggle between  total  and |
			 |	     | remaining time		  |

       audio and sub
	      Displays selected	track and amount of available tracks

			|left-click    | cycle	 audio/sub   tracks |
			|	       | forward		    |
			|right-click   | cycle	 audio/sub   tracks |
			|	       | backwards		    |
			|shift+L-click | show  available  audio/sub |
			|	       | tracks			    |


			       |left-click  | toggle mute    |
			       |mouse wheel | volume up/down |


			      |left-click | toggle fullscreen |

   Key Bindings
       These key bindings are active by	default	if  nothing  else  is  already
       bound  to  these	 keys.	In case	of collision, the function needs to be
       bound to	a different key. See the Script	Commands section.

			 |del |	Cycles visibility  between |
			 |    |	never  / auto (mouse-move) |
			 |    |	/ always		   |

       The OSC offers limited configuration through  a	config	file  lua-set-
       tings/osc.conf  placed  in mpv's	user dir and through the --script-opts
       command-line option. Options provided  through  the  command-line  will
       override	those from the config file.

   Config Syntax
       The config file must exactly follow the following syntax:

	  # this is a comment

       #  can only be used at the beginning of a line and there	may be no spa-
       ces around the =	or anywhere else.

   Command-line	Syntax
       To avoid	collisions with	other scripts, all options need	to be prefixed
       with osc-.



   Configurable	Options
       layout Default: bottombar

	      The  layout  for the OSC.	Currently available are: box, slimbox,
	      bottombar	and topbar. Default pre-0.21.0 was 'box'.

	      Default: bar

	      Sets the style of	the seekbar,  slider  (diamond	marker),  knob
	      (circle  marker  with guide), or bar (fill).  Default pre-0.21.0
	      was 'slider'.

	      Default: 0.5

	      Size of the deadzone. The	deadzone is an	area  that  makes  the
	      mouse act	like leaving the window. Movement there	won't make the
	      OSC show up and it will hide immediately if the mouse enters it.
	      The deadzone starts at the window	border opposite	to the OSC and
	      the size controls	how much of the	window it  will	 span.	Values
	      between  0.0  and	 1.0,  where 0 means the OSC will always popup
	      with mouse movement in the window, and 1 means the OSC will only
	      show up when the mouse hovers it.	Default	pre-0.21.0 was 0.

	      Default: 0

	      Minimum  amount of pixels	the mouse has to move between ticks to
	      make the OSC show	up. Default pre-0.21.0 was 3.

	      Default: yes

	      Enable the OSC when windowed

	      Default: yes

	      Enable the OSC when fullscreen

	      Default: 1.0

	      Scale factor of the OSC when windowed.

	      Default: 1.0

	      Scale factor of the OSC when fullscreen

	      Default: 2.0

	      Scale factor of the OSC when rendered on a forced	(dummy)	window

	      Default: yes

	      Scale the	OSC with the video no tries to keep the	OSC size  con-
	      stant as much as the window size allows

       valign Default: 0.8

	      Vertical alignment, -1 (top) to 1	(bottom)

       halign Default: 0.0

	      Horizontal alignment, -1 (left) to 1 (right)

	      Default: 0

	      Margin from bottom (bottombar) or	top (topbar), in pixels

	      Default: 80

	      Alpha  of	the background box, 0 (opaque) to 255 (fully transpar-

	      Default: 500

	      Duration in ms until the OSC hides if no	mouse  movement,  must
	      not be negative

	      Default: 200

	      Duration of fade out in ms, 0 = no fade

       title  Default: ${media-title}

	      String  that  supports property expansion	that will be displayed
	      as OSC title.  ASS tags are escaped, and newlines	 and  trailing
	      slashes are stripped.

	      Default: 1

	      Size  of the tooltip outline when	using bottombar	or topbar lay-

	      Default: no

	      Show total time instead of time remaining

       timems Default: no

	      Display timecodes	with milliseconds

	      Default: auto (auto hide/show on mouse move)

	      Also supports never and always

	      Default: 80

	      Max chars	for the	osc title at the box layout. mpv does not mea-
	      sure  the	 text  width  on screen	and so it needs	to limit it by
	      number of	chars. The default is conservative to allow wide fonts
	      to  be used without overflow.  However, with many	common fonts a
	      bigger number can	be used. YMMV.

   Script Commands
       The OSC script listens to certain script	commands. These	 commands  can
       bound in	input.conf, or sent by other scripts.

	      Show  a  message	on screen using	the OSC. First argument	is the
	      message, second the duration in seconds.

	      Controls visibility mode never / auto (on	mouse move)  /	always
	      and also cycle to	cycle between the modes


       You  could  put this into input.conf to hide the	OSC with the a key and
       to set auto mode	(the default) with b:

	  a script-message osc-visibility never
	  b script-message osc-visibility auto

       osc-playlist, osc-chapterlist, osc-tracklist
	      Shows a limited view of the respective type of  list  using  the
	      OSC. First argument is duration in seconds.

       mpv  can	 load  Lua  scripts. Scripts passed to the --script option, or
       found in	the scripts subdirectory of the	 mpv  configuration  directory
       (usually	 ~/.config/mpv/scripts/)  will be loaded on program start. mpv
       also appends the	scripts	subdirectory to	the end	of Lua's path  so  you
       can  import  scripts from there too. Since it's added to	the end, don't
       name scripts you	want to	import the same	as Lua libraries because  they
       will be overshadowed by them.

       mpv  provides  the built-in module mp, which contains functions to send
       commands	to the mpv core	and to	retrieve  information  about  playback
       state, user settings, file information, and so on.

       These  scripts  can  be	used  to control mpv in	a similar way to slave
       mode.  Technically, the Lua code	uses the client	API internally.

       A script	which leaves fullscreen	mode when the player is	paused:

	  function on_pause_change(name, value)
	      if value == true then
		  mp.set_property("fullscreen",	"no")
	  mp.observe_property("pause", "bool", on_pause_change)

   Details on the script initialization	and lifecycle
       Your script will	be loaded by the player	 at  program  start  from  the
       scripts	configuration  subdirectory, or	from a path specified with the
       --script	option.	Some scripts are loaded	internally (like --osc).  Each
       script  runs  in	 its own thread. Your script is	first run "as is", and
       once that is done, the event loop is entered. This event	loop will dis-
       patch events received by	mpv and	call your own event handlers which you
       have  registered	 with  mp.register_event,   or	 timers	  added	  with
       mp.add_timeout or similar.

       When  the  player  quits,  all scripts will be asked to terminate. This
       happens via a shutdown event, which by default will make	the event loop
       return.	If your	script got into	an endless loop, mpv will probably be-
       have fine during	playback, but it won't terminate  when	quitting,  be-
       cause it's waiting on your script.

       Internally,  the	 C code	will call the Lua function mp_event_loop after
       loading a Lua script. This function is normally defined by the  default
       prelude	loaded	before your script (see	player/lua/defaults.lua	in the
       mpv sources).  The event	loop will wait for events and dispatch	events
       registered  with	 mp.register_event.  It	 will also handle timers added
       with mp.add_timeout and similar (by waiting with	a timeout).

       Since mpv 0.6.0,	the player will	wait until the script is fully	loaded
       before  continuing  normal  operation. The player considers a script as
       fully loaded as soon as it starts waiting for mpv events	(or it exits).
       In  practice  this  means  the  player will more	or less	hang until the
       script returns from the main chunk (and mp_event_loop  is  called),  or
       the  script calls mp_event_loop or mp.dispatch_events directly. This is
       done to make it possible	for a script to	 fully	setup  event  handlers
       etc.  before playback actually starts. In older mpv versions, this hap-
       pened asynchronously.

   mp functions
       The mp module is	preloaded, although it can be loaded manually with re-
       quire 'mp'. It provides the core	client API.

	      Run  the	given command. This is similar to the commands used in
	      input.conf.  See List of Input Commands.

	      By default, this will show something on the  OSD	(depending  on
	      the command), as if it was used in input.conf. See Input Command
	      Prefixes how to influence	OSD usage per command.

	      Returns true on success, or nil, error on	error.

       mp.commandv(arg1, arg2, ...)
	      Similar to mp.command, but pass each command argument  as	 sepa-
	      rate  parameter.	This  has the advantage	that you don't have to
	      care about quoting and escaping in some cases.


		 mp.command("loadfile "	.. filename .. " append")
		 mp.commandv("loadfile", filename, "append")

	      These two	commands are equivalent, except	that the first version
	      breaks  if the filename contains spaces or certain special char-

	      Note that	properties are	not  expanded.	 You  can  use	either
	      mp.command, the expand-properties	prefix,	or the mp.get_property
	      family of	functions.

	      Unlike mp.command, this will not use OSD by default either  (ex-
	      cept for some OSD-specific commands).

       mp.command_native(table [,def])
	      Similar  to  mp.commandv,	 but  pass the argument	list as	table.
	      This has the advantage that in at	least  some  cases,  arguments
	      can be passed as native types.

	      Returns a	result table on	success	(usually empty), or def, error
	      on error.	def is the second parameter provided to	the  function,
	      and is nil if it's missing.

       mp.get_property(name [,def])
	      Return  the value	of the given property as string. These are the
	      same properties as used in input.conf. See Properties for	a list
	      of  properties.  The  returned  string  is  formatted similar to
	      ${=name} (see Property Expansion).

	      Returns the string on success, or	def, error on  error.  def  is
	      the  second  parameter  provided	to the function, and is	nil if
	      it's missing.

       mp.get_property_osd(name	[,def])
	      Similar to mp.get_property, but return the property  value  for-
	      matted  for OSD. This is the same	string as printed with ${name}
	      when used	in input.conf.

	      Returns the string on success, or	def, error on  error.  def  is
	      the  second  parameter provided to the function, and is an empty
	      string if	it's missing. Unlike get_property(), assigning the re-
	      turn value to a variable will always result in a string.

       mp.get_property_bool(name [,def])
	      Similar  to  mp.get_property,  but  return the property value as

	      Returns a	Boolean	on success, or def, error on error.

       mp.get_property_number(name [,def])
	      Similar to mp.get_property, but return  the  property  value  as

	      Note  that  while	 Lua does not distinguish between integers and
	      floats, mpv internals do.	This function simply request a	double
	      float  from  mpv,	 and mpv will usually convert integer property
	      values to	float.

	      Returns a	number on success, or def, error on error.

       mp.get_property_native(name [,def])
	      Similar to mp.get_property, but return the property value	 using
	      the  best	Lua type for the property. Most	time, this will	return
	      a	string,	Boolean, or number. Some properties (for example chap-
	      ter-list)	are returned as	tables.

	      Returns  a  value	 on success, or	def, error on error. Note that
	      nil might	be a possible, valid value too in some corner cases.

       mp.set_property(name, value)
	      Set  the	given  property	 to  the  given	 string	  value.   See
	      mp.get_property  and Properties for more information about prop-

	      Returns true on success, or nil, error on	error.

       mp.set_property_bool(name, value)
	      Similar to mp.set_property, but set the given  property  to  the
	      given Boolean value.

       mp.set_property_number(name, value)
	      Similar  to  mp.set_property,  but set the given property	to the
	      given numeric value.

	      Note that	while Lua does not distinguish	between	 integers  and
	      floats,  mpv  internals  do. This	function will test whether the
	      number can be represented	as integer, and	if so, it will pass an
	      integer value to mpv, otherwise a	double float.

       mp.set_property_native(name, value)
	      Similar to mp.set_property, but set the given property using its
	      native type.

	      Since there are several data types which cannot represented  na-
	      tively in	Lua, this might	not always work	as expected. For exam-
	      ple, while the Lua wrapper  can  do  some	 guesswork  to	decide
	      whether  a  Lua table is an array	or a map, this would fail with
	      empty tables. Also, there	are not	many properties	for  which  it
	      makes  sense  to	use  this,  instead of set_property, set_prop-
	      erty_bool, set_property_number.  For these reasons,  this	 func-
	      tion  should  probably be	avoided	for now, except	for properties
	      that use tables natively.

	      Return the current mpv internal time in  seconds	as  a  number.
	      This is basically	the system time, with an arbitrary offset.

       mp.add_key_binding(key, name|fn [,fn [,flags]])
	      Register	callback  to be	run on a key binding. The binding will
	      be mapped	to the given key, which	is  a  string  describing  the
	      physical key. This uses the same key names as in input.conf, and
	      also allows combinations (e.g. ctrl+a). If the key is  empty  or
	      nil,  no physical	key is registered, but the user	still can cre-
	      ate own bindings (see below).

	      After calling this function, key presses will cause the function
	      fn  to  be called	(unless	the user remapped the key with another

	      The name argument	should be a short symbolic string.  It	allows
	      the  user	 to  remap  the	 key  binding via input.conf using the
	      script-message command, and the name of the key binding (see be-
	      low  for	an  example).  The  name should	be unique across other
	      bindings in the same script - if not, the	previous binding  with
	      the  same	 name  will  be	overwritten. You can omit the name, in
	      which case a random name is generated internally.

	      The last argument	is used	for optional flags. This is  a	table,
	      which can	have the following entries:

			If  set	 to true, enables key repeat for this specific

			If set to true,	then fn	is called on both key  up  and
			down  events (as well as key repeat, if	enabled), with
			the first argument being a table. This	table  has  an
			event  entry, which is set to one of the strings down,
			repeat,	up or press (the latter	if key	up/down	 can't
			be  tracked).  It further has an is_mouse entry, which
			tells whether the event	was caused by a	mouse button.

	      Internally, key bindings	are  dispatched	 via  the  script-mes-
	      sage-to	or   script-binding   input   commands	and  mp.regis-

	      Trying to	map multiple commands to a key will essentially	prefer
	      a	random binding,	while the other	bindings are not called. It is
	      guaranteed that user defined bindings in the central  input.conf
	      are  preferred  over  bindings added with	this function (but see


		 function something_handler()
		     print("the	key was	pressed")
		 mp.add_key_binding("x", "something", something_handler)

	      This will	print the message the  key  was	 pressed  when	x  was

	      The  user	can remap these	key bindings. Then the user has	to put
	      the following into their input.conf to remap the command to  the
	      y	key:

		 y script-binding something

	      This  will  print	the message when the key y is pressed. (x will
	      still work, unless the user remaps it.)

	      You can also explicitly send a message to	a named	 script	 only.
	      Assume the above script was using	the filename fooscript.lua:

		 y script-binding fooscript/something

	      This  works almost the same as mp.add_key_binding, but registers
	      the key binding in a way that will overwrite the	user's	custom
	      bindings in their	input.conf. (mp.add_key_binding	overwrites de-
	      fault key	bindings  only,	 but  not  those  by  the  user's  in-

	      Remove   a   key	 binding   added  with	mp.add_key_binding  or
	      mp.add_forced_key_binding. Use the same name as  you  used  when
	      adding  the  bindings.  It's not possible	to remove bindings for
	      which you	omitted	the name.

       mp.register_event(name, fn)
	      Call a specific function when an event happens. The  event  name
	      is a string, and the function fn is a Lua	function value.

	      Some  events  have associated data. This is put into a Lua table
	      and passed as argument to	fn. The	Lua table by default  contains
	      a	 name  field,  which is	a string containing the	event name. If
	      the event	has an error associated, the error field is set	 to  a
	      string describing	the error, on success it's not set.

	      If  multiple  functions  are registered for the same event, they
	      are run in registration order, which the first registered	 func-
	      tion running before all the other	ones.

	      Returns true if such an event exists, false otherwise.

	      See Events and List of events for	details.

	      Undo mp.register_event(..., fn). This removes all	event handlers
	      that are equal to	the fn parameter. This uses normal Lua == com-
	      parison, so be careful when dealing with closures.

       mp.observe_property(name, type, fn)
	      Watch  a	property for changes. If the property name is changed,
	      then the function	fn(name) will be called. type can be  nil,  or
	      be set to	one of none, native, bool, string, or number.  none is
	      the same as nil. For all other values,  the  new	value  of  the
	      property	will  be  passed  as  second  argument	to  fn,	 using
	      mp.get_property_<type> to	retrieve it. This means	if type	is for
	      example string, fn is roughly called as in fn(name, mp.get_prop-

	      If possible, change events  are  coalesced.  If  a  property  is
	      changed a	bunch of times in a row, only the last change triggers
	      the change function. (The	exact behavior depends on  timing  and
	      other things.)

	      In  some	cases  the function is not called even if the property
	      changes.	Whether	this can happen	depends	on the property.

	      If the type is none or nil, sporadic property change events  are
	      possible.	 This  means the change	function fn can	be called even
	      if the property doesn't actually change.

	      Undo mp.observe_property(..., fn).  This	removes	 all  property
	      handlers	that  are  equal to the	fn parameter. This uses	normal
	      Lua == comparison, so be careful when dealing with closures.

       mp.add_timeout(seconds, fn)
	      Call the given function fn when the given	number of seconds  has
	      elapsed.	Note that the number of	seconds	can be fractional. For
	      now, the timer's resolution may be as low	 as  50	 ms,  although
	      this will	be improved in the future.

	      This is a	one-shot timer:	it will	be removed when	it's fired.

	      Returns a	timer object. See mp.add_periodic_timer	for details.

       mp.add_periodic_timer(seconds, fn)
	      Call  the	given function periodically. This is like mp.add_time-
	      out, but the timer is re-added after the function	fn is run.

	      Returns a	timer object. The timer	object provides	the  following

		     stop() Disable  the  timer.  Does nothing if the timer is
			    already disabled.  This will remember the  current
			    elapsed  time  when	stopping, so that resume() es-
			    sentially unpauses the timer.

		     kill() Disable the	timer. Resets the  elapsed  time.  re-
			    sume() will	restart	the timer.

			    Restart  the timer.	If the timer was disabled with
			    stop(), this  will	resume	at  the	 time  it  was
			    stopped. If	the timer was disabled with kill(), or
			    if it's a previously fired one-shot	 timer	(added
			    with  add_timeout()),  this	 starts	the timer from
			    the	 beginning,  using  the	 initially  configured

			    Whether the	timer is currently enabled or was pre-
			    viously disabled (e.g. by stop() or	kill()).

		     timeout (RW)
			    This field contains	the  current  timeout  period.
			    This value is not updated as time progresses. It's
			    only used to calculate when	the timer should  fire
			    next when the timer	expires.

			    If	you  write this, you can call t:kill() ; t:re-
			    sume() to reset the	current	 timeout  to  the  new
			    one. (t:stop() won't use the new timeout.)

		     oneshot (RW)
			    Whether  the  timer	 is  periodic (false) or fires
			    just once (true). This  value  is  used  when  the
			    timer expires (but before the timer	callback func-
			    tion fn is run).

	      Note that	these are method, and you have to call	them  using  :
	      instead		 of	       .	   (Refer	    to .)


		 seconds = 0
		 timer = mp.add_periodic_timer(1, function()
		     print("called every second")
		     # stop it after 10	seconds
		     seconds = seconds + 1
		     if	seconds	>= 10 then

	      Return a setting from the	--script-opts option. It's up  to  the
	      user  and	 the script how	this mechanism is used.	Currently, all
	      scripts can access this equally, so you should be	careful	 about

	      Return  the name of the current script. The name is usually made
	      of the filename of the script, with directory and	file extension
	      removed.	If there are several scripts which would have the same
	      name, it's made unique by	appending a number.


			The script /path/to/fooscript.lua becomes fooscript.

       mp.osd_message(text [,duration])
	      Show an OSD message on the screen. duration is in	 seconds,  and
	      is optional (uses	--osd-duration by default).

   Advanced mp functions
       These also live in the mp module, but are documented separately as they
       are useful only in special situations.

	      This function has	been deprecated	in mpv 0.21.0 and does nothing
	      starting with mpv	0.23.0 (no replacement).

	      This function has	been deprecated	in mpv 0.21.0 and does nothing
	      starting with mpv	0.23.0 (no replacement).

	      This function has	been deprecated	in mpv 0.21.0 and does nothing
	      starting with mpv	0.23.0 (no replacement).

	      Calls  mpv_get_wakeup_pipe()  and	 returns  the  read end	of the
	      wakeup pipe. (See	client.h for details.)

	      Return  the  relative  time  in  seconds	when  the  next	 timer
	      (mp.add_timeout  and similar) expires. If	there is no timer, re-
	      turn nil.

	      This can be used to run custom event loops. If you want to  have
	      direct control what the Lua script does (instead of being	called
	      by the default event loop), you  can  set	 the  global  variable
	      mp_event_loop  to	your own function running the event loop. From
	      your event loop, you should call mp.dispatch_events() to dequeue
	      and dispatch mpv events.

	      If  the  allow_wait  parameter is	set to true, the function will
	      block until the next event is received or	 the  next  timer  ex-
	      pires.  Otherwise	(and this is the default behavior), it returns
	      as soon as the event loop	is emptied. It's strongly  recommended
	      to  use mp.get_next_timeout() and	mp.get_wakeup_pipe() if	you're
	      interested in properly working notification of  new  events  and
	      working timers.

	      Register	an  event  loop	idle handler. Idle handlers are	called
	      before the script	goes to	sleep after handling all  new  events.
	      This  can	 be  used  for example to delay	processing of property
	      change events: if	you're observing multiple properties at	 once,
	      you might	not want to act	on each	property change, but only when
	      all change notifications have been received.

	      Undo mp.register_idle(fn). This removes all idle	handlers  that
	      are  equal to the	fn parameter. This uses	normal Lua == compari-
	      son, so be careful when dealing with closures.

	      Set the minimum log level	of which mpv  message  output  to  re-
	      ceive.  These  messages are normally printed to the terminal. By
	      calling this function, you can set the minimum log level of mes-
	      sages  which  should be received with the	log-message event. See
	      the description of this event  for  details.   The  level	 is  a
	      string, see msg.log for allowed log levels.

       mp.register_script_message(name,	fn)
	      This is a	helper to dispatch script-message or script-message-to
	      invocations to Lua functions. fn is called if script-message  or
	      script-message-to	 (with this script as destination) is run with
	      name as first parameter. The other parameters are	passed to  fn.
	      If  a  message  with  the	given name is already registered, it's

	      Used by mp.add_key_binding, so be	careful	about name collisions.

	      Undo a previous  registration  with  mp.register_script_message.
	      Does nothing if the name wasn't registered.

   mp.msg functions
       This  module  allows  outputting	 messages  to the terminal, and	can be
       loaded with require 'mp.msg'.

       msg.log(level, ...)
	      The level	parameter is the message priority. It's	a  string  and
	      one  of  fatal, error, warn, info, v, debug. The user's settings
	      will determine which of these messages  will  be	visible.  Nor-
	      mally, all messages are visible, except v	and debug.

	      The  parameters  after that are all converted to strings.	Spaces
	      are inserted to separate multiple	parameters.

	      You don't	need to	add newlines.

       msg.fatal(...), msg.error(...), msg.warn(...),,  msg.ver-
       bose(...), msg.debug(...)
	      All  of  these are shortcuts and equivalent to the corresponding
	      msg.log(level, ...) call.

   mp.options functions
       mpv comes with a	built-in module	to manage  options  from  config-files
       and  the	command-line. All you have to do is to supply a	table with de-
       fault options to	the read_options function. The function	will overwrite
       the  default  values  with values found in the config-file and the com-
       mand-line (in that order).

       options.read_options(table [, identifier])
	      A	table with key-value pairs. The	type of	the default values  is
	      important	for converting the values read from the	config file or
	      command-line back. Do not	use nil	as a default value!

	      The identifier is	used to	identify the config-file and the  com-
	      mand-line	 options.  These  needs	 to unique to avoid collisions
	      with other scripts.  Defaults to mp.get_script_name().

       Example implementation:

	  require 'mp.options'
	  local	options	= {
	      optionA =	"defaultvalueA",
	      optionB =	-0.5,
	      optionC =	true,
	  read_options(options,	"myscript")

       The config file will be stored in lua-settings/identifier.conf in mpv's
       user  folder.  Comment lines can	be started with	# and stray spaces are
       not removed.  Boolean values will be represented	with yes/no.

       Example config:

	  # comment
	  optionA=Hello	World

       Command-line options are	read  from  the	 --script-opts	parameter.  To
       avoid collisions, all keys have to be prefixed with identifier-.

       Example command-line:


   mp.utils functions
       This  built-in  module  provides	 generic helper	functions for Lua, and
       have strictly speaking nothing to do with mpv or	video/audio  playback.
       They  are  provided  for	 convenience. Most compensate for Lua's	scarce
       standard	library.

       Be warned that any of these functions might disappear  any  time.  They
       are not strictly	part of	the guaranteed API.

	      Returns the directory that mpv was launched from.	On error, nil,
	      error is returned.

       utils.readdir(path [, filter])
	      Enumerate	all entries at the given path on the  filesystem,  and
	      return  them  as array. Each entry is a directory	entry (without
	      the path).  The list is unsorted (in whatever order the  operat-
	      ing system returns it).

	      If the filter argument is	given, it must be one of the following

		 files	List regular files only.  This	excludes  directories,
			special	 files	(like UNIX device files	or FIFOs), and
			dead symlinks. It includes UNIX	 symlinks  to  regular

		 dirs	List  directories  only, or symlinks to	directories. .
			and ..	are not	included.

		 normal	Include	the results of both files and dirs.  (This  is
			the default.)

		 all	List  all  entries,  even device files,	dead symlinks,
			FIFOs, and the . and ..	entries.

	      On error,	nil, error is returned.

	      Split a path into	directory component  and  filename  component,
	      and return them. The first return	value is always	the directory.
	      The second return	value is the trailing part of  the  path,  the
	      directory	entry.

       utils.join_path(p1, p2)
	      Return the concatenation of the 2	paths. Tries to	be clever. For
	      example, if `p2 is an absolute  path,  p2	 is  returned  without

	      Runs  an	external  process  and	waits  until it	exits. Returns
	      process status and the captured output.

	      The parameter t is a table. The function reads the following en-

		 args	Array  of  strings.  The first array entry is the exe-
			cutable. This can be either an	absolute  path,	 or  a
			filename  with	no  path components, in	which case the
			PATH environment variable is used to resolve the  exe-
			cutable.  The  other array elements are	passed as com-
			mand line arguments.

			Optional. If set to true (default), then if  the  user
			stops  playback	 or  goes  to  the next	file while the
			process	is running, the	process	will be	killed.

			Optional. The maximum size in bytes of the  data  that
			can be captured	from stdout. (Default: 16 MB.)

	      The  function  returns  a	table as result	with the following en-

		 status	The raw	exit status of the process. It will  be	 nega-
			tive on	error.

		 stdout	Captured output	stream as string, limited to max_size.

		 error	nil  on	 success. The string killed if the process was
			terminated in an unusual way. The string init  if  the
			process	could not be started.

			On  Windows,  killed is	only returned when the process
			has been killed	by mpv as a result of cancellable  be-
			ing set	to true.

			Set to true if the process has been killed by mpv as a
			result of cancellable being set	to true.

	      Runs an external process and detaches it from mpv's control.

	      The parameter t is a table. The function reads the following en-

		 args	Array  of  strings  of	the same semantics as the args
			used in	the subprocess function.

	      The function returns nil.

       utils.parse_json(str [, trail])
	      Parses the given string argument as JSON,	and returns  it	 as  a
	      Lua  table.  On  error, returns nil, error. (Currently, error is
	      just a string reading error, because there  is  no  fine-grained
	      error reporting of any kind.)

	      The  returned  value  uses  similar  conventions as mp.get_prop-
	      erty_native() to distinguish empty objects and arrays.

	      If the trail parameter is	true (or any  value  equal  to	true),
	      then  trailing non-whitespace text is tolerated by the function,
	      and the trailing text is returned	as 3rd return value. (The  3rd
	      return  value  is	 always	there, but with	trail set, no error is

	      Format the given Lua table (or value) as a JSON string  and  re-
	      turn it. On error, returns nil, error. (Errors usually only hap-
	      pen on value types incompatible with JSON.)

	      The argument value  uses	similar	 conventions  as  mp.set_prop-
	      erty_native() to distinguish empty objects and arrays.

	      Turn  the	 given	value  into a string. Formats tables and their
	      contents.	This doesn't do	anything special; it  is  only	needed
	      because Lua is terrible.

       Events  are notifications from player core to scripts. You can register
       an event	handler	with mp.register_event.

       Note that all scripts (and other	parts of the  player)  receive	events
       equally,	 and  there's no such thing as blocking	other scripts from re-
       ceiving events.


	  function my_fn(event)
	      print("start of playback!")

	  mp.register_event("file-loaded", my_fn)

   List	of events
	      Happens right before a new file  is  loaded.  When  you  receive
	      this,  the  player is loading the	file (or possibly already done
	      with it).

	      Happens after a file was unloaded. Typically,  the  player  will
	      load  the	 next  file  right  away, or quit if this was the last

	      The event	has the	reason field, which takes one of these values:

	      eof    The file has ended. This can (but doesn't	have  to)  in-
		     clude  incomplete files or	broken network connections un-
		     der circumstances.

	      stop   Playback was ended	by a command.

	      quit   Playback was ended	by sending the quit command.

	      error  An	error happened.	 In  this  case,  an  error  field  is
		     present with the error string.

		     Happens   with   playlists	  and	similar.  Details  see

		     Unknown. Normally doesn't happen, unless the Lua  API  is
		     out  of  sync  with the C API. (Likewise, it could	happen
		     that your script gets reason strings that did  not	 exist
		     yet at the	time your script was written.)

	      Happens after a file was loaded and begins playback.

       seek   Happens  on  seeking.  (This might include cases when the	player
	      seeks internally,	even without user interaction.	This  includes
	      e.g.  segment  changes  when  playing  ordered chapters Matroska

	      Start of playback	after seek or after file was loaded.

       idle   Idle mode	is entered. This happens when playback ended, and  the
	      player  was  started with	--idle or --force-window. This mode is
	      implicitly ended when the	start-file or shutdown events happen.

       tick   Called after a video frame was displayed.	This is	 a  hack,  and
	      you  should  avoid  using	it. Use	timers instead and maybe watch
	      pausing/unpausing	events to avoid	wasting	CPU when the player is

	      Sent  when  the  player  quits, and the script should terminate.
	      Normally handled automatically. See Details on the  script  ini-
	      tialization and lifecycle.

	      Receives	messages  enabled with mp.enable_messages. The message
	      data is contained	in the table passed as first parameter to  the
	      event  handler.	The table contains, in addition	to the default
	      event fields, the	following fields:

	      prefix The module	prefix,	identifies the sender of the  message.
		     This  is  what  the  terminal player puts in front	of the
		     message text when using the --v option, and is also  what
		     is	used for --msg-level.

	      level  The  log  level  as  string. See msg.log for possible log
		     level names.  Note	that later versions of mpv  might  add
		     new levels	or remove (undocumented) existing ones.

	      text   The log message. The text will end	with a newline charac-
		     ter. Sometimes it can contain multiple lines.

	      Keep in mind that	these messages are meant to be hints  for  hu-
	      mans.  You  should not parse them, and prefix/level/text of mes-
	      sages might change any time.

	      Undocumented (not	useful for Lua scripts).

	      Undocumented (not	useful for Lua scripts).

	      Undocumented (not	useful for Lua scripts).

	      Undocumented (used internally).

	      Happens on video output or filter	reconfig.

	      Happens on audio output or filter	reconfig.

       The following events also happen, but are  deprecated:  tracks-changed,
       track-switched,	pause,	unpause,  metadata-update, chapter-change. Use
       mp.observe_property() instead.

       This documents experimental features, or	features that  are  "too  spe-
       cial" to	guarantee a stable interface.

       mp.add_hook(type, priority, fn)
	      Add  a  hook  callback  for type (a string identifying a certain
	      kind of hook). These hooks allow the player to call script func-
	      tions and	wait for their result (normally, the Lua scripting in-
	      terface is asynchronous from the point of	 view  of  the	player
	      core).  priority	is  an	arbitrary integer that allows ordering
	      among hooks of the same kind. Using the value 50 is  recommended
	      as neutral default value.	fn is the function that	will be	called
	      during execution of the hook.

	      See Hooks	for currently existing hooks and what they do  -  only
	      the hook list is interesting; handling hook execution is done by
	      the Lua script function automatically.

       mpv can be controlled by	external programs  using  the  JSON-based  IPC
       protocol.  It can be enabled by specifying the path to a	unix socket or
       a named pipe using the option --input-ipc-server. Clients  can  connect
       to  this	 socket	and send commands to the player	or receive events from

	  This is not intended to be a secure network protocol.	It is  explic-
	  itly	insecure:  there  is no	authentication,	no encryption, and the
	  commands themselves are insecure too.	For example, the  run  command
	  is exposed, which can	run arbitrary system commands. The use-case is
	  controlling the player locally.  This	 is  not  different  from  the
	  MPlayer slave	protocol.

   Socat example
       You  can	use the	socat tool to send commands (and receive replies) from
       the shell. Assuming mpv was started with:

	  mpv file.mkv --input-ipc-server=/tmp/mpvsocket

       Then you	can control it using socat:

	  > echo '{ "command": ["get_property",	"playback-time"] }' | socat - /tmp/mpvsocket

       In this case, socat copies data between stdin/stdout and	the mpv	socket

       See the --idle option how to make mpv start without exiting immediately
       or playing a file.

       It's also possible to send input.conf style text-only commands:

	  > echo 'show-text ${playback-time}' |	socat -	/tmp/mpvsocket

       But you won't get a reply over the  socket.  (This  particular  command
       shows the playback time on the player's OSD.)

   Command Prompt example
       Unfortunately,  it's  not  as easy to test the IPC protocol on Windows,
       since Windows ports of socat (in	Cygwin	and  MSYS2)  don't  understand
       named  pipes.  In the absence of	a simple tool to send and receive from
       bidirectional pipes, the	echo command can be used to send commands, but
       not receive replies from	the command prompt.

       Assuming	mpv was	started	with:

	  mpv file.mkv --input-ipc-server=\\.\pipe\mpvsocket

       You can send commands from a command prompt:

	  echo show-text ${playback-time} >\\.\pipe\mpvsocket

       To  be able to simultaneously read and write from the IPC pipe, like on
       Linux, it's necessary to	write an external program that uses overlapped
       file I/O	(or some wrapper like .NET's NamedPipeClientStream.)

       Clients	can execute commands on	the player by sending JSON messages of
       the following form:

	  { "command": ["command_name",	"param1", "param2", ...] }

       where command_name is the name of the command to	be executed,  followed
       by  a  list  of parameters. Parameters must be formatted	as native JSON
       values (integers, strings, booleans, ...). Every	message	must be	termi-
       nated  with  \n.	 Additionally,	\n must	not appear anywhere inside the
       message.	In practice this means that messages should be minified	before
       being sent to mpv.

       mpv  will then send back	a reply	indicating whether the command was run
       correctly, and an additional field holding the command-specific	return
       data (it	can also be null).

	  { "error": "success",	"data":	null }

       mpv  will also send events to clients with JSON messages	of the follow-
       ing form:

	  { "event": "event_name" }

       where event_name	is the name of the  event.  Additional	event-specific
       fields  can  also be present. See List of events	for a list of all sup-
       ported events.

       Because events can occur	at any time, it	may be difficult at  times  to
       determine  which	response goes with which command. Commands may option-
       ally include a request_id which,	if provided in	the  command  request,
       will  be	 copied	verbatim into the response. mpv	does not intrepret the
       request_id in any way; it is solely for the use of the requester.

       For example, this request:

	  { "command": ["get_property",	"time-pos"], "request_id": 100 }

       Would generate this response:

	  { "error": "success",	"data":	1.468135, "request_id":	100 }

       All commands, replies, and events are separated from each other with  a
       line break character (\n).

       If  the	first character	(after skipping	whitespace) is not {, the com-
       mand will be interpreted	as non-JSON text command, as they are used  in
       input.conf  (or	mpv_command_string() in	the client API). Additionally,
       lines starting with # and empty lines are ignored.

       Currently, embedded 0 bytes terminate the current line, but you	should
       not rely	on this.

       In  addition to the commands described in List of Input Commands, a few
       extra commands can also be used as part of the protocol:

	      Return the name of the client as	string.	 This  is  the	string
	      ipc-N with N being an integer number.

	      Return  the  current mpv internal	time in	microseconds as	a num-
	      ber. This	is basically the system	time, with an  arbitrary  off-

	      Return  the  value of the	given property.	The value will be sent
	      in the data field	of the replay message.


		 { "command": ["get_property", "volume"] }
		 { "data": 50.0, "error": "success" }

	      Like get_property, but the  resulting  data  will	 always	 be  a


		 { "command": ["get_property_string", "volume"]	}
		 { "data": "50.000000",	"error": "success" }

	      Set  the	given  property	to the given value. See	Properties for
	      more information about properties.


		 { "command": ["set_property", "pause",	true] }
		 { "error": "success" }

	      Like set_property, but the argument  value  must	be  passed  as


		 { "command": ["set_property_string", "pause", "yes"] }
		 { "error": "success" }

	      Watch  a property	for changes. If	the given property is changed,
	      then an event of type property-change will be generated


		 { "command": ["observe_property", 1, "volume"]	}
		 { "error": "success" }
		 { "event": "property-change", "id": 1,	"data":	52.0, "name": "volume" }

	      Like observe_property, but the resulting data will always	 be  a


		 { "command": ["observe_property_string", 1, "volume"] }
		 { "error": "success" }
		 { "event": "property-change", "id": 1,	"data":	"52.000000", "name": "volume" }

	      Undo  observe_property or	observe_property_string. This requires
	      the numeric id passed to the observed command as argument.


		 { "command": ["unobserve_property", 1]	}
		 { "error": "success" }

	      Enable output of mpv log messages.  They	will  be  received  as
	      events.  The  parameter  to  this	 command is the	log-level (see
	      mpv_request_log_messages C API function).

	      Log message output is meant for humans only (mostly  for	debug-
	      ging).  Attempting to retrieve information by parsing these mes-
	      sages will just lead to breakages	with future mpv	releases.  In-
	      stead,  make  a feature request, and ask for a proper event that
	      returns the information you need.

       enable_event, disable_event
	      Enables  or  disables  the  named	 event.	 Mirrors  the  mpv_re-
	      quest_event C API	function. If the string	all is used instead of
	      an event name, all events	are enabled or disabled.

	      By default, most events are enabled, and there is	not  much  use
	      for this command.

	      Returns  the  client API version the C API of the	remote mpv in-
	      stance provides.

	      See also:	DOCS/client-api-changes.rst.

       Normally, all strings are  in  UTF-8.  Sometimes	 it  can  happen  that
       strings	are  in	some broken encoding (often happens with file tags and
       such, and filenames on many Unixes are not required to be in UTF-8  ei-
       ther).  This  means that	mpv sometimes sends invalid JSON. If that is a
       problem for the client application's parser, it should filter  the  raw
       data  for  invalid UTF-8	sequences and perform the desired replacement,
       before feeding the data to its JSON parser.

       mpv will	not attempt to construct invalid UTF-8 with broken escape  se-

       There is	no real	changelog, but you can look at the following things:

       o The   release	changelog,  which  should  contain  most  user-visible
	 changes, including new	features and bug fixes:

       o The git log, which is the "real" changelog

       o The files client-api-changes.rst  and	interface-changes.rst  in  the
	 DOCS  sub directoryon the git repository, which document API and user
	 interface changes (the	 latter	 usually  documents  breaking  changes
	 only, rather than additions).

       o The  file  mplayer-changes.rst	 in  the DOCS sub directory on the git
	 repository, which used	to be in place of this section.	 It  documents
	 some  changes	that  happened since mplayer2 forked off MPlayer. (Not
	 updated anymore.)

       mpv can be embedded into	other programs as video/audio  playback	 back-
       end.  The recommended way to do so is using libmpv. See libmpv/client.h
       in the mpv source code repository. This provides	a C API. Bindings  for
       other languages might be	available (see wiki).

       Since  libmpv  merely  allows  access to	underlying mechanisms that can
       control mpv, further documentation is spread over a few places:






       You can write C plugins for mpv.	These use  the	libmpv	API,  although
       they do not use the libmpv library itself.

       Currently,  they	 must  be  explicitly enabled at build time with --en-
       able-cplugins. They are available on Linux/BSD platforms	only.

   C plugins location
       C plugins are put into the mpv scripts directory	in its	config	direc-
       tory (see the FILES section for details). They must have	a .so file ex-
       tension.	 They can also be explicitly loaded with the --script option.

       A C plugin must export the following function:

	  int mpv_open_cplugin(mpv_handle *handle)

       The plugin function will	be called on loading time. This	function  does
       not  return  as	long  as  your	plugin	is  loaded (it runs in its own
       thread).	The handle will	be deallocated as soon as the plugin  function

       The return value	is interpreted as error	status.	A value	of 0 is	inter-
       preted as success, while	-1 signals an error. In	the latter  case,  the
       player prints an	uninformative error message that loading failed.

       Return  values  other than 0 and	-1 are reserved, and trigger undefined

       Within the plugin function, you can call	libmpv API functions. The han-
       dle  is created by mpv_create_client() (or actually an internal equiva-
       lent), and belongs to you. You can call mpv_wait_event()	 to  wait  for
       things happening, and so	on.

       Note   that   the   player   might   block   until  your	 plugin	 calls
       mpv_wait_event()	for the	first time. This gives you a chance to install
       initial hooks etc.  before playback begins.

       The details are quite similar to	Lua scripts.

   Linkage to libmpv
       The  current  implementation  requires that your	plugins	are not	linked
       against libmpv. What your plugins uses are not symbols  from  a	libmpv
       binary, but symbols from	the mpv	host binary.



       There are a number of environment variables that	can be used to control
       the behavior of mpv.

	      Used to determine	mpv config directory.  If  XDG_CONFIG_HOME  is
	      not set, $HOME/.config/mpv is used.

	      $HOME/.mpv  is  always  added to the list	of config search paths
	      with a lower priority.

	      If set, XDG-style	system	configuration  directories  are	 used.
	      Otherwise, the UNIX convention (PREFIX/etc/mpv/) is used.

	      Directory	where mpv looks	for user settings. Overrides HOME, and
	      mpv will try to load the config file as $MPV_HOME/mpv.conf.

       MPV_VERBOSE (see	also -v	and --msg-level)
	      Set the initial verbosity	level across all message modules  (de-
	      fault: 0).  This is an integer, and the resulting	verbosity cor-
	      responds to the number of	--v  options  passed  to  the  command

	      If set to	1, enable internal talloc leak reporting.

	      Specifies	 the  search  path for LADSPA plugins. If it is	unset,
	      fully qualified path names must be used.

	      Standard X11 display name	to use.

	      This library accesses various  environment  variables.  However,
	      they  are	 not centrally documented, and documenting them	is not
	      our job. Therefore, this list is incomplete.

	      Notable environment variables:

		     URL to proxy for http:// and https:// URLs.

		     List of domain patterns for  which	 no  proxy  should  be
		     used.   List entries are separated	by ,. Patterns can in-
		     clude *.


		     Specify a directory in which to store title  key  values.
		     This  will	speed up descrambling of DVDs which are	in the
		     cache. The	DVDCSS_CACHE directory is created if  it  does
		     not  exist, and a subdirectory is created named after the
		     DVD's title or manufacturing date.	If DVDCSS_CACHE	is not
		     set  or  is  empty,  libdvdcss will use the default value
		     which is ${HOME}/.dvdcss/ under Unix and the roaming  ap-
		     plication	data  directory	(%APPDATA%) under Windows. The
		     special value "off" disables caching.

		     Sets the authentication and decryption method that	 libd-
		     vdcss will	use to read scrambled discs. Can be one	of ti-
		     tle, key or disc.

		     key    is the default method. libdvdcss will use a	set of
			    calculated player keys to try to get the disc key.
			    This can fail if the drive does not	recognize  any
			    of the player keys.

		     disc   is	a fallback method when key has failed. Instead
			    of using player keys,  libdvdcss  will  crack  the
			    disc  key  using  a	 brute	force  algorithm. This
			    process is CPU intensive and  requires  64	MB  of
			    memory to store temporary data.

		     title  is	the  fallback  when  all  other	 methods  have
			    failed. It does not	rely on	a  key	exchange  with
			    the	 DVD drive, but	rather uses a crypto attack to
			    guess the title key. On rare cases this  may  fail
			    because  there is not enough encrypted data	on the
			    disc to perform a statistical attack, but  on  the
			    other  hand	 it  is	 the only way to decrypt a DVD
			    stored on a	hard disc, or a	DVD with the wrong re-
			    gion on an RPC2 drive.

		     Specify the raw device to use. Exact usage	will depend on
		     your operating system, the	Linux utility to  set  up  raw
		     devices  is raw(8)	for instance. Please note that on most
		     operating systems,	using a	 raw  device  requires	highly
		     aligned  buffers:	Linux  requires	a 2048 bytes alignment
		     (which is the size	of a DVD sector).

		     Sets the libdvdcss	verbosity level.

		     0	    Outputs no messages	at all.

		     1	    Outputs error messages to stderr.

		     2	    Outputs  error  messages  and  debug  messages  to

		     Skip retrieving all keys on startup. Currently disabled.

	      HOME   FIXME: Document this.

       Normally	 mpv  returns 0	as exit	code after finishing playback success-
       fully.  If errors happen, the following exit codes can be returned:

	  1	 Error initializing mpv. This is also returned if unknown  op-
		 tions are passed to mpv.

	  2	 The  file  passed to mpv couldn't be played. This is somewhat
		 fuzzy:	currently, playback of a file is considered to be suc-
		 cessful  if  initialization  was  mostly  successful, even if
		 playback fails	immediately after initialization.

	  3	 There were some files that could be played,  and  some	 files
		 which couldn't	(using the definition of success from above).

	  4	 Quit  due to a	signal,	Ctrl+c in a VO window (by default), or
		 from the default quit key bindings in encoding	mode.

       Note that quitting the player manually will always lead to exit code 0,
       overriding  the	exit  code  that would be returned normally. Also, the
       quit input command can take an exit code: in this case, that exit  code
       is returned.

       For Windows-specifics, see FILES	ON WINDOWS section.

	      mpv  system-wide settings	(depends on --prefix passed to config-
	      ure - mpv	in default configuration will use  /usr/local/etc/mpv/
	      as  config directory, while most Linux distributions will	set it
	      to /etc/mpv/).

	      mpv user settings	(see CONFIGURATION FILES section)

	      key bindings (see	INPUT.CONF section)

	      All files	in this	directory are loaded as	if they	were passed to
	      the  --script option. They are loaded in alphabetical order, and
	      sub-directories and files	with no	.lua  extension	 are  ignored.
	      The --load-scripts=no option disables loading these files.

	      Contains	temporary config files needed for resuming playback of
	      files with the watch later feature. See for example  the	Q  key
	      binding, or the quit-watch-later input command.

	      Each  file  is a small config file which is loaded if the	corre-
	      sponding media file is loaded. It	contains the playback position
	      and some (not necessarily	all) settings that were	changed	during
	      playback.	The filenames are hashed from the full	paths  of  the
	      media  files.  It's in general not possible to extract the media
	      filename from this hash. However,	you can	set the	 --write-file-
	      name-in-watch-later-config  option,  and the player will add the
	      media filename to	the contents of	the resume config file.

	      This is loaded by	the OSC	script.	See the	ON  SCREEN  CONTROLLER
	      docs for details.

	      Other  files in this directory are specific to the corresponding
	      scripts as well, and the mpv core	doesn't	touch them.

       Note that the environment variables $XDG_CONFIG_HOME and	$MPV_HOME  can
       override	the standard directory ~/.config/mpv/.

       Also,  the old config location at ~/.mpv/ is still read,	and if the XDG
       variant does not	exist, will still be preferred.

       On win32	(if compiled with MinGW, but not Cygwin), the  default	config
       file  locations	are  different.	They are generally located under %APP-
       DATA%/mpv/.    For   example,   the   path   to	 mpv.conf   is	 %APP-
       DATA%/mpv/mpv.conf,  which maps to a system and user-specific path, for

       You can find the	exact path by running echo  %APPDATA%\mpv\mpv.conf  in

       Other  config files (such as input.conf)	are in the same	directory. See
       the FILES section above.

       The environment variable	$MPV_HOME completely overrides these, like  on

       If  a  directory	 named portable_config next to the mpv.exe exists, all
       config will be loaded from this	directory  only.  Watch	 later	config
       files  are  written  to this directory as well. (This exists on Windows
       only and	is redundant with $MPV_HOME. However, since  Windows  is  very
       scripting unfriendly, a wrapper script just setting $MPV_HOME, like you
       could do	it on other systems, won't work. portable_config  is  provided
       for convenience to get around this restriction.)

       Config  files  located in the same directory as mpv.exe are loaded with
       lower priority. Some config files are loaded  only  once,  which	 means
       that e.g. of 2 input.conf files located in two config directories, only
       the one from the	directory with higher priority will be loaded.

       A third config directory	with the  lowest  priority  is	the  directory
       named  mpv in the same directory	as mpv.exe. This used to be the	direc-
       tory with the highest priority, but is now discouraged to use and might
       be removed in the future.

       Note  that  mpv	likes  to  mix / and \ path separators for simplicity.
       kernel32.dll accepts this, but cmd.exe does not.




Want to link to this manual page? Use this URL:

home | help