# ========== https://MPV.ROCKS RECOMMENDED DEFAULT CONFIG ========== # Based on: https://iamscum.wordpress.com/guides/videoplayback-guide/mpv-conf/ # ========== VIDEO OUTPUT & DECODING ========== profile=high-quality # Allows for higher quality playback on mpv. Uses scaling methods that are significantly better than default mpv, VLC and MPC vo=gpu-next # https://mpv.io/manual/stable/#video-output-drivers-gpu https://github.com/mpv-player/mpv/wiki/GPU-Next-vs-GPU priority=high # Makes PC prioritize MPV for allocating resources (Windows only) gpu-context=auto # https://mpv.io/manual/master/#options-gpu-context gpu-api=auto # https://mpv.io/manual/stable/#options-gpu-api - For displaying HDR content (not HDR -> SDR) "d3d11" is recommended (Windows only) hwdec=auto # Hardware video decoding (auto = safe fallback) # ========== GENERAL SETTINGS ========== save-position-on-quit=no # Saving playback position on quit fullscreen=no # Start in fullscreen keep-open=always # Don't close the player after finishing the video reset-on-next-file=pause # After playing the next file in the playlist, it will automatically play the file instead of a paused state taskbar-progress=no # Disable playback progress rendering in taskbar force-seekable=yes # If the player thinks that the media is not seekable, force enable seeking # ========== LANGUAGE PRIORITY ========== alang=ja,en # Audio language priority slang=en # Subtitle language priority # ========== SCREENSHOT ========== # https://mpv.io/manual/stable/#options-screenshot-format screenshot-directory="~/Pictures/mpv-screenshots" # Screenshot Image Output directory screenshot-template="%f-%wH.%wM.%wS.%wT" # Name format (filename-hour-minute-second-milisecond-number) -#%#00n screenshot-format=webp # Output format of screenshots screenshot-high-bit-depth=yes # Same output bitdepth as the video. Set it "no" if you want to save disc space screenshot-tag-colorspace=yes # Tag images to the colorspace of the video screenshot-png-compression=7 # Compression of the PNG picture (1-9) - Higher value means better compression, but takes more time screenshot-jpeg-quality=90 # JPEG image quality. Generally don't want below 90 screenshot-webp-lossless=yes # If yes, image will be lossless. Ignores webp quality setting screenshot-webp-quality=75 # WebP quality from 0-100. Generally 70-90 is fine screenshot-avif-encoder=libaom-av1 # AV1 encoder to use for AVIF generation screenshot-avif-pixfmt=yuv420p # AVIF pixel format screenshot-avif-opts=usage=allintra # AV1 encoder options screenshot-jxl-distance=1.0 # JPEG XL Image quality in reference to the butteraugli score. 0.0 is lossless. 1.0 is default. You don't want more than 3.0 usually # ========== ON SCREEN DISPLAY AND ON SCREEN CONTROLLER ========== osd-bar=yes # Don't show a huge volume box on screen when turning the volume up/down osc=yes # Allows for custom OSC to be used border=yes # Whether or not to use the native window decorations, border, and controls. No disables it and uses custom versions. cursor-autohide-fs-only=yes # If this option is given, the cursor is always visible in windowed mode # In fullscreen mode, the cursor is shown or hidden according to --cursor-autohide cursor-autohide=300 # Cursor hide in ms osd-level=1 # https://mpv.io/manual/stable/#options-osd-level osd-duration=1000 # Set the duration of the OSD messages in ms hr-seek=yes # Select when to use precise seeks that are not limited to keyframes - https://mpv.io/manual/stable/#options-hr-seek osd-font='Verdana' osd-font-size=20 osd-color='#FFFFFF' # Hex code for white osd-border-color='#000000' # Hex code for black osd-border-size=0.6 # Size for osd text and progress bar osd-blur=0.2 # Gaussian blur factor. 0 means no blur applied (default) osd-status-msg=${playback-time/full} / ${duration} (${percent-pos}%)\nframe: ${estimated-frame-number} / ${estimated-frame-count} # ========== AUDIO ========== volume=100 # default volume, 100 = unchanged volume-max=200 # Max volume of the player audio-file-auto=fuzzy # Load external audio with (almost) the same name as the video audio-pitch-correction=yes # https://mpv.io/manual/stable/#options-audio-pitch-correction # ========== SCALERS AND SHADERS ========== # Default was (because of profile=gpu-hq): # scale=spline36 # cscale=spline36 # dscale=mitchell scale=ewa_lanczossharp # Luma upscaler dscale=mitchell # Luma downscaler cscale=ewa_lanczossoft # Chroma up&downscaler gpu-shader-cache-dir='~/shaders/cache' # https://mpv.io/manual/stable/#options-gpu-shader-cache-dir # FSRCNNX (more powerful, but tend to cause overshoot), use nnedi13 (below) instead if you notice dropped frames glsl-shader="~/shaders/FSRCNNX_x2_16-0-4-1.glsl" # Luma upscaler # nnedi3 # use nns128 instead of nns256 if you notice dropped frames # glsl-shader="~/shaders/nnedi3-nns256-win8x4.hook" # Luma upscaler # glsl-shader="~/shaders/nnedi3-nns128-win8x4.hook" # Luma upscaler # no-scaler-resizes-only # Fixing the pixel shift https://mpv.io/manual/stable/#options-scaler-resizes-only # SSimDownscaler glsl-shader="~/shaders/SSimDownscaler.glsl" # Luma downscaler # KrigBilateral (people say it's bloat/overkill) # glsl-shader="~/shaders/KrigBilateral.glsl" # Chroma up&downscaler # ========== DEBANDING ========== # Banding is a visual artifact, visual artifacts should never be in a video. # Example of banding: https://imgur.com/32d77H0 # Debanding is the process of removing said banding. # 6 minute explanation of what causes banding: https://www.youtube.com/watch?v=h9j89L8eQQk deband=no # Turn on only for videos with banding. (Keybind=b) deband-iterations=2 # https://mpv.io/manual/stable/#options-deband-iterations deband-threshold=64 # https://mpv.io/manual/stable/#options-deband-threshold deband-range=17 # https://mpv.io/manual/stable/#options-deband-range deband-grain=12 # https://mpv.io/manual/stable/#options-deband-grain # ========== SUBTITLES ========== demuxer-mkv-subtitle-preroll=yes # https://mpv.io/manual/stable/#options-mkv-subtitle-preroll sub-ass-use-video-data=all # https://mpv.io/manual/stable/#options-sub-ass-vsfilter-aspect-compat sub-fix-timing=no # https://mpv.io/manual/stable/#options-sub-fix-timing sub-auto=fuzzy # https://mpv.io/manual/stable/#options-no-sub-auto # Load all subs containing the media filename # The following options only apply to subtitles without own styling sub-font='Netflix Sans Medium' # Specify font to use for subtitles that do not themselves specify a particular font sub-font-size=40 sub-color='#FFFFFFFF' sub-border-color='#FF000000' sub-border-size=2.0 sub-shadow-offset=0 sub-spacing=0.0 # ========== INTERPOLATION ========== # blend-subtitles=yes # Subtitle blending in scenechanges (smoother effect) # video-sync=display-resample # Set the fps as the max of your monitor refresh rate # # (only useful and needed with "interpolation=yes) # interpolation=yes # Enable interpolation # tscale=oversample # Interpolation method # ========== PROFILES ========== #[HDR] # profile-desc=Tone mapping using reinhard # profile-restore=copy-equal # tone-mapping=reinhard # tone-mapping-param=0.6 # hdr-compute-peak=no # blend-subtitles=video # target-colorspace-hint=yes # vulkan-output-csp=pq # ========== AUTO PROFILES ========== # Auto profiles that automatically applies for WEB-DL anime that need some debanding [WEB-DL] profile-desc=WEB-DL Anime (HatSubs, SubsPlease, HorribleSubs, Erai-raws) profile-cond=string.match(p.filename, "HatSubs")~=nil or string.match(p.filename, "SubsPlease")~=nil or string.match(p.filename, "HorribleSubs")~=nil or string.match(p.filename, "Erai%-raws")~=nil profile-restore=copy-equal deband=yes # [Mini-Encode #1] # profile-desc=Mini Encode Anime 1 # profile-cond=string.match(p.filename, "ASW")~=nil or string.match(p.filename, "DKB")~=nil or string.match(p.filename, "Judas")~=nil # deband=yes # [Mini-Encode #2] # profile-desc=Mini Encode Anime 2 # profile-cond=string.match(p.filename, "Cerberus")~=nil or string.match(p.filename, "Nep%_Blanc")~=nil or string.match(p.filename, "Reaktor")~=nil # deband=yes # [Mini-Encode #3] # profile-desc=Mini Encode Anime 3 # profile-cond=string.match(p.filename, "Cleo")~=nil or string.match(p.filename, "Akihito")~=nil or string.match(p.filename, "Reaktor")~=nil # deband=yes # [Mini-Encode #4] # profile-desc=Mini Encode Anime 4 # profile-cond=string.match(p.filename, "Ember")~=nil # deband=yes