4K HDR not direct playing without transcoding on wired TV/Xbox/Etc. Plays fine on wireless laptop

Server Version#: 1.21.4.4079 (running off Synology (DS1819+)
Player Version#:5.10.0
Platform Version: 10.0.19041.6288 (Xbox Series X)
Platform Version: 1.0.13_1.0.13.29_2031_0014 (Vizeo 4K tv, Chipset : SX7A)

I’m attempting to play 4K files I ripped from my 4K disks on Plex.
I ripped them with MakeMKV backup, and used Handbrake Nightly to process.
If I play the files on my laptop via the web player everything is fine. Plex shows it as direct play (no transcoding) and 42 Mbps reserved on a local connection.

If I attempt to play the same files on my TV or my Xbox Series X (both with direct play / direct streaming allowed) plex sees them as a local connection, reserves 8 Mbps bandwidth, then starts transcoding to 1080P (H264). [which is why I’m guessing it only reserves 8Mbps] (with the normal washed out colours, etc.) To remove ‘the network’ as a factor, I tried this after removing the TV and Xbox (separately and together at the same time) off the wired network and put them on the same network as the wireless laptop - same issue. So I put them back on wired.

If I ‘chrome cast’ from my laptop to the TV, files show in 4k/UHD just fine, colours look right.

When I look in Plex Media Server.log … I see the following :

Mar 06, 2021 22:22:47.241 [0x7f7bbab7d700] DEBUG - [Transcode] Found session GUID of 8702rb94sjemcfg732be0pyf in session start.
Mar 06, 2021 22:22:47.242 [0x7f7bbab7d700] DEBUG - [Transcode] TranscodeUniversalRequest: using augmented profile Generic
Mar 06, 2021 22:22:47.242 [0x7f7bbab7d700] DEBUG - [Transcode] Downloading document http://127.0.0.1:32400/library/metadata/3477?includeBandwidths=1&offset=-1&X-Plex-Incomplete-Segments=1&X-Plex-Session-Identifier=ktri44k8mxl1mh36aqwf09a4
Mar 06, 2021 22:22:47.242 [0x7f7bbab7d700] DEBUG - [Transcode] Auth: authenticated user 1 as [redacted]
Mar 06, 2021 22:22:47.246 [0x7f7bbab7d700] DEBUG - [Transcode] We're going to try to auto-select an audio stream for account 1.
Mar 06, 2021 22:22:47.246 [0x7f7bbab7d700] DEBUG - [Transcode] Selecting best audio stream for part ID 7738 (autoselect: 0 language: en)
Mar 06, 2021 22:22:47.246 [0x7f7bbab7d700] DEBUG - [Transcode] Audio Stream: 17309, Subtitle Stream: -1
Mar 06, 2021 22:22:47.247 [0x7f7bbab7d700] DEBUG - [Transcode] Scaled up video bitrate to 31474Kbps based on 1.500000x fudge factor.
Mar 06, 2021 22:22:47.247 [0x7f7bbab7d700] DEBUG - [Transcode] Scaled maximum bitrate for resolution reduction to 7878Kbps.
Mar 06, 2021 22:22:47.247 [0x7f7bbab7d700] DEBUG - [Transcode] MDE: Selected protocol http; container: mkv
Mar 06, 2021 22:22:47.248 [0x7f7bbab7d700] DEBUG - [Transcode] MDE: analyzing media item 7127
Mar 06, 2021 22:22:47.248 [0x7f7bbab7d700] DEBUG - [Transcode] MDE: Baby Driver 4K QSV: Direct Play is disabled
Mar 06, 2021 22:22:47.248 [0x7f7bbab7d700] DEBUG - [Transcode] MDE: Baby Driver 4K QSV: no direct play video profile exists for http/mp4/h264
Mar 06, 2021 22:22:47.248 [0x7f7bbab7d700] DEBUG - [Transcode] MDE: Baby Driver 4K QSV: no direct play video profile exists for http/mp4/h264/aac
Mar 06, 2021 22:22:47.248 [0x7f7bbab7d700] DEBUG - [Transcode] Baby Driver 4K QSV - video.level limitation applies: 51 > 41
Mar 06, 2021 22:22:47.248 [0x7f7bbab7d700] DEBUG - [Transcode] MDE: Baby Driver 4K QSV: Direct Streaming is disabled, so video stream will be transcoded
Mar 06, 2021 22:22:47.248 [0x7f7bbab7d700] DEBUG - [Transcode] MDE: Baby Driver 4K QSV: no remuxable profile found, so video stream will be transcoded
Mar 06, 2021 22:22:47.248 [0x7f7bbab7d700] DEBUG - [Transcode] MDE: Cannot direct stream video stream due to profile or setting limitations
Mar 06, 2021 22:22:47.248 [0x7f7bbab7d700] DEBUG - [Transcode] Scaled up video bitrate to 31474Kbps based on 1.500000x fudge factor.
Mar 06, 2021 22:22:47.248 [0x7f7bbab7d700] DEBUG - [Transcode] Scaled maximum bitrate for resolution reduction to 7878Kbps.

