Repository navigation
We are excited to announce the release of mpv 0.42.0.
Key highlights:
- libcurl based network backend with HTTP/2, HTTP/3 and connection reuse
- DVD-Video, Blu-ray HDMV and BD-J menu navigation
- DVD-Audio playback
- Direct playback of .iso images of DVD-Video, DVD-Audio and Blu-ray discs
- Dolby Vision Profile 7 enhancement layer support in
gpu-next - MPEG-TS programs and HLS variants are exposed as editions
- DSD-over-PCM (DoP) passthrough with
--audio-spdif=dsd - Support for SRV3 (YouTube) subtitles via subrandr library
- Context menu populated from the new
menu.conf, bound to right click floatingOSC layout with Fluent icons (--script-opts=osc-layout=floating)- API that allows integration between the OSC and (third-party) thumbnailer scripts
- Wayland session management
- Wayland color management through the protocol instead of the Vulkan API
- scRGB output with
--target-trc=scrgb - Improved HDR colorspace signalling on DRM (Linux)
- D3D11 render API backend for libmpv
- Reworked terminal video outputs (
sixel,kittyandtct) - AMD Frame Rate Conversion filter (
--vf=amf_frc) - Rewritten display-sync audio drift compensation
--tls-verifyis enabled by default
This release requires FFmpeg 6.1 or newer and libplacebo 7.387.0 or newer.
Note that the release binary assets are our CI builds. These builds are reasonably useful. The Windows full builds (*-w64-mingw32-full.zip) are bigger and aim to provide the complete experience.
Features
New
- sub: add subrandr renderer support
- video/filter/vf_amf: add AMD Frame Rate Conversion filter
- mac/common: add support for transparent rendering
- context_menu.lua: implement key hints
- menu.conf: add this file
- select.lua: populate the context menu
- input.conf: add context menu bindings
- vo_gpu_next: add scRGB support
- video/out/opengl/context_wayland: export preferred colorspace
- vo_dmabuf_wayland: add BT.2100 mapping
- wayland_common: add scRGB support
- mpv-osd-symbols: add some Fluent UI System Icons to mpv font
- osc.lua: add
floatinglayout - vo_gpu_next: add stereo osd support
- demux_lavf: add support for programs
- demux_timeline: add support for programs
- vo_gpu: initial support for tunable parameters
- vo_gpu: add support for DEFINE and ENUM parameters
- osc: define and add support for "preview" api
- demux/packet: add support for SMPTE 2094-50 metadata
- vo_gpu: support parameters in RPN expressions
- demux_playlist: add support for 'strm' playlist
- wayland: implement session management
- demux/packet: add support for LCEVC ITU-T35 payloads
- demux_lavf: add support for stream groups
- video: merge the tiles of grid heif and avif images
- stream_curl: add libcurl-based stream backend
- demux_lavf: route nested HTTP opens through the curl backend
- stream_curl: use for ftp/ftps
- video/out/x11_common: add --focus-on support in X11
- hwdec_d3d11va: support 4:4:4 and high bit depth zero-copy formats
- demux_mkv: support demuxing native VC-1 streams
- stream_curl: add support for Icecast metadata
- f_enhancement_pair: add filter to match frames of separate video tracks
- vo_gpu_next: upload/map EL frame
- demux_lavf: add support for splitting EL track from in-band
- demux_mkv: add support for splitting EL track from in-band
- stream_env: add new stream to read from environment variables
- audio/filter: implement lavfi-tempo leveraging lavfi's atempo/ascale
- sd_lavc: add support for DVD sub highlight
- stream_dvdnav: implement DVD menu navigation
- stream_bluray: implement HDMV menu navigation
- demux_disc: add a synthetic "Disc Menu" edition
- stream_bluray: add BD-J menu support
- stream_dvdnav: add support for still frames
- stream_bluray: add support for still frames
- stream_dvda: add DVD-Audio playback support
- stream_dvda: expose DVD-Audio still images as a cover-art video track
- stream: auto-detect .iso DVD-Video, DVD-Audio and Blu-ray images
- vo_{gpu,gpu_next}/vulkan: enable extensions required for vf_fruc_vulkan
- audio/format: add raw DSD sample format
- ao_wasapi: add DSD-over-PCM (DoP) output support
- audio: add DSD-over-PCM pass-through
- mp_image: read stereo 3D layout from AV_FRAME_DATA_STEREO3D
- demux_lavf: read the stereo 3D mode from the stream side data
- video/out: add a swapchain for terminal VOs
- vo_{sixel,tct,kitty}: present frames through the terminal swapchain
- stream_aes_ctr: add aes-ctr:// protocol
- libmpv: add D3D11 render API backend
- vo_drm: add support for RGB565
- mp_image: support linear light XYZ
Changed
- wayland: bump libwayland minimum version to 1.22
- wayland: bump wayland-protocols minimum version to 1.38
- common/msg: allow only SGR sequence in terminal output
- video/out/vulkan/context_wayland: implement color_depth
- vo_gpu_next: undo dither-depth=auto meaning 8bpc for SDR when undetected
- common/playlist: store normalized playlist filenames
- player/loadfile: never autoselect tracks with wrong PID
- context_drm_egl: use target_csp to signal HDR
- vo_gpu_next: set color directly using Wayland protocol
- wayland_common: set luminances
- meson: bump minimum libdrm version to 2.4.114
- vd_lavc: remove Vulkan hwdec from auto-safe selection
- player/video: rewrite display-sync audio drift compensation
- player/command: hide dependent tracks
- input/dnd: move built-in drag and drop handling to mpv client
- video/decode: enable APV hwdec by default
- input.conf: bind right click to context menu
- stream_curl: require libcurl 7.88.0
- vo_gpu_next: follow reference white system setting
- vo: prefer dmabuf_wayland over other fallback VOs
- vo_gpu_next: make subtitles / osd also follow system reference white
- f_decoder_wrapper: prefer bitstream stereo 3D layout over container tag
- vulkan: bump minimum required Vulkan headers to 1.4.309
- meson: prefer LuaJIT over PUC Lua
- meson: bump min libplacebo version to v7.387.0
Removed
- options.lua: stop searching in lua-settings
- context_angle: remove the D3D9 renderer
Options and Commands
Added
- player/command: add subrandr-version property
- command: add libplacebo-version property
- command: add the default-menu property
- stats.lua: add track_info_selected_only script option
- command: add track-list/N/demux-duration property
- mp.input: allow async completions
- command: let playlist-play-index current preserve file-local-options
- mp.input: allow clients to override console.lua script-opts
- player/loadfile: add on_loaded hook
- osc.lua: add audioonlyscreen script option
- osc.lua: add
dynamic_margins,sub-margin,osd-margin,osc-icon_styleoptions - command: add update-clipboard command
- player/command: add env property
- player/command: add default-value/choices arg fields to command-list
- vo_gpu_next: add image-subs-hdr-peak=video-dynamic/video-static
- context_menu.lua: set user-data/mpv/context-menu/open
- command: allow metadata to be set manually
- player/{lua,javascript}: add
mp.utils.terminal_display_widthfunction - osc.lua: add option to configure skip_forward/backward buttons
- osc.lua: make window control buttons action customizable
- context_menu.lua: add background_alpha script-opt
- sub: add sub-lines property
- osc.lua: add box width option for box and slimbox layouts
- demux_{lavf,timeline}: add
--flatten-editions - input: add --input-builtin-drag-and-drop option
- command: add dropped-file property
- demux: add
--demuxer-hysteresis-bytes - stream_curl: add
--curl-enabledoption - select.lua: add keep-open argument to select bindings
- vf_format: add
vf=format=enhancement-layeroption - options: add secondary-sub-scale
- options: add --playlist-inherit-options option
- command: add colorspace and luminance arguments to overlay-add
- options: add
disc-menuoption - player/command: add
disc-menu-activeproperty - player/command: add
discnavcommand and bind default keys - osc.lua: make wheel commands on the seekbar configurable
- stream_bluray: add --bluray-key-file
- stream_bluray: add --bluray-min-title-length
- stream_bluray: add --bluray-region and --bluray-uo-restriction
- player/command: add commentary track flag support in commands
- player/command: add more disc navigation actions
- player/command: make property playlist/N/title writable
- lua: utils.format_json: add optional pretty argument
- vo_gpu_next: use pl_color_map_params.tone_constants
- vo_gpu_next: expose mastering_clip and film_strength color_map params
Changed
- player/command: refactor loadfile and loadlist commands to use flags
- f_auto_filters: rework --deinterlace=auto option
- player: make effective image_display_duration playback_speed aware
- builtin.conf: enable antiringing in high quality profile
- vf_d3d11vpp: rename
ivctctoivtc - player/command: apply
expand-propertiesmodifier also for string lists - video/out/win_state: don't move window when force-window-position=no
- options: target-gamut now accepts custom CIE xy primaries
- options: allow selecting workspace using
--geometrywithout specifying size - player/screenshot: validate strftime format string
- input/cmd: use _name for command name in mpv_command_node
- demux_playlist: only autocreate on regular file
- ytdl_hook.lua: default to all_formats=yes
- etc/builtin.conf: change gui mode to idle=yes
- options: make player-operation-mode readable as a property
- options: enable
tls-verifyby default - demux_lavf: change demuxer-lavf-{probesize,buffersize} to OPT_BYTE_SIZE
- player/command: make
track-list/N/ff-indexoptional - input/ipc-win: allow Windows handles for --input-ipc-client
- vd_lavc: derive hwdec surface pool size from VO requirements
- stream_bluray: use 1-based angle, same as in DVD
- stream_curl: use the Content-Disposition file name as the filename
- ytdl_hook: pass a default format again
- vf_format: make stereo-in=mono override the source mode
- m_property: sort the property list and resolve names once
- stream_dvdnav: set the VM language registers from --alang and --slang
Deprecated
- vf_format: deprecate
--vf=format=sig-peak - mp.input: deprecate log_error()
- vo: officially deprecate vo_vaapi
Removed
- console.lua: remove selected_color and selected_back_color
- console.lua: remove undocumented
dont_bind_up_downoption - osc.lua: use window title for window controls from mpv core
- command: remove the deprecated time-start property
- lua: remove the deprecated error field from end-file
Fixes and Minor Enhancements
- mac/{remote,touchbar}: remove manual 1 second rate limit of position property
- screenshot: correctly detect hardware frame
- sub/draw_bmp: fix rgba alpha blending
- console.lua: implement horizontal scroll
- demux_playlist: add base paths when adding playlist entries
- demux_playlist: expand tilde placeholders in playlist files
- command: set the language of added tracks from the filename
- command: remember the language when reloading tracks
- vo_gpu{,_next}: fix overriding scaling parameters for inherited kernels
- player/command: fix repeatable frame stepping with the seek argument
- d3d11: support
--d3d11-output-formatfully forgpu-next - wayland: handle all outputs disappearing without segfaulting
- select.lua: sort the track submenu
- vf_d3d11vpp: fix deinterlacing
- vf_d3d11vpp: set output format for NVIDIA RTX Video HDR
- {demux,player}: expose original and commentary track flags
- screenshot: percent decode filename if it's a URI
- input.conf: bind Ctrl+r to reload the current file
- osc.lua: make top/bottom bar show independently on mouse proximity
- auto_profiles.lua: evaluate conditional profiles on on_loaded hook
- command: avoid crashing the player with mmap
- w32_common: refactor window resizing
- video/vaapi: mark nvidia-vaapi-driver as emulated driver
- mac/window: fix white lines around screen with non-native fullscreen
- osc.lua: show window controls in idle
- Meson: add appropriate install_tag to each target
- video/out/x11_common: fix BadAtom error when getting atom name
- player/screenshot: support %s date format on all platforms
- input/ipc-unix: don't delete file for abstract sockets
- osdep/io: make getenv case insensitive on windows
- player/external_files: use natural sort for comparing filenames
- player/external_files: fix --cover-art-whitelist priority
- menu.conf: add OSC layout selection
- vo_gpu_next: fix image subtitle hdr peak
- ytdl_hook.lua: set the title in metadata
- msg: sanitize term title and block C1 controls and DEL
- w32_common: support initial --fs and --window-maximized
- vf_vapoursynth: update for VapourSynth R74
- sub/dec_sub: de-duplicate overlapping sub lines
- select.lua: add select-secondary-subtitle-line
- demux: enrich edition titles with codec/resolution/bitrate info
- demux_{lavf,timeline}: consider audio only HLS when selecting edition
- demux_lavf: map
commentto stream title - vo_gpu_next: fix upload synchronization
- ra_gl: fix memory leak
- demux/packet_pool: incrementally free old packets on pop
- wayland: force redraw on every configure when in toplevel resize state
- vo_gpu_next: always cache frames in paused state and never interpolate
- stream/cookies: allow reading cookies not only from a local file
- demux_libarchive: apply --directory-filter-types to files in archives
- demux_cue: fix audio file lookup inside subdirectory
- ytdl_hook.lua: map ass/srt subtitles
- ao_pipewire: avoid deadlock when starting thread loop
- sub/sd_ass: subtitle timing rounding errors
- meson: consider only 'v0.*' tags when computing the version
- demux_timeline: fix Twitch VOD timestamps being offset by ~60 seconds
- player: fix cover-art-files overriding embedded video tracks
- subprocess-posix: use clone when available
- demux_mkv: don't apply AVI b-frame delay compensation to VfW tracks
- ytdl_hook: use native http-proxy option instead of lavf option
- ytdl_hook: defer loading until the formats become available
- video/d3d: exclude HEVC on known crashing Intel drivers
- video/d3d: exclude VP9 on known broken Intel drivers
- {select,console}.lua: release memory of menu items after menu closing
- vf_d3d11vpp: enable NVIDIA RTX Video only for SDR input
- options: store audio/sub delay in doubles instead of floats
- osxbundle: fix a wrong vulkan search path
- vo_gpu_next: ignore reference white for screenshots
- ao_pipewire: treat init timeout as failure instead of success
- console.lua: speed up filtering of selectable items
- demux: interrupt blocking reads whose result would be discarded
- ad_spdif: recreate spdif muxer on reset
- osdep/w32_register: add a DVD-Audio AutoPlay handler
- vo_gpu_next: keep hwdec frames mapped while the queue holds them
- stream_file: don't report a size for pipes and sockets
- osdep/path-win: expand
~~exe_dir/on portable mode - demux_lavf: read HLS and DASH manifests through the stream
- stream_slice: don't read past the end of the slice
- meson: respect -Dvapoursynth=disabled for vapoursynth-script
- osdep/win32/smtc: fix hang on exit before the window is created
- demux_mkv: fall back to the first cluster for seeks before the index
- hwdec_drmprime_overlay: make the framebuffer the whole frame
- stream/network: accept ICY headers without a space after the colon
- context_drm_egl: handle set_color() with a NULL hint
- context_drm_egl: keep allow_modeset until the color commit is submitted
- osdep/io: restore umask-based file creation permissions
- wayland: use configure bounds in window geometry
- vo_drm: fix hang when routine wakeups fill VT pipe
- terminal: serialize terminal output between the status line and the VOs
- vo_{sixel,kitty}: draw the video into a frame the size of the canvas
- terminal: redraw the terminal VOs when the terminal is resized
- terminal-win: ask the terminal for its cell size under ConPTY
- sws_utils,zimg: keep the scalers across frames with dynamic HDR metadata
- bash-completion: complete aliases and list actions like their target
- osdep/language-win: advance through preferred UI languages
- demux_playlist: resolve relative entries against the url after redirects
- vo_gpu: opengl: support GL_EXT_framebuffer_object
- vo_gpu: opengl: use R8/RG8 formats on GLES 2.0 and GL 2.1
- d3d11/context: resize buffers when DXGI leaves exclusive fullscreen
- vo_gpu_next: only re-upload OSD textures when they change
- vo_gpu: decode XYZ into the tagged primaries
- ytdl_hook: default cookies without a Domain to the host of origin
- osdep/win32/smtc: fix crash at exit when another thread owned the MTA
- win32/smtc: allow toggling at runtime
- mac/input: only filter repeated key down events
- mac/menu: set the window menu of the NSApp for default menu items
- ytdl_hook: map vp09 codec strings to vp9
- stream_lavf: mark rtsp:// URLs as network streams
- stream_lavf: open rtp:// URLs with the lavf rtp demuxer
- stream_bluray: set the player language settings from --alang and --slang
- stream_bluray: use the disc's chapter names when it has them
- demux_disc: fix the DVD subtitle palette conversion
- ytdl_hook: skip subtitles that need a yt-dlp downloader
- ao_pipewire: advertise unknown layouts as AUX channels
- ao_pulse: map unknown layouts onto the sink's channel positions
- ao_wasapi: request unknown layouts as DirectOut
- ao_openal: fix the 6.1 channel order
- ao_alsa: map the top side and bottom channel positions
- command: fix infinite recursion with a list property in term-status-msg
- sub/sd_ass: deduplicate packets without file position by content hash
- misc/path_utils: normalize win32 paths with GetFullPathNameW()
- options/parse_commandline: glob only arguments with wildcards on win32
- player: show the first frame at its time when audio already plays
- player: fall back to the next track when a decoder fails to initialize
- vo_dmabuf_wayland: ignore rotations that aren't multiples of 90
- stats.lua: fix keybind display searching
- wayland: scale initial window size hint
- ao_alsa: avoid possible playback freeze on xrun
- demux_mkv: use block timestamps as PTS for codecs that don't reorder
- player: preserve lavfi-complex when reinitializing VO
- context_drm_egl: allow fallback to GBM surface with implicit modifiers
- player/video: refresh just loaded images on filter changes
- ao_coreaudio_chmap: prioritise preferred stereo layout over default
- ao_coreaudio: reload ao on device change
- player/video: don't wait for the last frame's duration with --untimed
- subprocess-posix: fix deadlock on large stdin writes
- ipc-unix: create IPC sockets with CLOEXEC
- input/ipc-unix: keep listening after transient accept() errors
This listing is not complete. Check DOCS/client-api-changes.rst for a history
of changes to the client API, and DOCS/interface-changes.rst for a history
of changes to other user-visible interfaces.
A complete changelog can be seen by running git log v0.41.0..v0.42.0
in the git repository or by visiting
v0.41.0...v0.42.0.