SVP:4K and HDR

From SmoothVideo Project
Jump to navigation Jump to search

4K performance tips

  • Use 64-bit video players only, ensure you have at least 8 GB of RAM installed.
  • 4K/HEVC-compatible hardware decoder is essential (except for VLC, see below!)
  • 4K playback in MPC-HC 64-bit is significantly faster than in mpv.
  • mpv or VLC: turn off SVP menu -> Application settings -> Additional options -> Allow output in 10-bit color depth to save CPU power.
  • VLC only: turn OFF (!!!) hardware video decoder, or just run VLC via SVP's main menu.
  • Enable full hardware acceleration via NVIDIA Optical Flow on compatible cards (Turing and later)

HDR playback - Windows

HDR topic is rather complicated so here's the short summary:

The best choice for HDR playback with SVP is --> DirectShow player (i.e. MPC-HC) + Avisynth Filter (AVSF) + MPC Video renderer

madVR renderer will also work.

Dolby Vision support

Correct DoVi playback is only supported in:

  • a DirectShow player (i.e. MPC-HC) + Avisynth Filter (AVSF) ver. >= 1.4.7 + MPC Video renderer ver. >=0.7.0, or
  • mpv with SVP's mod (devs may refer to the PR)

HDR playback - macOS

IINA 1.3.1+ supports HDR playback on HDR screens:

  • macOS -> System settings -> Displays -> High Dynamic Range = ON
  • IINA -> Settings -> Video/Audio -> Enable HDR support = ON

Colors - playing HDR video on SDR display

Special colors processing called "HDR tone mapping" is required is this case, otherwise the colors are washed-out.

Hdr-washed-out.png

DirectShow video players

In DirectShow video players, e.g. MPC-HC, only TWO renderers can do tone mapping: madVR or MPC Video Renderer. And to pass correct HDR data to MPC VR or madVR you have to use "AviSynth Filter" instead of ffdshow.

One more time: if you can use AVSF + MPC VR - just do it!

If for some reason you can't use AviSynth Filter + MPC VR/madVR then there's a compatibility option - an SVP's own tone mapping implementation. It's much simpler but at least it makes HDR movies watchable. SVP menu -> Application settings -> Additional options -> Try to recover HDR colors is on by default so it must work "out of the box".

Hdr-recover.png

This isn't the true HDR tone mapping but it's the best we could do to fix the situation.

mpv video player

mpv has a lot of options for tone mapping and it also supports 10-bit video so it produces much more accurate image than any DirectShow player with SVP's "color recovery". But is also needs significantly more CPU power, especially in 10-bit colors mode (see SVP menu -> Application settings -> Additional options -> Allow output in 10-bit color depth).

This applies to all mpv-based players: Plex Media Player, IINA, etc.

VLC

VLC does tone mapping automatically, BUT only in Direct3D11 video output mode.

Note that if you run VLC from SVP's menu, it'll be switched to Direct3D9 mode by default, because D3D9 mode is much smoother. To override this set main.setup.vlc.d3d9 to 'false' in SVP's 'All settings' panel.

Colors - playing HDR video on HDR display

Only for Windows 10/11

1. AVSF + MPC VR or madVR is the best choice.

2. mpv player can playback HDR in vo=gpu + gpu-api=d3d11 mode (which is the default), but it can't switch the display to HDR mode - see below. Note that it doesn't work with 'vo=gpu-next'!

3. VLC 3.0 can do the same but mpv's performance is better; VLC must be run with "Direct3D11 video output".

For mpv and VLC you have to turn on "Use HDR" or "Play HDR games and apps" or "HDR and WCG" (the name depends on the Windows version) switch in Windows Display settings first.

Hdr windows.png

Transcoding

At the time (mid '2021) there's no known way to transcode HDR source while keeping HDR data. The best you can do is apply a tone mapping filter to a 10-bit HDR source and convert it into 8-bit SDR. There're two options available

  1. fast SVP's tone mapping (same as "Try to recover HDR colors" option mentioned above) - enabled by default in all transcoding modes
  2. slow but higher quality tone mapping via ffmpeg's filter: switch to Advanced mode and choose the "tonemap" filter, it will add the following string into the lavfi field:
zscale=transfer=linear,tonemap=reinhard,zscale=transfer=bt709,format=yuv420p

also set depth to 8-bit. You can read more about tonemap filter options there.