Let's create a configuration file for mpv which uses the techniques mentioned above. The configuration file of mpv is located here: ~/.config/mpv/mpv.conf , we are going to add the options described below into it.

In some cases, I am going to mention settings both for middle-end and high-end systems. In my opinion, the visual difference between them is so subtle that I would suggest that you go with the configuration for middle-end systems first, especially if you use a laptop. If you use a relatively modern desktop or do not mind extra battery drain and fan noise then go experiment with the configuration for high-end systems.

The first thing which we should set is a video renderer profile. There are many of them but gpu and gpu-hq are the ones in which we are interested the most. These, as you might have guessed, allow offloading most of the video post-processing and rendering to a GPU using OpenGL or Vulkan API. gpu-hq is pre-configured to use higher quality, more computationally intensive filters.

middle-end systems:

profile=gpu

high-end systems:

profile=gpu-hq

We may use Vulkan or OpenGL as a GPU API. Honestly, I have not noticed any difference in performance when playing a video using either, so I would suggest that you stick with OpenGL as the most compatible option. We are going to enable V-Sync as well.

gpu-api=opengl opengl-swapinterval=1

If you want to use Vulkan instead, here is how to do it:

gpu-api=vulkan vulkan-swap-mode=fifo

The next logical step is to configure smooth-motion. Here is how:

video-sync=display-resample interpolation tscale=oversample

Now let's configure scaling.

middle-end systems:

scale=ewa_lanczos:scale-antiring=1 cscale=ewa_lanczos:scale-antiring=1 dscale=mitchell correct-downscaling

high-end systems:

scale=ewa_lanczossharp cscale=ewa_lanczossharp dscale=mitchell correct-downscaling

It is a good idea to enable dithering when it is necessary. mpv uses a fairly good dithering algorithm by default.

dither-depth=auto

The last step is to offload video decoding to GPU when possible. It is especially useful for laptops. We are using auto-copy instead of auto to enforce copying back decoding results back to the system RAM. It might be necessary for some filters to work and helps to avoid some decoding issues at the expense of a relatively small performance loss.

hwdec=auto-copy