diff --git a/meson.build b/meson.build
index 1b56eb4713..67b7b3d107 100644
--- a/meson.build
+++ b/meson.build
@@ -1797,9 +1797,9 @@ if get_option('cplayer')
install_data('etc/mpv-symbolic.svg', install_dir: join_paths(hicolor_dir, 'symbolic', 'apps'))
mpv = executable('mpv', main_fn_source, objects: libmpv.extract_all_objects(recursive: true), dependencies: dependencies,
- win_subsystem: 'windows', install: true)
+ win_subsystem: get_option('win32-subsystem'), install: true)
- if win32
+ if win32 and get_option('win32-subsystem') != 'console'
wrapper_sources= 'osdep/win32-console-wrapper.c'
executable('mpv', wrapper_sources, c_args: '-municode', link_args: '-municode',
name_suffix: 'com', install: true)
diff --git a/meson_options.txt b/meson_options.txt
index c6e6337d68..633d839f06 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -117,6 +117,7 @@ option('swift-flags', type: 'string', description: 'Optional Swift compiler flag
# Windows features
option('win32-smtc', type: 'feature', value: 'auto', description: 'Enable Media Control support')
+option('win32-subsystem', type : 'string', value: 'windows', description : 'Windows subsystem to use for mpv.exe')
# manpages
option('html-build', type: 'feature', value: 'disabled', description: 'HTML manual generation')
diff --git a/osdep/mpv.exe.manifest b/osdep/mpv.exe.manifest
index 3cade40a38..6180f5fd80 100644
--- a/osdep/mpv.exe.manifest
+++ b/osdep/mpv.exe.manifest
@@ -9,6 +9,7 @@
mpv - The Movie Player
+ detached
True/PM
PerMonitorV2,PerMonitor
UTF-8