After seeing ‘video.level limitation applies: 51 > 41’ I tried upping the limit to 5.2 but still got the following errors :

Mar 06, 2021 23:35:39.486 [0x7f7bbab7d700] DEBUG - [Transcode] MDE: Baby Driver 4K QSV: Direct Play is disabled
Mar 06, 2021 23:35:39.486 [0x7f7bbab7d700] DEBUG - [Transcode] MDE: Baby Driver 4K QSV: no direct play video profile exists for http/mp4/h264
Mar 06, 2021 23:35:39.486 [0x7f7bbab7d700] DEBUG - [Transcode] MDE: Baby Driver 4K QSV: no direct play video profile exists for http/mp4/h264/aac
Mar 06, 2021 23:35:39.486 [0x7f7bbab7d700] DEBUG - [Transcode] MDE: Baby Driver 4K QSV: Direct Streaming is disabled, so video stream will be transcoded
Mar 06, 2021 23:35:39.486 [0x7f7bbab7d700] DEBUG - [Transcode] MDE: Baby Driver 4K QSV: no remuxable profile found, so video stream will be transcoded
Mar 06, 2021 23:35:39.486 [0x7f7bbab7d700] DEBUG - [Transcode] MDE: Cannot direct stream video stream due to profile or setting limitations

Basically, even though the TV can display the video successfully, for some reason Plex isn’t direct playing it, and instead is forcing transcoding on a local connection.

In Plex (and the app) I have both local and qualify set to ‘Original’ . I’ve maxed out every ‘video’ setting on both the server and players.

Can anyone point me in the right direction?

File info of one of the files I'm trying to play : 
#### Media

* Duration 1:52:39
* Bitrate 21151 kbps
* Width 3840
* Height 1606
* Aspect Ratio 2.35
* Video Resolution 4K
* Container MP4
* Video Frame Rate 24p
* Web Optimized No
* Audio Profile lc
* Has 64bit Offsets true
* Video Profile high

#### Part

* Duration 1:52:39
* File Baby Driver 4K-264 QSV.m4v
* Size 16.64 GB
* Audio Profile lc
* Container MP4
* Has 64bit Offsets true
* Web Optimized No
* Video Profile high

* Codec H264
* Bitrate 20983 kbps
* Bit Depth 8
* Chroma Location left
* Chroma Subsampling 4:2:0
* Coded Height 1616
* Coded Width 3840
* Color Primaries bt2020
* Color Range tv
* Color Space bt2020nc
* Color Trc smpte2084
* Frame Rate 23.976 fps
* Height 1606
* Level 5.1
* Profile high
* Ref Frames 1
* Stream Identifier 1
* Width 3840
* Display Title 4K (H.264 HDR)
* Extended Display Title 4K (H.264 HDR)

* Codec AAC
* Channels 2
* Bitrate 168 kbps
* Language English
* Audio Channel Layout stereo
* Profile lc
* Sampling Rate 48000 Hz
* Stream Identifier 2
* Display Title English (AAC Stereo)
* Extended Display Title English (AAC Stereo)

