If you have suggestions or corrections related to new software releases, please tell me. If you have arguments against the use of CCCP other than ‘because it is not updated daily’, also tell me. (If you actually plan on updating your filters and players daily, by all means, install the individual components separately and set them up manually.)
TL;DR: Windows, CCCP (including CCCP’s MPC‑HC, LAV, xy-VSFilter), madVR, ReClock. If not, then mpv with --profile=opengl-hq --blend-subtitles=video
.
Jump to: Windows, OS X, Linux, VLC.
Use Windows, because the right setup on Windows provides much better quality and compatibility than anything else.
(But I will still tell you how to get the most out of OS X and Linux. Just scroll down.)
If you are on Windows 7 or newer and insist on making Windows Media Player use DirectShow filters (the above), you can do that using Win7DSFilterTweaker. Note that you have to use a DirectShow decoder to play 10‑bit H.264.
If you use madVR on a laptop with a discrete NVIDIA GPU, you are probably locked into the integrated GPU with decreased performance. To fix this,
If you see banding in gradients that should be smooth, this is your display’s or your GPU driver’s fault. If you use madVR, try lowering ‘the native display bitdepth’ in ‘devices → [device name] → properties’ in the madVR settings.
ReClock is useful because it replaces the default clock with the GPU clock, improving frame rate stability.
Do not use XySubFilter unless you require subtitles (including sign translations) to be significantly sharper than the video and are willing to risk breaking complex sign translations. (I have no other objections to XySubFilter.)
Do not use the internal subtitle renderer of MPC‑HC (which is activated by ‘Playback → Auto-load subtitles’ or ‘Playback → Use the built-in subtitle renderer’), because it it still has various bugs related to parsing, scaling and colour. It also provides a lower visual quality than that achieved by xy-VSFilter (which is used by CCCP).
Do not use Kawaii Codec Pack without manually installing CCCP’s xy-VSFilter, because it uses XySubFilter or old xy-VSFilter out of the box. XySubFilter is fine if you want supersharp subtitles and broken sign translations, but the old xy-VSFilter has various bugs that are fixed in CCCP.
Do not use the old standalone VSFilter (from guliverkli2 or guliverkli), because it is slow, has bad support for modern files, provides a low visual quality, uses a fixed colour matrix (BT.601) leading to incorrect colours for some new files, and forces the decoder to convert 10‑bit samples to 8‑bit ones, which lowers video quality if you use madVR.
Do not use the internal subtitle renderer of ffdshow tryouts, because it has bad support for the ASS format. It probably also has many of the other issues mentioned previously.
Do not use ffdshow tryouts for H.264 decoding, because they always convert 10‑bit samples to 8‑bit ones and then do it incorrectly, leading to 10‑bit video having slightly wrong colours and, depending on the renderer, a lower overall quality.
If you want to use mpv, you should probably use lachs0r’s builds. As detailed below for OS X, add --profile=opengl-hq
if possible, --scale=ewa_lanczossharp --dscale=ewa_lanczossharp
if possible and --icc-profile-auto --blend-subtitles=video --sub-ass-vsfilter-color-compat=full
to the command line or use an equivalent configuration file.
VLC? See below.
Use mpv.
--profile=opengl-hq
to the command line to improve visual quality, unless it causes playback to stutter on your computer. If it works fine, try to further add --scale=ewa_lanczossharp --dscale=ewa_lanczossharp
unless that makes playback stutter.--icc-profile-auto
to enable full colour management.--blend-subtitles=video
unless you require subtitles (including sign translations) to be significantly sharper than the video and are willing to break complex sign translations and subtitle colour management.--sub-ass-vsfilter-color-compat=full
to ensure correct colours in subtitles (especially sign translations)..config
in your home directory, a directory named mpv
inside it, and a file named mpv.conf
inside that directory containing the following lines (edited as appropriate):
profile=opengl-hq
scale=ewa_lanczossharp
dscale=ewa_lanczossharp
icc-profile-auto
blend-subtitles=video
sub-ass-vsfilter-color-compat=full
--sub-clear-on-seek
to the command line. The downsides of this option are that some subtitles can be missing when you seek backwards and that backward sub-seek
does not work.mpv has a basic graphical user interface. If you want additional features like playlist and settings menus, try Baka MPlayer, but I do not know whether it works on OS X.
If mpv works for you, skip the rest of this section.
If you are happy to control your media player using only your keyboard and ideally run it from the command line, use mplayer2:
- Use Stefano Pigozzi’s mplayer2 build. You can drag-and-drop video files onto the mplayer2 icon and register file types to open in mplayer2 by default. (On Snow Leopard and below, this will initially crash due to vo_gl3. You can fix this by creating a directory named
.mplayer
in your home directory and a file namedconfig
inside it containing the linevo=gl
.)- Alternatively (better yet), build your own mplayer2 using the Homebrew formulæ in Stefano’s tappable repository and my mplayer2 repository, which contains many useful patches (to mplayer2 itself, not the formulæ).
- Alternatively, ask me for my versions of the above formulæ and build your own mplayer2 using them. You could even help me polish and publish them.
In all cases, add
-vf-pre ass
to the command line to enable vf_ass, because otherwise some video output modules exhibit the same problems as the internal subtitle renderer of MPC‑HC. However, know that adding this will break the colours in some (very few) new scripts. The ass branch in my mplayer2 repository fixes this and further improves vf_ass in various ways.Use vo_gl3 (
-vo gl3
) if possible and vo_gl (-vo gl
) if not. The gl3 branch in my mplayer2 repository improves vo_gl3 in general and enables its use on Snow Leopard. If you have a colour profile for your display, use-vo gl3:icc-profile=/path/to/your/profile.icc
to enable its use.Instead of adding these parameters on the command line every time you launch mplayer2, you can create a directory named
.mplayer
in your home directory and a file namedconfig
inside it containing the following lines (edited as appropriate):vf=ass vo=gl3
Do not use vo_corevideo on Snow Leopard and below, because it uses a fixed colour matrix (BT.601), leading to incorrect colours for many files.
Avoid using vo_corevideo in general, because for YʹCbCr it only supports 8‑bit 4:2:2 input, forcing 4:2:0 to have its chroma upsampled to 4:2:2, which is done with terrible quality using nearest-neighbour.
Otherwise, use MPlayer OSX Extended with an mplayer2 bundle and custom settings:
- Use Stefano Pigozzi’s mplayer2 build marked “for MPlayer OSX Extended”.
- Alternatively (better yet), build your own mplayer2 using the Homebrew formulæ in Stefano’s tappable repository and my mplayer2 repository and then package it for MPlayer OSX Extended using Stefano’s bundler.
- Alternatively, ask me for my versions of the above formulæ and bundler and build your own mplayer2 bundle using them. You could even help me polish and publish them.
Set the command-line options
-vf-pre ass -vo gl3
on the Advanced tab of MPlayer OSX Extended’s preferences. If this does not work for you, use-vf-pre ass -vo gl
instead. If it does work and you have a colour profile for your display, use-vf-pre ass -vo gl3:icc-profile=/path/to/your/profile.icc
instead.The video will play in a window separate from the controls, but the controls will still work, except that the seek bar will not show the current position.
Note that MPlayer OSX Extended uses vo_corevideo by default, which has several problems described above. If you do not override it with a
-vo
option like recommended above, or if you tick the ‘Render subtitles before all other filters’ checkbox on the Text tab, vf_ass is automatically enabled, so then you do not have to enable it manually via-vf-pre ass
, but it will not do any harm either.
Finally, you can use MPlayerX (from App Store only: the installer on the website contains malware!) or stock MPlayer OSX Extended. Both of them currently support only two colour matrices (BT.601 and BT.709) and switch between them solely based on the video resolution (BT.709 for HD, BT.601 for SD), which is sometimes wrong. This switching also has no effect on Snow Leopard and below, where BT.601 is always used. Also both players use vo_corevideo, which has the chroma upsampling problem described above. (Their colour matrices are independent of vo_corevideo.)
I do not know how good QuickTime’s video output is, although I suspect it suffers from the same fixed-colour-matrix problem on Snow Leopard and below. What I do know though is that Perian’s support for ASS subtitles is very limited and that Matroska files require a slow indexing operation every time you open a file (which does not affect quality but is annoying).
VLC? See below.
Use mpv.
--profile=opengl-hq
to the command line to improve visual quality. Remove it if it causes playback to stutter on your computer. Otherwise, try to further add --scale=ewa_lanczossharp --dscale=ewa_lanczossharp
unless that makes playback stutter.--vo=opengl:icc-profile=/path/to/your/profile.icc
to enable its use. Alternatively, --vo=opengl:icc-profile-auto
may be enough.--blend-subtitles=video
unless you require subtitles (including sign translations) to be significantly sharper than the video and are willing to break complex sign translations and subtitle colour management.--sub-ass-vsfilter-color-compat=full
to ensure correct colours in subtitles (especially sign translations)..config
in your home directory, a directory named mpv
inside it, and a file named mpv.conf
inside that directory containing the following lines (edited as appropriate):
profile=opengl-hq
scale=ewa_lanczossharp
dscale=ewa_lanczossharp
icc-profile=/path/to/your/profile.icc
blend-subtitles=video
sub-ass-vsfilter-color-compat=full
--sub-clear-on-seek
to the command line. The downsides of this option are that some subtitles can be missing when you seek backwards and that backward sub-seek
does not work.mpv has a basic graphical user interface. If you want additional features like playlist and settings menus, use Baka MPlayer.
If mpv does not work for you, build and use mplayer2. Always pass -vf-pre ass
on the command line, because otherwise some video output modules exhibit the same problems as the internal subtitle renderer of MPC‑HC. However, know that adding this will break the colours in some (very few) new scripts. This is fixed (i. e. -vf-pre ass
is safe) and many other things are improved in my mplayer2 repository. For colour management, use -vo gl3:icc-profile=/path/to/your/display/profile.icc
.
VLC? See below.
In any case, do not use VLC. It has all of the problems mentioned above: a fixed colour matrix and terrible chroma upscaling by default on Windows, subtitles rendered with libass and in screen resolution and colour space, even incorrect conversion of 10‑bit samples to 8‑bit ones. In addition, it fails to play any video that has a very low frame rate. If you are on Windows and stubbornly refuse to leave VLC, at least open the settings and switch the video renderer to the OpenGL one: this should resolve the colour matrix issue and switch to bilinear chroma upscaling.
libswscale and most if not all renderers built into mpv, mplayer2 and MPC‑HC shift horizontally subsampled MPEG‑2 and MPEG‑4 chroma to the right by half a pixel, while madVR shifts horizontally subsampled MPEG‑1 chroma to the left by half a pixel. This means that of the above, chroma (i. e. colour, as opposed to brightness) is correctly positioned only by vo_gl3 in my patched mplayer2 and, in all but some very old files, by madVR. Besides, libswscale generally has horrible chroma upsampling by default as it uses nearest-neighbour unless some magic flags are given.
Of the above, only madVR, mpv and mplayer2 read and use the colour matrix flag in MPEG video streams, and different decoders and renderers have different SD–HD thresholds. This means that SD files not using the BT.601 matrix and HD files not using the BT.709 matrix are always displayed with incorrect colours unless correctly tagged and rendered from YʹCbCr with madVR or played with mpv or mplayer2, while files that are not conventional SD or HD size are displayed with correct colours in some setups (including when correctly tagged and rendered from YʹCbCr with madVR or played with mpv or mplayer2) and with incorrect colours in others.
Only madVR, mpv and my patched mplayer2 perform proper colour gamut correction. vo_gl3 in vanilla mplayer2 can also perform colour gamut correction, but it always assumes the source gamut to be BT.709.
If you are using MPC‑HC to take screenshots, make sure to set the output format to PNG (the default is JPEG).
If you are familiar with the command line, ask me for my screenshot image conversion program. It will be downloadable here (with the source code) when I finally feel like releasing it.
Why bother? Right now, the screenshot program offers conversion of raw 4:2:0 YʹCbCr (and other formats) to sRGB PNG with:
long double
(yes, this is true),