neulab/tldr huggingface dataset:
WARNING: To get multichannel/surround audio, use --audio-channels=auto. The default for this option is auto-safe, which makes this audio output explicitly reject multichannel output, 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 upmixing with shared access, so playing stereo and multichannel audio at the same time will work as expected.
oss    OSS audio output driver
jack   JACK (Jack Audio Connection Kit) audio output driver.
The following global options are supported by this audio output:
--jack-port=<name> Connects to the ports with the given name (default: physical ports).
--jack-name=<client> Client name that is passed to JACK (default: mpv). Useful if you want to have certain connections established automatically.
--jack-autostart=<yes|no> Automatically start jackd if necessary (default: disabled). Note that this tends to be unreliable and will flood stdout with server messages.
--jack-connect=<yes|no> Automatically create connections to output ports (default: enabled).  When enabled, the maximum number of output channels will be limited to the number of available output ports.
--jack-std-channel-layout=<waveext|any> Select the standard channel layout (default: waveext). JACK itself has no notion of channel layouts (i.e. assigning 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, regardless of channel layout and without reordering. This mode is probably not very useful, other than for debugging or when used with fixed setups.
coreaudio (macOS only) Native macOS audio output driver using AudioUnits and the CoreAudio sound server.
Automatically redirects to coreaudio_exclusive when playing compressed formats.
--coreaudio-change-physical-format=<yes|no> Change the physical format to one similar to the requested audio format (default: no). This has the advantage 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 selected speaker setup.
--coreaudio-spdif-hack=<yes|no> Try to pass through AC3/DTS data as PCM. This is useful for drivers which do not report AC3 support. It converts the AC3 data to float, and assumes the driver will do the inverse conversion, which means a typical A/V receiver will pick it up as compressed IEC framed AC3 stream, ignoring that it's marked as PCM. This disables normal AC3 passthrough (even if the device reports it as supported). Use with extreme care.
coreaudio_exclusive (macOS only) Native macOS audio output driver using direct device access and exclusive mode (bypasses the sound server).
openal OpenAL audio output driver. This is broken and does not work.
--openal-num-buffers=<2-128> Specify the number of audio buffers to use. Lower values are better for lower CPU usage. Default: 4.
--openal-num-samples=<256-32768> Specify the number of complete samples to use for each buffer. Higher values are better for lower CPU usage. Default: 8192.
--openal-direct-channels=<yes|no> Enable OpenAL Soft's direct channel extension when available to avoid tinting the sound with ambisonics or HRTF.  Channels are dropped when when they are not available as downmixing will be disabled. Default: no.
pulse  PulseAudio audio output driver
--pulse-host=<host> Specify the host to use. An empty <host> string uses a local connection, "localhost" uses network transfer (most likely not what you want).
--pulse-buffer=<1-2000|native> 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.
--pulse-latency-hacks=<yes|no> Enable hacks to workaround PulseAudio timing bugs (default: no). If enabled, mpv will do elaborate latency calculations on its own. If disabled, it will use PulseAudio automatically updated timing information. Disabling 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 enable this option. (Or try to update PulseAudio.)
--pulse-allow-suspended=<yes|no> Allow mpv to use PulseAudio even if the sink is suspended (default: no).  Can be useful if PulseAudio is running as a bridge to jack and mpv has its sink-input set to the one jack is using.
sdl    SDL 1.2+ audio output driver. Should work on any platform supported by SDL 1.2, but may require the SDL_AUDIODRIVER environment variable to be set appropriately for your system.
NOTE: This driver is for compatibility with extremely foreign environments, such as systems where none of the other drivers are available.
--sdl-buflen=<length> 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.
null   Produces no audio output but maintains video playback speed. You can use --ao=null --ao-null-untimed for benchmarking.
--ao-null-untimed 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.
--ao-null-buffer Simulated buffer length in seconds.
--ao-null-outburst Simulated chunk size in samples.
--ao-null-speed 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 option helps to simulate this.
--ao-null-latency Simulated device latency. This is additional to EOF.
--ao-null-broken-eof Simulate broken audio drivers, which always add the fixed device latency to the reported audio playback position.
--ao-null-broken-delay Simulate broken audio drivers, which don't report latency correctly.
--ao-null-channel-layouts If not empty, this is a , separated list of channel layouts the AO allows. This can be used to test channel layout selection.
--ao-null-format Force the audio output format the AO will accept. If unset accepts any.
pcm    Raw PCM/WAVE file writer audio output
--ao-pcm-waveheader=<yes|no> Include or do not include the WAVE header (default: included). When not included, raw PCM will be generated.
--ao-pcm-file=<filename> Write the sound to <filename> instead of the default audiodump.wav. If no-waveheader is specified, the default is audiodump.pcm.
--ao-pcm-append=<yes|no> 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.
wasapi Audio output to the Windows Audio Session API.
Video output drivers are interfaces to different video output facilities. The syntax is:
--vo=<driver1,driver2,...[,]> Specify a priority list of video output drivers to be used.
If the list has a trailing ,, mpv will fall back on drivers not contained in the list.
NOTE: See --vo=help for a list of compiled-in video output drivers.
The recommended output driver is --vo=gpu, 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).
xv (X11 only) Uses the XVideo extension to enable hardware-accelerated display. This is the most compatible VO on X, but may be low-quality, and has issues with OSD and subtitle display.
NOTE: This driver is for compatibility with old systems.
The following global options are supported by this video output:
--xv-adaptor=<number> Select a specific XVideo adapter (check xvinfo results).
--xv-port=<number> Select a specific XVideo port.
--xv-ck=<cur|use|set> Select the source from which the color key is taken (default: cur).
cur    The default takes the color key currently set in Xv.
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.
--xv-ck-method=<none|man|bg|auto> 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.
--xv-colorkey=<number> Changes the color key to an RGB value of your choice. 0x000000 is black and 0xffffff is white.
--xv-buffers=<number> Number of image buffers to use for the internal ringbuffer (default: 2).  Increasing this will use more memory, but might help with the X server not responding quickly enough if video FPS is close to or higher than the display refresh rate.
Since mpv 0.30.0, you may need to use --profile=sw-fast to get decent performance.
NOTE: 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.
NOTE: 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.
--vo-vdpau-sharpen=<-1-1> (Deprecated. See note about vdpaupp.)
For positive values, apply a sharpening algorithm to the video, for negative values a blurring algorithm (default: 0).
--vo-vdpau-denoise=<0-1> (Deprecated. See note about vdpaupp.)
Apply a noise reduction algorithm to the video (default: 0; no noise reduction).
--vo-vdpau-chroma-deint (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.
--vo-vdpau-pullup (Deprecated. See note about vdpaupp.)
Try to apply inverse telecine, needs motion adaptive temporal deinterlacing.
--vo-vdpau-hqscaling=<0-9> (Deprecated. See note about vdpaupp.)
0      Use default VDPAU scaling (default).
1-9    Apply high quality VDPAU scaling (needs capable hardware).
--vo-vdpau-fps=<number> 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.
--vo-vdpau-composite-detect NVIDIA's current VDPAU implementation behaves somewhat differently under a compositing window manager and does not give accurate frame timing information. With this option enabled, the player tries to detect whether a compositing 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 input). This means timing is somewhat less accurate than without compositing, but with the composited mode behavior of the NVIDIA driver, there is no hard playback speed limit even without the disabled logic. Enabled by default, 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 future video frame changes at most this many milliseconds in advance (default: 50).  See below for additional information.
--vo-vdpau-output-surfaces=<2-15> Allocate this many output surfaces to display video frames (default: 3). See below for additional information.
--vo-vdpau-colorkey=<#RRGGBB|#AARRGGBB> 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).
--vo-vdpau-force-yuv Never accept RGBA input. This means mpv will insert a filter to convert to a YUV format before the VO. Sometimes 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 individual 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 active. 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 because 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 values 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 graphics 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.
NOTE: This driver is for compatibility with systems that don't provide proper OpenGL drivers, and where ANGLE does not perform well.
--vo-direct3d-disable-texture-align 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.
--vo-direct3d-force-power-of-2 Always force textures to power of 2, even if the device reports non-power-of-2 texture sizes as supported.
--vo-direct3d-texture-memory=<mode> Only affects operation with shaders/texturing enabled, and (E)OSD.  Possible values:
default (default) Use D3DPOOL_DEFAULT, with a D3DPOOL_SYSTEMMEM texture for locking. If the driver supports D3DDEVCAPS_TEXTURESYSTEMMEMORY, D3DPOOL_SYSTEMMEM is used directly.
default-pool Use D3DPOOL_DEFAULT. (Like default, but never use a shadow-texture.)
default-pool-shadow Use D3DPOOL_DEFAULT, with a D3DPOOL_SYSTEMMEM texture for locking. (Like default, but always force the shadow-texture.)
managed Use D3DPOOL_MANAGED.
scratch Use D3DPOOL_SCRATCH, with a D3DPOOL_SYSTEMMEM texture for locking.
--vo-direct3d-swap-discard Use D3DSWAPEFFECT_DISCARD, which might be faster.  Might be slower too, as it must(?) clear every frame.
--vo-direct3d-exact-backbuffer Always resize the backbuffer to window size.
gpu    General purpose, customizable, GPU-accelerated video output driver. It supports extended scaling methods, dithering, color management, custom shaders, HDR, and more.
See GPU renderer options for options specific to this VO.
By default, it tries to use fast and fail-safe settings. Use the gpu-hq profile to use this driver with defaults set to high quality rendering. The profile can be applied with --profile=gpu-hq and its contents can be viewed with --show-profile=gpu-hq.
This VO abstracts over several possible graphics APIs and windowing contexts, which can be influenced using the --gpu-api and --gpu-context options.
Hardware decoding over OpenGL-interop is supported to some degree. Note that in this mode, some corner case might not be gracefully handled, and color space conversion and chroma upsampling is generally in the hand of the hardware decoder APIs.
gpu makes use of FBOs by default. Sometimes you can achieve better quality or performance by changing the --fbo-format option to rgb16f, rgb32f or rgb. Known problems include Mesa/Intel not accepting rgb16, Mesa sometimes not being compiled with float texture support, and some macOS setups being very slow with rgb16 but fast with rgb32f. If you have problems, you can also try enabling the --gpu-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 supported by SDL 2.0.  For tuning, refer to your copy of the file SDL_hints.h.
NOTE: This driver is for compatibility with systems that don't provide proper graphics drivers.
--sdl-sw Continue even if a software renderer is detected.
--sdl-switch-mode Instruct SDL to switch the monitor video mode when going fullscreen.
vaapi  Intel VA API video output driver with support for hardware decoding. Note that there is absolutely no reason to use this, other than compatibility.  This is low quality, and has issues with OSD.
NOTE: This driver is for compatibility with crappy systems. You can use vaapi hardware decoding with --vo=gpu too.
--vo-vaapi-scaling=<algorithm>
default Driver default (mpv default as well).
fast   Fast, but low quality.
hq     Unspecified driver dependent high-quality scaling, slow.
nla    non-linear anamorphic scaling
--vo-vaapi-deint-mode=<mode> 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 deinterlace).
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 interaction using the methods mentioned above actually inserts the vavpp video filter. If vpp is not actually supported 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 libva).
first-field Show only first field.
bob    bob deinterlacing (default for older libva).
--vo-vaapi-scaled-osd=<yes|no> 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.
--vo-null-fps=<value> 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 console.
NOTE: This driver is a joke.
tct    Color Unicode art video output driver that works on a text console.  By default depends on support of true color by modern terminals to display the images at full color range, but 256-colors output is also supported (see below). On Windows it requires an ansi terminal such as mintty.
Note: the TCT image output is not synchronized with other terminal output from mpv, which can lead to broken images. The options --no-terminal or --really-quiet can help with that.
--vo-tct-algo=<algo> Select how to write the pixels to the terminal.
half-blocks 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 color.
sixel  Graphical output for the terminal, using sixels. Tested with mlterm and xterm.
Note: the Sixel image output is not synchronized with other terminal output from mpv, which can lead to broken images. The option --really-quiet can help with that, and is recommended.
You may need to use --profile=sw-fast to get decent performance.
Note: at the time of writing, xterm does not enable sixel by default - launching it as xterm -ti 340 is one way to enable it. Also, xterm does not display images bigger than 1000x1000 pixels by default.
To render and align sixel images correctly, mpv needs to know the terminal size both in cells and in pixels. By default it tries to use values which the terminal reports, however, due to differences between terminals this is an error-prone process which cannot be automated with certainty - some terminals report the size in pixels including the padding - e.g. xterm, while others report the actual usable number of pixels - like mlterm.  Additionally, they may behave differently when maximized or in fullscreen, and mpv cannot detect this state using standard methods.
Sixel size and alignment options:
--vo-sixel-cols=<columns>, --vo-sixel-rows=<rows> (default: 0) Specify the terminal size in character cells, otherwise (0) read it from the terminal, or fall back to 80x25. Note that mpv doesn't use the the last row with sixel because this seems to result in scrolling.
--vo-sixel-width=<width>, --vo-sixel-height=<height> (default: 0) Specify the available size in pixels, otherwise (0) read it from the terminal, or fall back to 320x240. Other than excluding the last line, the height is also further rounded down to a multiple of 6 (sixel unit height) to avoid overflowing below the designated size.
--vo-sixel-left=<col>, --vo-sixel-top=<row> (default: 0) Specify the position in character cells where the image starts (1 is the first column or row). If 0 (default) then try to automatically determine it according to the other values and the image aspect ratio and zoom.
--vo-sixel-pad-x=<pad_x>, --vo-sixel-pad-y=<pad_y> (default: -1) Used only when mpv reads the size in pixels from the terminal.  Specify the number of padding pixels (on one side) which are included at the size which the terminal reports. If -1 (default) then the number of pixels is rounded down to a multiple of number of cells (per axis), to take into account padding at the report - this only works correctly when the overall padding per axis is smaller than the number of cells.
--vo-sixel-exit-clear=<yes|no> (default: yes) Whether or not to clear the terminal on quit. When set to no - the last sixel image stays on screen after quit, with the cursor following it.
Sixel image quality options:
--vo-sixel-dither=<algo> Selects the dither algorithm which libsixel should apply. Can be one of the below list as per libsixel's documentation.
auto (Default) Let libsixel choose the dithering method.
none   Don't diffuse
atkinson Diffuse with Bill Atkinson's method.
fs     Diffuse with Floyd-Steinberg method
jajuni Diffuse with Jarvis, Judice & Ninke method
stucki Diffuse with Stucki's method
burkes Diffuse with Burkes' method
arithmetic Positionally stable arithmetic dither
xor    Positionally stable arithmetic xor based dither
--vo-sixel-fixedpalette=<yes|no> (default: yes) Use libsixel's built-in static palette using the XTERM256 profile for dither. Fixed palette uses 256 colors for dithering. Note that using no (at the time of writing) will slow down xterm.
--vo-sixel-reqcolors=<colors> (default: 256) Has no effect with fixed palette. Set up libsixel to use required number of colors for dynamic palette. This value depends on the terminal emulator as well. Xterm supports 256 colors. Can set this to a lower value for faster performance.
--vo-sixel-threshold=<threshold> (default: -1) Has no effect with fixed palette. Defines the threshold to change the palette - as percentage of the number of colors, e.g. 20 will change the palette when the number of colors changed by 20%. It's a simple measure to reduce the number of palette changes, because it can be slow in some terminals (xterm). The default (-1) will choose a palette on every frame and will have better quality.
image  Output each frame into an image file in the current directory. Each file takes the frame number padded with leading zeros as name.
--vo-image-format=<format> Select the image file format.
jpg    JPEG files, extension .jpg. (Default.)
jpeg   JPEG files, extension .jpeg.
png    PNG files.
webp   WebP files.
--vo-image-png-compression=<0-9> PNG compression factor (speed vs. file size tradeoff) (default: 7)
--vo-image-png-filter=<0-5> Filter applied prior to PNG compression (0 = none; 1 = sub; 2 = up; 3 = average; 4 = Paeth; 5 = mixed) (default: 5)
--vo-image-jpeg-quality=<0-100> JPEG quality factor (default: 90)
--vo-image-jpeg-optimize=<0-100> JPEG optimization factor (default: 100)
--vo-image-webp-lossless=<yes|no> Enable writing lossless WebP files (default: no)
--vo-image-webp-quality=<0-100> WebP quality (default: 75)
--vo-image-webp-compression=<0-6> WebP compression factor (default: 4)
--vo-image-outdir=<dirname> Specify the directory to save the image files to (default: ./).
libmpv For use with libmpv direct embedding. As a special case, on macOS it is used like a normal VO within mpv (cocoa-cb). Otherwise useless in any other contexts.  (See <mpv/render.h>.)
This also supports many of the options the gpu VO has, depending on the backend.
rpi (Raspberry Pi) Native video output on the Raspberry Pi using the MMAL API.
This is deprecated. Use --vo=gpu instead, which is the default and provides the same functionality. The rpi VO will be removed in mpv 0.23.0. Its functionality was folded into --vo=gpu, 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 default (like on the other platforms).
The following deprecated global options are supported by this video output:
--rpi-display=<number> Select the display number on which the video overlay should be shown (default: 0).
--rpi-layer=<number> 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.
--rpi-background=<yes|no> 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.
--rpi-osd=<yes|no> Enabled by default. If disabled with no, no OSD layer is created.  This also means there will be no subtitles rendered.
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 gpu VO).
--drm-connector=[<gpu_number>.]<name> 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 a list of available connectors. The <gpu_number> argument can be used to disambiguate multiple graphic cards, but is deprecated in favor of --drm-device.  (default: empty)
--drm-device=<path> Select the DRM device file to use. If specified this overrides automatic card selection and any card number specified --drm-connector.  (default: empty)
--drm-mode=<preferred|highest|N|WxH[@R]> Mode to use (resolution and frame rate).  Possible values:
preferred Use the preferred mode for the screen on the selected connector. (default)
highest Use the mode with the highest resolution available on the selected connector.
N      Select mode by index.
WxH[@R] Specify mode by width, height, and optionally refresh rate.  In case several modes match, selects the mode that comes first in the EDID list of modes.
Use --drm-mode=help to get a list of available modes for all active connectors.
--drm-atomic=<no|auto> Toggle use of atomic modesetting. Mostly useful for debugging.
no     Use legacy modesetting.
auto   Use atomic modesetting, falling back to legacy modesetting if not available. (default)
Note: Only affects gpu-context=drm. vo=drm supports legacy modesetting only.
--drm-draw-plane=<primary|overlay|N> Select the DRM plane to which video and OSD is drawn to, under normal circumstances. The plane can be specified as primary, which will pick the first applicable primary plane; overlay, which will pick the first applicable overlay plane; or by index. The index is zero based, and related to the CRTC.  (default: primary)
When using this option with the drmprime-drm hwdec interop, only the OSD is rendered to this plane.
--drm-drmprime-video-plane=<primary|overlay|N> Select the DRM plane to use for video with the drmprime-drm hwdec interop (used by e.g. the rkmpp hwdec on RockChip SoCs, and v4l2 hwdec:s on various other SoC:s). The plane is unused otherwise. This option accepts the same values as --drm-draw-plane. (default: overlay)
To be able to successfully play 4K video on various SoCs you might need to set --drm-draw-plane=overlay --drm-drmprime-video-plane=primary and setting --drm-draw-surface-size=1920x1080, to render the OSD at a lower resolution (the video when handled by the hwdec will be on the drmprime-video plane and at full 4K resolution)
--drm-format=<xrgb8888|xrgb2101010> Select the DRM format to use (default: xrgb8888). This allows you to choose the bit depth of the DRM mode. xrgb8888 is your usual 24 bit per pixel/8 bits per channel packed RGB format with 8 bits of padding.  xrgb2101010 is a packed 30 bits per pixel/10 bits per channel packed RGB format with 2 bits of padding.
There are cases when xrgb2101010 will work with the drm VO, but not with the drm backend for the gpu VO. This is because with the gpu VO, in addition to requiring support in your DRM driver, requires support for xrgb2101010 in your EGL driver
--drm-draw-surface-size=<[WxH]> Sets the size of the surface used on the draw plane. The surface will then be upscaled to the current screen resolution. This option can be useful when used together with the drmprime-drm hwdec interop at high resolutions, as it allows scaling the draw plane (which in this case only handles the OSD) down to a size the GPU can handle.
When used without the drmprime-drm hwdec interop this option will just cause the video to get rendered at a different resolution and then scaled to screen size.
Note: this option is only available with DRM atomic support.  (default: display resolution)
mediacodec_embed (Android) Renders IMGFMT_MEDIACODEC frames directly to an android.view.Surface.  Requires --hwdec=mediacodec for hardware decoding, along with --vo=mediacodec_embed and --wid=(intptr_t)(*android.view.Surface).
Since this video output driver uses native decoding and rendering routines, many of mpv's features (subtitle rendering, OSD/OSC, video filters, etc) are not available with this driver.
To use hardware decoding with --vo=gpu instead, use --hwdec=mediacodec-copy along with --gpu-context=android.
wlshm (Wayland only) Shared memory video output driver without hardware acceleration that works whenever Wayland is present.
--af=... Setup a chain of audio filters. See --vf (VIDEO FILTERS) for the full syntax.
NOTE: 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 filters. This includes all filters that have been ported from MPlayer to libavfilter.
The --vf description describes how libavfilter can be used and how to workaround deprecated mpv filters.
See --vf group of options for info on how --af-defaults, --af-add, --af-pre, --af-del, --af-clr, and possibly others work.
lavcac3enc[=options] 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, native-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 kHz.
tospdif=<yes|no> Output raw AC-3 stream if no, output to S/PDIF for pass-through if yes (default).
bitrate=<rate> 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
minch=<n> If the input channel number is less than <minch>, the filter will detach itself (default: 3).
encoder=<name> Select the libavcodec encoder used. Currently, this should be an AC-3 encoder, and using another codec will fail horribly.
format=format:srate:channels:out-srate:out-channels 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 controlling the audio format going into other filters. To specify the format for audio output, see --audio-format, --audio-samplerate, 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 conversion filters to be inserted before this one.  The out- parameters 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.
<format> Force conversion to this format. Use --af=format=format=help to get a list of valid formats.
<srate> Force conversion to a specific sample rate. The rate is an integer, 48000 for example.
<channels> Force mixing to a specific channel layout. See --audio-channels option for possible values.
<out-srate>
<out-channels>
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.
scaletempo[=option1:option2:...] 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 determine the best overlap position.
scale=<amount> Nominal amount to scale tempo. Scales this amount in addition to speed. (default: 1.0)
stride=<amount> 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: 60)
overlap=<percent> Percentage of stride to overlap. Decreasing improves performance.  (default: .20)
search=<amount> Length in milliseconds to search for best overlap position. Decreasing improves performance greatly. On slow systems, you will probably want to set this very low. (default: 14)
speed=<tempo|pitch|both|none> 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
WARNING: 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 audio tempo to match.
mpv --af=scaletempo=scale=1.2:speed=none --speed=1.2 media.ogg 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.
scaletempo2[=option1:option2:...] Scales audio tempo without altering pitch.  The algorithm is ported from chromium and uses the Waveform Similarity Overlap-and-add (WSOLA) method.  It seems to achieve a higher audio quality than scaletempo and rubberband.
By default, the search-interval and window-size parameters have the same values as in chromium.
min-speed=<speed> Mute audio if the playback speed is below <speed>. (default: 0.25)
max-speed=<speed> Mute audio if the playback speed is above <speed> and <speed> != 0. (default: 4.0)
search-interval=<amount> Length in milliseconds to search for best overlap position. (default: 30)
window-size=<amount> Length in milliseconds of the overlap-and-add window. (default: 20)
rubberband 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.
<pitch-scale> 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 default 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: https://breakfastquay.com/rubberband/code-doc/classRubberBand_1_1RubberBandStretcher.html (The mapping of the mpv rubberband filter sub-option names and values to those of librubberband follows a simple pattern: "Option" + Name + Value.)
This filter supports the following af-command commands:
set-pitch 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.
multiply-pitch <factor> Multiply the current value of <pitch-scale> dynamically. For example: 0.5 to go down by an octave, 1.5 to go up by a perfect fifth.  If you want to go up or down by semi-tones, use 1.059463094352953 and 0.9438743126816935
lavfi=graph Filter audio using FFmpeg's libavfilter.
<graph> Libavfilter graph. See lavfi video filter for details - the graph syntax is the same.
WARNING: Don't forget to quote libavfilter graphs as described in the lavfi video filter section.
o=<string> AVOptions.
fix-pts=<yes|no> Determine PTS based on sample count (default: no). If this is enabled, the player won't rely on libavfilter passing through PTS accurately.  Instead, it pass a sample count as PTS to libavfilter, and compute the PTS used by mpv based on that and the input PTS. This helps with filters which output a recomputed PTS instead of the original PTS (including filters which require the PTS to start at 0). mpv normally expects filters to not touch the PTS (or only to the extent of changing frame boundaries), so this is not the default, but it will be needed to use broken filters. In practice, these broken filters will either cause slow A/V desync over time (with some files), or break playback completely if you seek or start playback from the middle of a file.
drop   This filter drops or repeats audio frames to adapt to playback speed. It always operates on full audio frames, because it was made to handle SPDIF (compressed audio passthrough). This is used automatically if the --video-sync=display-adrop option is used. Do not use this filter (or the given option); they are extremely low quality.
Video filters allow you to modify the video stream and its properties. All of the information described in this section applies to audio filters as well (generally using the prefix --af instead of --vf).
The exact syntax is:
--vf=<filter1[=parameter1:parameter2:...],filter2,...> 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 runtime.
A ! before the filter name means the filter is disabled by default. It will be skipped on filter creation. This is also useful for runtime filter toggling.
See the vf command (and toggle sub-command) for further explanations and examples.
The general filter entry syntax is: ["@"<label-name>":"] ["!"] <filter-name> [ "=" <filter-parameter-list> ]
or for the special "toggle" syntax (see vf command): "@"<label-name>
and the filter-parameter-list: <filter-parameter> | <filter-parameter> "," <filter-parameter-list>
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.
Filters can be manipulated at run time. You can use @ labels as described above in combination with the vf command (see COMMAND INTERFACE) to get more control over this. Initially disabled filters with ! are useful for this as well.
You can also set defaults for each filter. The defaults are applied before the normal filter parameters. This is deprecated and never worked for the libavfilter bridge.
--vf-defaults=<filter1[=parameter1:parameter2:...],filter2,...> Set defaults for each filter. (Deprecated. --af-defaults is deprecated as well.)
NOTE: To get a full list of available video filters, see --vf=help and https://ffmpeg.org/ffmpeg-filters.html .
Most builtin filters are deprecated in some ways, unless they're only available 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 syntax is rather similar to libavfilter's, it's not the same. (Which means not everything accepted by vf_lavfi's graph option will be accepted by --vf.)
You can also prefix the filter name with lavfi- to force the wrapper. This is helpful if the filter name collides with a deprecated mpv builtin filter. For example --vf=lavfi-scale=args would use libavfilter's scale filter over mpv's deprecated builtin one.
Video filters are managed in lists. There are a few commands to manage the filter list.
--vf-append=filter Appends the filter given as arguments to the filter list.
--vf-add=filter Appends the filter given as arguments to the filter list. (Passing multiple filters is currently still possible, but deprecated.)
--vf-pre=filter Prepends the filters given as arguments to the filter list. (Passing multiple filters is currently still possible, but deprecated.)
--vf-remove=filter Deletes the filter from the list. The filter can be either given the way it was added (filter name and its full argument list), or by label (prefixed with @). Matching of filters works as follows: if either of the compared filters has a label set, only the labels are compared. If none of the filters have a label, the filter name, arguments, and argument order are compared. (Passing multiple filters is currently still possible, but deprecated.)
-vf-toggle=filter Add the given filter to the list if it was not present yet, or remove it from the list if it was present. Matching of filters works as described in --vf-remove.
--vf-del=filter Sort of like --vf-remove, but also accepts an index number. Index numbers start at 0, negative numbers address the end of the list (-1 is the last). Deprecated.
--vf-clr Completely empties the filter list.
--vf=<filter>=help Prints the parameter names and parameter value ranges for a particular filter.
Available mpv-only filters are:
format=fmt=<value>:colormatrix=<value>:... Applies video parameter overrides, with optional conversion. By default, this overrides the video's parameters without conversion (except for the fmt parameter), but can be made to perform an appropriate conversion with convert=yes for parameters for which conversion is supported.
<fmt>  Image format name, e.g. rgb15, bgr24, 420p, etc. (default: don't change).
This filter always performs conversion to the given format.
NOTE: For a list of available formats, use --vf=format=fmt=help.
<convert=yes|no> Force conversion of color parameters (default: no).
If this is disabled (the default), the only conversion that is possibly performed is format conversion if <fmt> is set. All other parameters (like <colormatrix>) are forced without conversion. This mode is typically useful when files have been incorrectly tagged.
If this is enabled, libswscale or zimg is used if any of the parameters mismatch. zimg is used of the input/output image formats are supported by mpv's zimg wrapper, and if --sws-allow-zimg=yes is used. Both libraries may not support all kinds of conversions. This typically results in silent incorrect conversion. zimg has in many cases a better chance of performing the conversion correctly.
In both cases, the color parameters are set on the output stage of the image format conversion (if fmt was set). The difference is that with convert=no, the color parameters are not passed on to the converter.
If input and output video parameters are the same, conversion is always skipped.
mpv test.mkv --vf=format:colormatrix=ycgco Results in incorrect colors (if test.mkv was tagged correctly).
mpv test.mkv --vf=format:colormatrix=ycgco:convert=yes --sws-allow-zimg Results in true conversion to ycgco, assuming the renderer supports it (--vo=gpu normally does). You can add --vo=xv to force a VO which definitely does not support it, which should show incorrect colors as confirmation.
Using --sws-allow-zimg=no (or disabling zimg at build time) will use libswscale, which cannot perform this conversion as of this writing.
<colormatrix> Controls the YUV to RGB color space conversion when playing 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 colors.
These options are not always supported. Different video outputs provide varying degrees of support. The gpu and vdpau video output drivers usually offer full support. The xv output can set the color space if the system video driver supports it, but not input and output levels. 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)
bt.2020-ncl ITU-R BT.2020 non-constant luminance system
bt.2020-cl ITU-R BT.2020 constant luminance system
smpte-240m SMPTE-240M
<colorlevels> 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.
auto   automatic selection (normally limited range) (default)
limited limited range (16-235 for luma, 16-240 for chroma)
full   full range (0-255 for both luma and chroma)