[View XML](https://192-168-0-200.9133d2938a144690809864a27bbf63a9.plex.direct:32400/library/metadata/3477?checkFiles=1&includeAllConcerts=1&includeBandwidths=1&includeChapters=1&includeChildren=1&includeConcerts=1&includeExtras=1&includeFields=1&includeGeolocation=1&includeLoudnessRamps=1&includeMarkers=1&includeOnDeck=1&includePopularLeaves=1&includePreferences=1&includeRelated=1&includeRelatedCount=1&includeReviews=1&includeStations=1&X-Plex-Token=M1X3sXdDS9DjZRVzEaWc)

What happens when you play the MakeMKV rip, without converting with Handbrake?

The Handbrake version is not HDR. It is 8-bit H.264. HDR video is 10-bit HEVC.

Handbrake does not support transcoding HDR video, as it has 8-bit internal paths. Even if you choose HEVC 10-bit in the video panel the output will not be HDR.

Edit: Just noticed that the Handbrake nightly builds pass HDR10 metadata. You’ll still need to transcode to HEVC instead of H.264.

Thanks for the reply.

I didn’t actually back it up into a MKV file, did a full backup of the disc to the HD.
(which is just the habit I’ve gotten into with bluray actually … no real reason for it I guess … I can try ripping to a MKV file.)

Handbrake does not support transcoding HDR video, as it has 8-bit internal paths. Even if you choose HEVC 10-bit in the video panel the output will not be HDR.

This was the case until a week or so ago, but they added it into the nightly build - it will do HDR and keep the meta BUT you need to have all the 8-bit filters turned off.

That being said, I’ve ‘handbraked’ (I guess it’s a verb now) this rip with almost every codex option. I’m trying H.264 10-bit (x264) now … just incase I’ve screwed something up.

Ignoring all that though … the file will play HDR on my laptop. (or at least it says it is direct streaming it, not transcoding, and the colours look ‘normal’. So even if it isn’t ‘real HDR’ because I’ve messed something up, it looks it anyways.

Is the idea that maybe because it isn’t 10-bit HDR, the player isn’t seeing a profile for it?

You can rip a copy of the movie from the backup. In MakeMKV, choose Open Files, and pick index.bdmv from the BDMV folder. It will read the backup and look just like you’re ripping from the disc.

Just saw that. Nice it is finally added to the product.

HDR10 is HEVC 10-bit video with the BT2020 color space and the HDR metadata (see Wikipedia).

Not sure what other options are required, but you’ll have to choose HEVC 10-bit as the output.

Not sure why the Vizio or xbox is transcoding the current video. I don’t have either one and don’t know their limitations. If available, you might look at the log files for the Plex client on either device. Client logs sometimes have additional info not shown in the server logs.

1 Like

Thanks (again).

I’ll poke around at the logs and see.
I also stumbled across a thread where one of the Plex Support folks suggested to another person that they could try running Plex in a docker container. Something about not recognizing the colour profiles shrug.

BUT … it wasn’t clear if that thread was about colours washing out when transcoding (which is expected) or if it wasn’t supposed to transcode.

In the end of the day, this is just me obsessing about something that I don’t REALLY need :stuck_out_tongue: I can watch these in 1080p if I need to. Or just put the 4k disc in my actual drive. (or watch them on the laptop) …

But yeah … for some reason both players seem to be transcoding instead of direct playing.

I might actually try to hook my 2nd monitor from my laptop to the Xbox just to rule out the TV being … ‘weird’ about it. shrug

SOO much confusion around 4K formats in both plex and handbrake. :slight_smile:

And now you have me obsessing… :slight_smile:

Encoded one minute of a 4K HDR movie and it seems to work. I won’t say it is the optimal transcode, but it lit up the HDR banner on my TV and the info in MediaInfo looks correct.

Details below.


Handbrake Nightly 20210306221548-c07495de1-master (2021030601) on Windows 10.

Loaded a HDR10 MKV ripped using MakeMKV.

H.265 MKV 2160p60 preset

  • Summary: MKV container
  • Dimensions: no changes
  • Filters: All Off.
  • Video: Video Encoder = H.265 10-bit (x265); Framerate = 23.976 (matches movie); Encoder Profile = Main 10; Encoder Level = 5.1. Left Constant Quality = 24 and Encoder Preset = Fast since this is just a test.
  • Audio: Passthru for both the TrueHD and AC3 audio tracks.
  • Subtitles: Add PGS track, no boxes checked.
  • Chapters: selected

Here’s the MediaInfo analysis of the Handbrake output:

Summary
Video
ID                                       : 1
Format                                   : HEVC
Format/Info                              : High Efficiency Video Coding
Format profile                           : Main 10@L5.1@High
HDR format                               : SMPTE ST 2086, HDR10 compatible
Codec ID                                 : V_MPEGH/ISO/HEVC
Duration                                 : 59 s 977 ms
Width                                    : 3 840 pixels
Height                                   : 1 600 pixels
Display aspect ratio                     : 2.40:1
Frame rate mode                          : Constant
Frame rate                               : 23.976 (24000/1001) FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 10 bits
Writing library                          : x265 3.5+dev-681c05e83:[Windows][GCC 10.2.0][64 bit] 10bit
Encoding settings                        : cpuid=1111039 / frame-threads=3 / numa-pools=8 / wpp / no-pmode / no-pme / no-psnr / no-ssim / log-level=2 / input-csp=1 / input-res=3840x1600 / interlace=0 / total-frames=0 / level-idc=51 / high-tier=1 / uhd-bd=0 / ref=3 / no-allow-non-conformance / repeat-headers / annexb / no-aud / no-hrd / info / hash=0 / no-temporal-layers / open-gop / min-keyint=24 / keyint=240 / gop-lookahead=0 / bframes=4 / b-adapt=0 / b-pyramid / bframe-bias=0 / rc-lookahead=15 / lookahead-slices=8 / scenecut=40 / hist-scenecut=0 / radl=0 / no-splice / no-intra-refresh / ctu=64 / min-cu-size=8 / no-rect / no-amp / max-tu-size=32 / tu-inter-depth=1 / tu-intra-depth=1 / limit-tu=0 / rdoq-level=0 / dynamic-rd=0.00 / no-ssim-rd / signhide / no-tskip / nr-intra=0 / nr-inter=0 / no-constrained-intra / strong-intra-smoothing / max-merge=2 / limit-refs=3 / no-limit-modes / me=1 / subme=2 / merange=57 / temporal-mvp / no-frame-dup / no-hme / weightp / no-weightb / no-analyze-src-pics / deblock=0:0 / sao / no-sao-non-deblock / rd=2 / selective-sao=4 / no-early-skip / rskip / fast-intra / no-tskip-fast / no-cu-lossless / no-b-intra / no-splitrd-skip / rdpenalty=0 / psy-rd=2.00 / psy-rdoq=0.00 / no-rd-refine / no-lossless / cbqpoffs=0 / crqpoffs=0 / rc=crf / crf=24.0 / qcomp=0.60 / qpstep=4 / stats-write=0 / stats-read=0 / vbv-maxrate=160000 / vbv-bufsize=160000 / vbv-init=0.9 / min-vbv-fullness=50.0 / max-vbv-fullness=80.0 / crf-max=0.0 / crf-min=0.0 / ipratio=1.40 / pbratio=1.30 / aq-mode=2 / aq-strength=1.00 / cutree / zone-count=0 / no-strict-cbr / qg-size=32 / no-rc-grain / qpmax=69 / qpmin=0 / no-const-vbv / sar=1 / overscan=0 / videoformat=5 / range=0 / colorprim=9 / transfer=16 / colormatrix=9 / chromaloc=0 / display-window=0 / master-display=G(34000,16000)B(13250,34500)R(7500,3000)WP(15635,16450)L(10000000,1) / cll=0,0 / min-luma=0 / max-luma=1023 / log2-max-poc-lsb=8 / vui-timing-info / vui-hrd-info / slices=1 / no-opt-qp-pps / no-opt-ref-list-length-pps / no-multi-pass-opt-rps / scenecut-bias=0.05 / hist-threshold=0.03 / no-opt-cu-delta-qp / no-aq-motion / hdr10 / hdr10-opt / no-dhdr10-opt / no-idr-recovery-sei / analysis-reuse-level=0 / analysis-save-reuse-level=0 / analysis-load-reuse-level=0 / scale-factor=0 / refine-intra=0 / refine-inter=0 / refine-mv=1 / refine-ctu-distortion=0 / no-limit-sao / ctu-info=0 / no-lowpass-dct / refine-analysis-type=0 / copy-pic=1 / max-ausize-factor=1.0 / no-dynamic-refine / no-single-sei / no-hevc-aq / no-svt / no-field / qp-adaptation-range=1.00 / no-scenecut-aware-qpconformance-window-offsets / right=0 / bottom=0 / decoder-max-rate=0 / no-vbv-live-multi-pass
Default                                  : Yes
Forced                                   : No
Color range                              : Limited
Color primaries                          : BT.2020
Transfer characteristics                 : PQ
Matrix coefficients                      : BT.2020 non-constant
Mastering display color primaries        : Display P3
Mastering display luminance              : min: 0.0001 cd/m2, max: 1000 cd/m2

Here’s the MediaInfo analysis of the original rip:

Summary
Video
ID                                       : 1
ID in the original source medium         : 4113 (0x1011)
Format                                   : HEVC
Format/Info                              : High Efficiency Video Coding
Format profile                           : Main 10@L5.1@High
HDR format                               : SMPTE ST 2086, HDR10 compatible
Codec ID                                 : V_MPEGH/ISO/HEVC
Duration                                 : 2 h 24 min
Bit rate                                 : 64.7 Mb/s
Width                                    : 3 840 pixels
Height                                   : 2 160 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
Frame rate                               : 23.976 (24000/1001) FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0 (Type 2)
Bit depth                                : 10 bits
Bits/(Pixel*Frame)                       : 0.325
Stream size                              : 65.3 GiB (92%)
Language                                 : English
Default                                  : Yes
Forced                                   : No
Color range                              : Limited
Color primaries                          : BT.2020
Transfer characteristics                 : PQ
Matrix coefficients                      : BT.2020 non-constant
Mastering display color primaries        : Display P3
Mastering display luminance              : min: 0.0001 cd/m2, max: 1000 cd/m2
Original source medium                   : Blu-ray
1 Like

So, this morning I did a 2 minute clip from a Baby Driver MKV at H265 10 (Intel QSV) with settings that matched above (although I think I forgot and left it on same-as-source variable for frame rate).

That clip played on my TV in HDR!
On my PC, it transcoded.

Tried again using H.264 (Intel QSV) with variable frames and it transcoded on everything…
Tried again using H.264 10-bit and constant frames (same as source) transcoded on everything.

I’m doing a sample at ‘very slow’ with RF 20 now. Horrified that 1:30 seconds took 20 minutes to process. lol.

Hmmm … Something weird is afoot.
NOW the 4k version of Baby Drive I encoded (and left on my server) is direct streaming.

The one that wasn’t direct playing yesterday.

It is playing in 2160p at HDR10

It started doing this After Plex was able to directly stream the 2 minute clip from earlier.

I’m wondering if maybe Plex didn’t make a profile for the movie. Not seeing MBE errors in the logs like I was last night. This file (which was direct streaming on my laptop last night) is NOW transcoding on the laptop.

Something weird.

Transcoding is expected when playing HEVC video via Plex Web. Other than Safari, web browsers do not support HEVC video (I’m not sure if Safari supports HDR, my Macbook is too old & doesn’t support HEVC video).

For playback on a PC or Mac, use Plex for Windows/Mac. HEVC/HDR video should direct play. Note that Plex for Win/Mac does not output HDR video. It tonemaps HDR to SDR so the colors look correct. The tonemapping occurs on the PC, so Plex Media Server sees it as direct playing.

H.264 does not support HDR. If your goal is to have HDR output, transcoding to H.264 is a waste of time.

1 Like

I wonder if this is the same thing happening to me (Need help figuring out why Vizio tv won't direct play this 4k file - #3 by sage2050)

Will be watching this thread.

image

Yeah … Plex is doing something clever. (or something unexpected)

This file is the same H.264 file that I did the other day (that wasn’t playing without transcoding).

Now … it is playing (and showing HDR10) on my TV.

It SHOULDN’T be … because … as you point out H.264 doesn’t support it. So maybe plex is tonemapping behind the scenes? I’m wondering if I rebooted the TV if it wouldn’t be ‘broken’ again. Admittedly, I ran so many tests yesterday, my notes started getting sloppy at one point.

This same file which was direct streaming fine on the PC yesterday, now transcodes on the PC.

heh.

Either way, I’m going to be processing these in H.265 with the settings that worked for my sample. Not looking forwards to 30+ hour processing times … but HDR comes at a price :slight_smile:

I’ll keep updating stuff as I stumble across it.

Only quickly scanned this topic, but we did add profiles for the newer Vizio TVs that we didn’t have previously in the last update. That means that some things that transcoded before will be direct playing now. Perhaps that is the reason for change (and the previous issue)?

1 Like

Maybe that is where my madness came from? lol.

Either way, I’ve been meaning to update this thread with the settings I’ve used, because finding something when this problem kicked in was just … all over the place.

Maybe folks in the future will find it and have an easier time.

Process for ripping my 4K movies for Plex on my Vizeo Smart TV :

  1. Rip to MKV file using MakeMKV, or create an actual MKV file from a bluray backup of the disc. This is a key step, because it will preserve the meta information / UHD profile.

  2. Process the MKV file directly in handbrake nightly with the following settings :

image


image

For Audio I select the tracks I want, and set them all to passthru.

Note : Recently Handbrake Nightly put out a release that supports 10-bit encoding, so it doesn’t ‘upsample’ 8-bit anymore, but you HAVE to have all the filters that are still 8-bit turned off.

I want to thank FordGuy for not just regurgitating something he read in a 2 year old post somewhere, but actually LOOKING at the problem. Super helpful.

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.