This is the extended guide. Click HERE to return to the basic guide.
Last tested build: v0.33.0
Use newer builds at your own risk.
For a more detailed documentation click HERE.
I only offer a tl;dr version for “most-used” options.
Keep in mind that all stuff written here is optimized for anime content and might look worse on other content.
If you notice something outdated or wrong, you can contact me via Discord.
Example config files:
Please don’t simply 1:1 copy the configs. Some settings are there for certain reasons, you probably don’t have. The configs might not run well on every PC.
Stuff that is good to have or you need for certain options:
Only download what you actually need/want!
Copy the .hook or .glsl files into the „Shaders“ folder inside the mpv folder (create it, if it doesn’t exist):
- SuperXBR / ravu / nnedi3 [compute > gather > normal – use normal in case of compatibility issues]
- ravu (use with “gpu-api=vulkan”) [compute > gather > normal – use normal in case of compatibility issues]
- FSRCNN
- SSimDownscaler / KrigBilateral
- Static Noise Luma
- Static Noise Chroma
- (MORE SHADERS)
Copy the .lua files into the „Scripts“ folder inside the mpv folder (create it, if it doesn’t exist):
- Autoload – Loads the next video inside the same folder (next episode)
- Easycrop – Lets you crop black borders
- webm – Lets you create webm videos
- (MORE SCRIPTS)
General:
#The default profile which sets some recommended settings profile=gpu-hq #The called API #Use "opengl" if you have compatibility issues.For displaying HDR content (not HDR -> SDR) "d3d11" is recommended (Windows only). gpu-api=vulkan #Hardware decoding for whatever your CPU/GPU supports (e.g. 8bit h264 / 10bit h265) #Only should be used when your CPU/GPU are very old, else avoid using it #Use "auto-copy-safe" for the safest result in trade of better performance #You can manually try "d3d11va" / "dxva2-copy" on Windows, "vaapi" / "vaapi-copy" on Linux or "nvdec" / "nvdec-copy" with an Nvidia GPUs hwdec=auto-safe #Don't close the player after finishing the video keep-open=yes #The last position of your video is saved when quitting mpv save-position-on-quit=yes #Start mpv with a % smaller resolution of your screen autofit=50% #Force seeking (if seeking doesn't work) force-seekable=yes
OSD:
#Don't show a huge volume box on screen when turning the volume up/down osd-bar=no #Cursor hide in ms cursor-autohide=100
Priority:
#Audio language priority alang=ja,jp,jpn,en,eng,de,deu,ger #Subtitle language priority slang=en,eng,de,deu,ger
Audio:
#Default volume of the player volume=100 #Max volume of the player volume-max=200 #Load external audio with (almost) the same name as the video audio-file-auto=fuzzy #Audio delay #Useful if you're watching with your headphones on PC, but output the video on your Television with a long HDMI cable (counter the delay) audio-delay=+0.084
Subs:
#Forces showing subtitles while seeking through the video demuxer-mkv-subtitle-preroll=yes #Backward compatibility for vsfilter
#Disabling it "no" can result in broken subtitles in older vsfilter subtitles (recommended)
#Enabling it "yes" can result in broken subtitles in newer libass subtitles sub-ass-vsfilter-blur-compat=no #Fixes subtitle timing for gaps smaller than 210ms (works with PGS subtitles) sub-fix-timing=yes #Load external subtitles with (almost) the same name as the video sub-auto=fuzzy #Some settings fixing VOB/PGS subtitles (creating blur & changing yellow subs to gray) sub-gauss=1.0 sub-gray=yes #Loads external .ass file for overwriting the styles of the current subtitles sub-ass-styles=C:\mpv\template_advanced.ass #Some settings overwritting the default Arial for .srt subtitles (or .ass if you force it) sub-font=Andika New Basic Bold sub-font-size=52 sub-blur=0.2 sub-border-color=0.0/0.0/0.0/1.0 sub-border-size=3.0 sub-color=1.0/1.0/1.0/1.0 sub-margin-x=100 sub-margin-y=50 sub-shadow-color=0.0/0.0/0.0/0.25 sub-shadow-offset=0
Screenshot:
#Output format of screenshots screenshot-format=png #Same output bitdepth as the video #Set it "no" if you want to save disc space screenshot-high-bit-depth=yes #Compression of the PNG picture (1-9) #Higher value means better compression, but takes more time screenshot-png-compression=1 #Quality of JPG pictures (0-100) #Higher value means better quality screenshot-jpeg-quality=95 #Output directory screenshot-directory="C:\Pictures" #Name format you want to save the pictures screenshot-template="%f-%wH.%wM.%wS.%wT-#%#00n"
You make screenshots with the “s” hotkey.
Dither:
You can skip this part, because the default values are already fine.
#Use "auto" or "8"/"10"/"12" depending on your display bitdepth
#Can lead to ugly outputs when you set the wrong bitdepth number
dither-depth=auto
#Selects the dithering algorithm
#Use "error-diffusion" with high-end GPUs (experimental), else use "fruit"
dither=fruit
#Selects the kernel in case of error-diffusion
#"sierra-lite" is the fastest choice with decent results, alternatives are "floyd-steinberg" (slow), "atkinson" (slower) and "jarvis-judice-ninke" (slowest)
error-diffusion=sierra-lit
Deinterlace:
For an explanation what deinterlace is, click HERE.
You activate deinterlace with the “d” hotkey.
Only use it with interlaced sources (like MPEG2/h264 .ts files)
Deband & Dynamic Grain:
For an explanation what debanding is, click HERE.
For an explanation what grain is, click HERE.
#Debanding on all videos #Set it "no" if you rather handle it with profiles deband=yes #Deband steps (More = Better quality, but higher GPU cost) deband-iterations=4 #Deband strength (More = Less banding, but more detail loss) deband-threshold=48 #Deband range (More = Less banding, but higher GPU cost) deband-range=16 #Dynamic Grain (More = More dynamic grain) #Set it to "0" in case you use the static grain shader deband-grain=48
You activate debanding with the “h” hotkey.
(Static) Grain:
For an explanation what static grain is, click HERE.
Important: The “Static Noise Luma” & “Static Noise Chroma” scripts are a requirement for that.
#Luma glsl-shader="C:\mpv\Shaders\noise_static_luma.hook" #Chroma glsl-shader="C:\mpv\Shaders\noise_static_chroma.hook"
If you use shaders like “nnedi3” or “ravu”, make sure you run grain shaders before them!
Resizer:
For an explanation what a resizer is, click HERE.
Never ever use Anime4K, because it is not an upscaler!
With the “i” hotkey you can see how many delayed and dropped frames you have. With clicking “2” after that (changing to the 2nd page) you can see if shaders are loaded properly.
Normal: Regular scaler
Italic: Irregular scaler: Look at (4*) for sinc (with blackman)
Italic & Underlined: Based on a shader: Look at (1*) for FSRCNNX/ravu/nnedi3, look at (2*) for SSimDownscaler, look at (3*) for KrigBilateral
PRESETS | LUMA UPSCALE |
LUMA DOWNSCALE |
CHROMA UP- & DOWNSCALE |
---|---|---|---|
Experimental | FSRCNNX_x2_16-0-4-1 | ||
Overkill | ravu-zoom-r4* nnedi3-nns256-win8x4 * |
SSimDownscaler | KrigBilateral |
Very High | ravu-r4* ravu-lite-r4* |
ewa_lanczossharp ewa_lanczos ewa_lanczossoft |
ravu-zoom-r4-chroma * |
High | ewa_lanczossharp ewa_lanczos ewa_lanczossoft |
ewa_lanczossharp ewa_lanczos ewa_lanczossoft |
ewa_lanczossharp ewa_lanczos ewa_lanczossoft |
Medium | spline64 spline36 spline16 |
spline64 spline36 spline16 |
sinc (with blackman) |
Low | catmull_rom | catmull_rom | catmull_rom |
Very Low | bicubic_fast | bicubic_fast | bicubic_fast |
* Ravu: Try a lower “r” variant like r3 or r2 if your GPU can’t handle r4.
* Nnedi3: Try a lower “nns” like 128 or 64 if your GPU can’t handle 256.
Regular scaler:
#Luma upscale scale=... For example: scale=bicubic_fast #Luma downscale dscale=... For example: dscale=bicubic_fast #Chroma up- & downscale cscale=... For example: cscale=bicubic_fast
Luma (scale/dscale) = Brightness (black & white) information
Chroma (cscale) = Colour information
Luma is more visible for the human eye.
A better resizer means higher GPU cost.
Irregular scaler:
(4*)
sinc (with blackman):
cscale=sinc cscale-window=blackman cscale-radius=3
Based on a shader:
#Shaders which override "scale"/"dscale"/"cscale" to a certain point (depending on the shader you use) glsl-shader= ...
(1*) nnedi3 and ravu are only upscaling the video with a power of 2. For example, if your clip is 1280×720 and your screen 1920×1080, the video gets upscaled to 2560×1440. That means “someone” still needs to downscale it. In that case, the “dscale” you set up.
FSRCNN:
Important: The “FSRCNN” shader is a requirement for that: CLICK HERE.
glsl-shader="C:\mpv\Shaders\FSRCNN_x2_r2_16-0-2.glsl" scale=ewa_lanczos fbo-format=rgba16hf (rgba16f for "gpu-api=opengl")
nnedi3:
Important: The “nnedi3” shader is a requirement for that: CLICK HERE.
glsl-shader="C:\mpv\Shaders\nnedi3-nns32-win8x4.hook" scale=ewa_lanczos fbo-format=rgba16hf (rgba16f for "gpu-api=opengl") no-scaler-resizes-only (fixing the pixel shift
Higher “nns” means more neurons (better quality).
Don’t use “win8x6”, always use “win8x4”.
ravu:
Important: The “ravu” shader is a requirement for that: CLICK HERE (if you’ve gpu-api=opengl) or CLICK HERE (if you’ve gpu-api=vulkan).
glsl-shader="C:\mpv\Shaders\ravu-r4.hook" scale=ewa_lanczos fbo-format=rgba16hf (rgba16f for "gpu-api=opengl") no-scaler-resizes-only (fixing the pixel shift)
glsl-shader="C:\mpv\Shaders\ravu-lite-r4.hook" scale=ewa_lanczos fbo-format=rgba16hf (rgba16f for "gpu-api=opengl") no-scaler-resizes-only (fixing the pixel shift)
glsl-shader="C:\mpv\Shaders\ravu-zoom-r4.hook" scale=ewa_lanczos fbo-format=rgba16hf (rgba16f for "gpu-api=opengl") no-scaler-resizes-only (fixing the pixel shift)
Higher “r” means higher radius (better quality), but also slower performance.
ravu-lite-4: Faster and sharper than ravu-r4, but like FSRCNN it tends to oversharp aliasing and creates some halos/ringing.
Comparison: https://slow.pics/c/XjPJrhTr | It’s up to you what you rather prefer.
ravu-zoom-r4: Decent sharpness with better results than ravu-r4, but much slower.
(without addition)= only luma
-chrome = only chroma
-yuv = luma and chroma
-rgb = same as “yuv” but different color encoding system
(2*)
SSimDownscaler:
Important: The “SSimDownscaler” shader is a requirement for that: CLICK HERE.
glsl-shader="C:\mpv\Shaders\SSimDownscaler.glsl" dscale=gaussian fbo-format=rgba16hf (rgba16f for "gpu-api=opengl")
(3*)
KrigBilateral:
Important: The “KrigBilateral” shader is a requirement for that: CLICK HERE.
glsl-shader="C:\mpv\Shaders\KrigBilateral.glsl" cscale=mitchell fbo-format=rgba16hf (rgba16f for "gpu-api=opengl")
Anti-Ringing:
For an explanation what anti-ringing is, click HERE.
#Luma upscale deringing (Higher = Less rining, but more detail loss) scale-antiring=0.7 #Luma downscale deringing (Higher = Less rining, but more detail loss) dscale-antiring=0.7 #Chroma upscale deringing (Higher = Less rining, but more detail loss) cscale-antiring=0.7
Interpolation:
For an explanation what interpolation is, click HERE.
#Subtitle blending in scenechanges (smoother effect) blend-subtitles=yes #Set the fps as the max. of your monitor Hz (only useful and needed with "interpolation=yes) video-sync=display-resample #Activate interpolation interpolation=yes #Interpolation method [look at the table below] tscale=...
If you have playback issues, deactivate interpolation.
Smoothness/Sharpness | Interpolation |
---|---|
Sharpest | oversample |
Sharper | linear |
Sharp | catmull_rom |
Smooth | mitchell |
Smoother | gaussian |
Smoothest | bicubic |
A different approuch might be using “box ” which gives you a better selection. This method also gives you better results, but it’s slower than all others above.
tscale=box tscale-window=quadric #(or "sphinx") tscale-radius=1.0 #lower (e.g. 0.955) = sharper; higher (e.g. 1.005) = smoother tscale-clamp=0.0
HDR
HDR output only works with Windows.
For displaying HDR content you’ve to change/add the following commands:
gpu-context=d3d11
gpu-api=d3d11
hwdec=no
dither-depth=no
d3d11-output-csp=pq
blend-subtitles=no
fs
You’ve to turn HDR “On” on your operation system as well:
Note: Make sure your TV has at least 600 Nits (1000+ Nits are optimal) and a true 10bit panel and not just “8bit+FRC” (fake HDR). HDMI 2.1 is recommended for at least 60Hz 4:4:4/RGB 10bit. With HDMI 2.0 you’ve to lower the Hz of your TV to 30 or change the colour format to 4:2:2/4:2:0 to make it work with 10bit.
HDR -> SDR:
Use this if you want to display HDR content on a SDR screen or dislike the “effect” of HDR.
#Method of converting HDR to SDR
#Good alternatives are: "mobius" or "reinhard" tone-mapping=hable
Profiles:
Important: The “Auto-Profiles” script is a requirement for that.
#You can set up functions like debanding automatically for some sources #Every profiles thats with a name [TestProfile] #Then you add a condition - String match p.filename, "" is the interesting part here #There are also other conditions, but doing it by string with filename is the easiest one #For this example it will detect everything with the name "TestFile" in it [TestProfile] profile-cond=string.match(p.filename, "TestFile")~=nil deband=yes [TestProfile-Revert] profile-cond=string.match(p.filename, "TestFile")==nil deband=no
In some cases where you need special characters like “-“, you’ve to use “%” for recognizing it as a character and not function:
[Test-Profile] profile-cond=string.match(p.filename, "Test%-File")~=nil deband=yes
There also also much more ways, here are some example profiles:
[yuv420source] profile-desc=cond:((p["video-params/pixelformat"] == "yuv420p10" or p["video-params/pixelformat"] == "yuv420p")) glsl-shader="C:\mpv\Shaders\KrigBilateral.glsl" [not1080pbut720pOrHigher] profile-desc=cond:((p["video-params/h"] >= 720 and p["video-params/h"] < 1080)) glsl-shader="C:\mpv\Shaders\FSRCNN_x2_r2_16-0-2.glsl" scale=ewa_lanczos fbo-format=rgba16hf