This is the extended guide. Click HERE to return to the basic guide.
Last tested build: v0.32.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.
If you want to take a look at my mpv.conf, you can view it HERE.
Please don’t simply 1:1 copy that config. Some settings are there for certain reasons, you probably don’t have. This is not a config that runs fine on every PC.
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.
Stuff that is good to have or you need for certain options:
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]
- 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):
- Auto-Profiles – Lets you create profiles that run certain commands (like debanding)
- 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)
#The default profile which sets some recommended settings profile=gpu-hq #The called API #Use "opengl" if you have compatibility issues gpu-api=vulkan #Decoding API for 8bit h264 (or whatever your CPU supports) content #Only should be used when you get many frame drops hwdec=dxva2-copy #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
#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
#Audio language priority alang=ja,jp,jpn,en,eng,de,deu,ger #Subtitle language priority slang=en,eng,de,deu,ger
#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
#Forces showing subtitles while seeking through the video demuxer-mkv-subtitle-preroll=yes #Backward compatibility for vsfilter fansubs sub-ass-vsfilter-blur-compat=yes #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
#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.
#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-lite
Deband & Dynamic Grain:
#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.
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!
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
UP- & DOWNSCALE
|sinc (with blackman)|
* 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.
#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.
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.
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")
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”.
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: Slighly faster and sharper than ravu-r4, but tends to oversharp and creates some halos.
Comparison: https://slow.pics/c/XjPJrhTr | It’s up to you what you rather prefer.
ravu-zoom-r4.hook: Decent sharpness with better results than ravu-r4, but much slower.
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")
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")
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
For an explanation what interpolation is, click HERE.
#Subtitle blending in scenechanges (smoother effect) #Important: Doesn't work with HDR content, set it "no" for HDR content! 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.
|Sharpest & Smoothest (and slowest)||box with sphinx (*)|
(*) box with sphinx: tscale=box tscale-window=sphinx tscale-radius=1.0 #lower (e.g. 0.95) = sharper; higher (e.g. 1.05) = smoother tscale-clamp=0.0
For an explanation what deinterlace is, click HERE.
#Autodetect if deinterlace is needed deinterlace=auto
You activate deinterlace with the “d” hotkey.
Only use it with interlaced sources (like MPEG2/h264 .ts files)
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-desc=cond:string.match(p.filename, "TestFile")~=nil deband=yes [TestProfile-Revert] profile-desc=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-desc=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