I am copying this is from the Plex forum as this belongs on this forum also.
I had a major breakthrough in solving the mystery of the 4800x and HEVC video that I believe is worth a tag.
A user on the Plex forum had me test his handbrake encoded MKV files and they played correctly on the 4800x. That lead me to reencode my test file using Handbreak to make to see what would happen. To my shock and amazement, it played perfectly on the 4800x.
My test video is AAC mono, originally shot on an iPhone 6s. This is important as this means the plex server will not attempt to transcode any part of the newly constructed MKV files.
This file plays perfectly on the 4800x:
https://mega.nz/file/ELo1GA7Z#ymwHUOmvN3rD4qIhN3U0wLhhND759YijuDW9XxafBRE
This is where things get interesting. I used the latest FFmpeg release, FFmpeg 4.4 to make a new container for the video/audio without modifying the underlying video or audio.
i.e.,
./ffmpeg -i ‘OG-Handbreak-Img-8880-Hevcsdr8bit-1.mkv’ -flags +global_header -vcodec copy -acodec copy ‘Broken-FFmpeg-Img-8880-Hevcsdr8bit-2.mkv’
https://mega.nz/file/9ax0lJAZ#AcTbb0Xo5l9OhTYRJLoUH2T0bp1vN5EBGhQmvG4Nhv4
When I add the new MKV file with the MKV container that has just been built by FFmpeg to Plex and try to direct play it on the Roku 4800x, now I am seeing the Roku 4800x apply BT.2020 color to the video despite the fact that the OG version with the container encoded by HandBreak plays the video back as BT.709.
This explains all the issues with the plex server transcoding multichannel AAC also, as 5.1 channel AAC audio is transcoded to 5.1 AC3 and merged with the original HEVC video in a new MKV container when transcoding. Since FFmpeg is adding/missing a flag, or something else, compared to Handbreak in the newly constructed MKV container, the video is played back as BT.2020 HEVC despite being coded as BT.709 HEVC.
To me, it’s underly mindblowing that a new Roku would not work better with the current FFmpeg release.
In any event, the cause of the 4800x issues has been narrowed down. Something with the 4800x does not process 8-bit, HEVC, MKV containers encoded with the latest FFmpeg properly and this is why we are seeing BT.2020 color when we should be seeing BT.709 on the displays.
Make sure you forward that additional testing information directly to Roku.
I'm glad you are excited.. Those two files follow exactly what I've been saying about the header flagging..
The first one had no flags for color space.... 4800 assumed BT.709...
The second one has flags set for BT.709.. 4800 played as BT.2020.....
If you remove the flags from the header for the second file, it will play just fine like the first one...
What more can I tell you guys... IT'S THE HEADER FLAGS FOR COLOR SPACE....
Are they fixing this? I just had this problem today and it was driving me crazy. I bought a new Roku specifically to avoid having to transcode my media, but now I have to transcode it to avoid everything looking red and saturated.
What are you using to host the file?
You can use mkv toolkit to remove the header info from the file and it should play fine...
I use Plex. Thought it was a Plex issue at first. Unfortunately, my files are MP4 with AAC audio. So it looks like they're getting re-muxed by Plex into an MKV to handle the AAC problem (by transcoding to AC3). Not sure if there's a straightforward solution in this situation.
Do you happen to have a small test file of your MP4 that you can host somewhere so I can play with them?
You guys rock. This works!
Specifically I used MKVToolNix's Header editor and simply removed colour range, vertical chroma siting and colour range and horizontal chroma siting. Not all of my movies had that set, but most did.
The problem I'm having is that my video files are MP4, being played through Plex on a Roku Express 4k+. I have two files that are both HEVC video with AAC audio. One has the color space issue where the colors are all red/saturated and one does not. Anyone have any idea what is going on and how to address it?
What I just posted fixes the red saturation issue. Basically clear all the colour information flags. That worked for me.