Despite that, people are still complaining about the performance of VLC compared to other Windows players. I know we did a good job, so I wanted to know where we're at regarding the performance.
I tested the following software with various source files on Windows 64:
- VLC 3.0.6
- Movies & TV (10.18102.12011.0 preinstalled on Windows)
- MPC-HC 1.7.13
- MPC-BE 1.5.3.4322
- MPV 20190210
- Kodi v18.0
My system is an i7-8700 and I used the integrated Intel 630 GPU connected to a 2560x1440 display at 120Hz connected by DisplayPort. It has 12 logical threads at up to 4 GHz, so CPU decoding is supposedly OK.
Here are the results for the various test files:
Sony Camp HEVC HDR 4K 60 fps
This is the main sample I used when working on HDR. It has a high bitrate that I have a hard time playing over my NAS and even locally it can stutter in the hardware decoder (we only found a fix for that recently). Apart from 8K and AV1 that's pretty much the hardest thing to decode right now. Not only that but the HDR content needs to be handled properly. In my case the screen is not HDR so tone mapping has to be applied in the player (the HDR mode of Windows is not enabled).
Player | CPU % | Memory Usage | GPU 3D | GPU Decode | GPU Processor | Smooth Playback | Colours | Realtime |
---|---|---|---|---|---|---|---|---|
VLC | 2 | 1840 | 40 | 40 | 0 | yes | ok | yes |
MPV | 100 | 835 | 65 | 0 | 0 | stutters | dark | yes |
MPC-BE | 2 | 1250 | 60 | 30 | 41 | no | too bright | no |
MPC-HC | 1 | 1054 | 60 | 60 | 53 | yes | washed out | yes |
Movies & TV | 1 | 650 | 60 | 40 | 0 | yes | saturated | yes |
Kodi | 2 | 1045 | 40 | 40 | 55 | yes | washed out | yes |
MPV Ctrl+H | 2 | 932 | 80 | 45 | 0 | yes | dark | yes |
The first thing noticeable is that by default MPV doesn't use the GPU to decode this file. You have to manually tell it to do it. The last line adds the performance of MPV with hardware decoding (d3d11va) on.
The second thing is that apart from VLC, no player display the HDR colours/luminance correctly (there is a SDR version of the same file for comparison, but I don't know how official it is, I also compare to what my HDR TV does). It's surprising from MPV as the tone mapping in VLC is inspired by their code.
The third thing is that MPC-BE cannot play this file in real time, even though the CPU and GPU are not maxed out. Maybe a buffering issue. The audio stops every few second and then playback resumes.
The stuttering in MPV means the 60fps of the source is not respected. The frames are either skipped or not displayed at the right time (something we fixed in VLC after some hard work).
DNCE H264 1080i 29.97fps
(found on https://kodi.wiki/view/Samples)This sample is more simple to decode but the interlacing still needs to be done. Either by the CPU or the GPU.
Player | CPU % | Memory Usage | GPU 3D | GPU Decode | GPU Processor | Smooth Playback | Deinterlaced |
---|---|---|---|---|---|---|---|
VLC | 2 | 399 | 30 | 12 | 18 | yes | yes |
MPV | 7 | 133 | 7 | 0 | 0 | yes | no |
MPC-BE | 1 | 306 | 60 | 12 | 30 | very | yes |
MPC-HC | 1 | 340 | 40 | 12 | 30 | yes | yes |
Movies & TV | 2 | 162 | 0 | 11 | 27 | yes | yes |
Kodi | 2 | 307 | 73 | 9 | 28 | yes | yes |
MPV Ctrl+H / D | 1 | 160 | 14 | 11 | 35 | yes | yes |
The last column shouldn't be there, but by default MPV doesn't deinterlace the file. You have to press the d key to enable deinterlacing. The last line adds the performance of MPV with hardware decoding and deinterlacing on.
MPC-BE seems to double the original frame rate by default and interpolate between frames (soap opera effect). It may be good for sport but this is not a sport sample...
Movies & TV is impressing as it manages to display the content with 0% GPU 3D usage. It likely because they do all the processing in the Video Processing and nothing during display. That's an area we could improve in VLC.
Big Buck Bunny H264 1080p 30fps
This is the most common kind of file people are playing (apart from 720p files).
Player | CPU % | Memory Usage | GPU 3D | GPU Decode | GPU Processor |
---|---|---|---|---|---|
VLC | 1 | 418 | 9 | 9 | 0 |
MPV | 3 | 148 | 8 | 0 | 0 |
MPC-BE | 0 | 280 | 30 | 10 | 13 |
MPC-HC | 1 | 265 | 30 | 10 | 12 |
Movies & TV | 1 | 95 | 0 | 9 | 0 |
Kodi | 2 | 235 | 70 | 6 | 25 |
MPV Ctrl+H | 0 | 104 | 8 | 10 | 0 |
As expected the CPU usage is negligeable. The DirectShow based players seems to take a lot of GPU to display this simple file. And Kodi even more, even though it's using less GPU to decode. Not sure why they need some GPU processing here, maybe color conversion which VLC does in the shader. That would explain the extra GPU processor for the 1080i sample as well.
Freedom '90 Music Video Outtakes VP9 1080p
(from YouTube)If you watch a lot of YouTube there's a chance you might be decoding VP9 so I tested that as well. This is decoded by the GPU.
Player | CPU % | Memory Usage | GPU 3D | GPU Decode | GPU Processor | Picture Quality |
---|---|---|---|---|---|---|
VLC | 1 | 196 | 8 | 6 | 0 | normal |
MPV | 1 | 100 | 6 | 0 | 0 | normal |
MPC-BE | 0 | 215 | 40 | 6 | 10 | macroblocks |
MPC-HC | 2 | 183 | 30 | 0 | 13 | macroblocks |
Movies & TV | 0 | 76 | 1 | 6 | 7 | normal |
Kodi | 3 | 280 | 70 | 5 | 25 | macroblocks |
MPV Ctrl+H | 1 | 66 | 6 | 6 | 0 | normal |
In this case MPC-HC, MPC-BE and Kodi show noticeable macroblocks that the other players don't have.
LG 4K Tech Demo HEVC 60 fps
A more regular 4K file that has no HDR, so should have less to do in the GPU.
Player | CPU % | Memory Usage | GPU 3D | GPU Decode | GPU Processor | Smooth Playback | Realtime |
---|---|---|---|---|---|---|---|
VLC | 4 | 1215 | 18 | 65 | 0 | yes | yes |
MPV | 34 | 615 | 30 | 0 | 0 | yes | yes |
MPC-BE | 2 | 840 | 70 | 40 | 60 | no | no |
MPC-HC | 2 | 765 | 60 | 50 | 65 | yes | yes |
Movies & TV | 1 | 293 | 15 | 70 | 0 | yes | yes |
Kodi | 3 | 485 | 60 | 45 | 55 | yes | yes |
MPV Ctrl+H | 34 | 693 | 30 | 0 | 0 | yes | yes |
As with the HDR sample, MPC-BE can't play this file in realtime. The audio stops once in a while.
Despite the request to enable hardware decoding, MPV doesn't seem to be using it.
Movies & TV does an impressive job of using little memory.
Conclusion
VLC seems to be the overall best player with Movies & TV for all this content. The main drawback of VLC is currently the memory usage. It's possible to decrease it by using --avcodec-threads=1 but if you set this, you may have problems playing files your GPU can't decode.
We are working on this memory consumption which should be reduced in all cases for VLC 4.0.