rigaya/QSVEnc

No P-Frames

jdobbs1954 opened this issue · 20 comments

I've been doing so encoding testing with the hope of using QSVENCC for output to Blu-Ray formats. In my testing I've noticed that when I select HEVC for output, and then examine the output with FFPROBE -- there are no p-frames in the output (even though the software tells me they were generated when if finishes execution).

For example, when I did a short test with a GOP size of 24 (--gop-len 24). The software says this:

encoded 5465 frames, 281.56 fps, 2327.91 kbps, 63.25 MB
encode time 0:00:19, CPU: 1.4%, GPU: 12.2%, VD: 95.9%
frame type IDR 228
frame type I 228, total size 11.69 MB
frame type P 1366, total size 23.99 MB
frame type B 3871, total size 27.58 MB

But when I examine it with FFPROBE it tells me that all the GOPs start with a single i-frame followed by 23 b-frames.

The h264 option, on the other hand, seems to generate GOPs correctly.

Am I missing something?

Does this mean that you need P frames for bluray format, as generally this should cause no problem in playback.

If so, you may need to try adding --no-hevc-gpb.

Yes. In blu-ray there is a limit as to how many b-frames can exist between p/i-frames. For UHD (hevc) it is typically 3.

I will try the -no-hevc-gpb and see what impact it has.

I tried the --no-hevc-gpb option -- no change, each GOP is still a single i-frame followed by 23 b-frames. Any other suggestions?

Thanks.

Yes. In blu-ray there is a limit as to how many b-frames can exist between p/i-frames. For UHD (hevc) it is typically 3.

I will try the -no-hevc-gpb and see what impact it has.

Hello @jdobbs1954

I thought the 3 b-frames were only for Blu-Ray, while UHD could have more.
I did run ffprobe on one UHD conform file and got this sample output:

I
B
B
B
B
B
B
B
B
P
B
B
B
B
B
B
P
B
B
B
B
B
B
B
P
I

What GPU are you using? iGPU or dGPU? And which one?
And what is the complete command that you run to get your result, if I may ask?

Thank you.

Yes. UHD can have more -- but not when it is encoded for a UHD-Bluray. There the limit is 3.

Here is what "--check-features" says about my hw:

Intel Media SDK API v2.09
reader: raw, avi, avs, vpy, avsw, avhw
Environment Info
OS : Windows 11 x64 (22631) [UTF-8]
CPU: 13th Gen Intel Core i7-1360P [5.02GHz] (4P+8E,12C/16T)
RAM: Used 10372 MB, Total 16068 MB
GPU: Intel Iris(R) Xe Graphics (96EU) 100-1500MHz [28W] (31.0.101.4575)

Here is output from a short encode:

QSVEncC (x64) 7.65 (r3361) by rigaya, May 24 2024 13:04:40 (VC 1939/Win)
OS Windows 11 x64 (22631) [UTF-8]
CPU Info 13th Gen Intel Core i7-1360P [5.01GHz] (4P+8E,12C/16T)
GPU Info Intel Iris(R) Xe Graphics (96EU) 100-1500MHz [28W] (31.0.101.4575)
Media SDK QuickSyncVideo (hardware encoder) FF, 1st GPU(i), API v2.09
Async Depth 3 frames
Hyper Mode off
Buffer Memory d3d11, 24 work buffer
Input Info avqsv: H.265/HEVC, 1918x802, 24000/1001 fps
avcodec: subrip
AVSync auto
Output H.265/HEVC(yuv420 10bit) main10 @ Level 4 (high tier)
1918x802p 1:1 23.976fps (24000/1001fps)
avwriter: hevc, #1:aac/5.1 -> aac/5.1/128kbps, subtitle#1
=> matroska
Target usage 4 - balanced
Encode Mode ICQ (Intelligent Const. Quality)
ICQ Quality 23
QP Limit min: 22, max: 63
Ref frames 3 frames
Bframes 3 frames, B-pyramid: on
Max GOP Length 24 frames
VUI chromaloc:left
Ext. Features WeightP WeightB GPB aud pic_struct tskip ctu:64 sao:all

encoded 1456 frames, 458.73 fps, 451.97 kbps, 3.27 MB
encode time 0:00:03, CPU: 1.7%, VD: 97.3%
frame type IDR 61
frame type I 61, total size 1.46 MB
frame type P 364, total size 1.38 MB
frame type B 1031, total size 0.43 MB

Notice that is says p-frames are being generated -- but they aren't.

Here is an example command line:

"C:\apps\qsvenc\qsvencc64.exe" --avhw -i "input.mp4" --codec hevc --profile main10 --output-depth 10 --chromaloc auto --colorprim auto --transfer auto --colormatrix auto --master-display copy --max-cll copy --qp-min 0 --icq 23 --aud --pic-struct --vbv-bufsize 45000 --max-bitrate 48000 --gop-len 24 --audio-codec 1?aac --audio-bitrate 1?128 --sub-source "input.srt" --chapter-copy -o "output.mkv"

But I've tried numerous command lines, including different types of encoding (vb, icq, qvbr etc) -- none of them have p-frames in the output.

--no-hevc-gpb worked for myself, P frame was generated fine when used with --no-hevc-gpb.

Without --no-hevc-gpb
x64\QSVEncC64.exe -i sample_movie_1080p.mpg -o F:\temp\test.mp4 -c hevc --output-depth 10 -b 3 --gop-len 24

--------------------------------------------------------------------------------
F:\temp\test.mp4
--------------------------------------------------------------------------------
cop.SingleSeiNalUnit value changed off -> auto by driver
QSVEncC (x64) 7.64 (r3360) by rigaya, May 12 2024 13:27:38 (VC 1939/Win)
OS             Windows 11 x64 (22631) [UTF-8]
CPU Info       12th Gen Intel Core i9-12900K [4.89GHz] (8P+8E,16C/24T) <DG2>
GPU Info       Intel Arc A380 Graphics (128EU) 300-2450MHz (31.0.101.5448)
Media SDK      QuickSyncVideo (hardware encoder) FF, 1st GPU(d), API v2.10
Async Depth    3 frames
Hyper Mode     off
Buffer Memory  d3d11, 35 work buffer
Input Info     avqsv: MPEG2, 1920x1080, 30000/1001 fps
VPP            ColorFmtConvertion: nv12 -> p010
AVSync         auto
Output         H.265/HEVC(yuv420 10bit) main10 @ Level 4 (high tier)
               1920x1080p 1:1 29.970fps (30000/1001fps)
               avwriter: hevc => mp4
Target usage   4 - balanced
Encode Mode    ICQ (Intelligent Const. Quality)
ICQ Quality    23
QP Limit       min: 22, max: 63
Ref frames     3 frames
Bframes        3 frames, B-pyramid: on
Max GOP Length 24 frames
Ext. Features  WeightP WeightB GPB tskip ctu:64 sao:all

encoded 5203 frames, 495.29 fps, 15115.44 kbps, 312.82 MB
encode time 0:00:10, CPU: 1.0%, GPU: 44.8%, VD: 92.7%
frame type IDR  217
frame type I    217,  total size   60.18 MB
frame type P   1301,  total size  155.54 MB
frame type B   3685,  total size   97.10 MB

ffprobe /mnt/f/temp/test.mp4 -show_frames | grep pict_type | head -50

pict_type=I
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=I
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=B
pict_type=I
pict_type=B

With --no-hevc-gpb
x64\QSVEncC64.exe -i sample_movie_1080p.mpg -o F:\temp\test.mp4 -c hevc --output-depth 10 --no-hevc-gpb -b 3 --gop-len 24 --profile main10

--------------------------------------------------------------------------------
F:\temp\test.mp4
--------------------------------------------------------------------------------
cop.SingleSeiNalUnit value changed off -> auto by driver
QSVEncC (x64) 7.64 (r3360) by rigaya, May 12 2024 13:27:38 (VC 1939/Win)
OS             Windows 11 x64 (22631) [UTF-8]
CPU Info       12th Gen Intel Core i9-12900K [4.92GHz] (8P+8E,16C/24T) <DG2>
GPU Info       Intel Arc A380 Graphics (128EU) 300-2450MHz (31.0.101.5448)
Media SDK      QuickSyncVideo (hardware encoder) FF, 1st GPU(d), API v2.10
Async Depth    3 frames
Hyper Mode     off
Buffer Memory  d3d11, 35 work buffer
Input Info     avqsv: MPEG2, 1920x1080, 30000/1001 fps
VPP            ColorFmtConvertion: nv12 -> p010
AVSync         auto
Output         H.265/HEVC(yuv420 10bit) main10 @ Level 4 (high tier)
               1920x1080p 1:1 29.970fps (30000/1001fps)
               avwriter: hevc => mp4
Target usage   4 - balanced
Encode Mode    ICQ (Intelligent Const. Quality)
ICQ Quality    23
QP Limit       min: 22, max: 63
Ref frames     3 frames
Bframes        3 frames, B-pyramid: on
Max GOP Length 24 frames
Ext. Features  WeightP WeightB NoGPB tskip ctu:64 sao:all

encoded 5203 frames, 498.13 fps, 15234.87 kbps, 315.29 MB
encode time 0:00:10, CPU: 1.0%, GPU: 46.8%, VD: 97.4%
frame type IDR  217
frame type I    217,  total size   60.18 MB
frame type P   1301,  total size  157.57 MB
frame type B   3685,  total size   97.54 MB

ffprobe /mnt/f/temp/test.mp4 -show_frames | grep pict_type | head -50

pict_type=I
pict_type=B
pict_type=B
pict_type=B
pict_type=P
pict_type=B
pict_type=B
pict_type=B
pict_type=P
pict_type=B
pict_type=B
pict_type=B
pict_type=P
pict_type=B
pict_type=B
pict_type=B
pict_type=P
pict_type=B
pict_type=B
pict_type=B
pict_type=P
pict_type=B
pict_type=B
pict_type=P
pict_type=I
pict_type=B
pict_type=B
pict_type=B
pict_type=P
pict_type=B
pict_type=B
pict_type=B
pict_type=P
pict_type=B
pict_type=B
pict_type=B
pict_type=P
pict_type=B
pict_type=B
pict_type=B
pict_type=P
pict_type=B
pict_type=B
pict_type=B
pict_type=P
pict_type=B
pict_type=B
pict_type=P
pict_type=I
pict_type=B

By the way, there might be other format related problems except P frames for UHD Bluray format, I'm not sure qsvenc can generate UHD Bluray compatible stream.

Weird. I used your exact command line (renaming my files) and using D: as output:

QSVEncC64.exe -i sample_movie_1080p.mpg -o D:\temp\test.mp4 -c hevc --output-depth 10 --no-hevc-gpb -b 3 --gop-len 24 --profile main10

...and I still get
IBBBBBBBBBBBBBBBBBBBBBBB
IBBBBBBBBBBBBBBBBBBBBBBB
...

I noticed that your Intel graphics driver is newer than mine. I'm going to download the latest and see if that has an effect.

Edit: Nope. Still the same results.

Yes. UHD can have more -- but not when it is encoded for a UHD-Bluray. There the limit is 3.

Where did you find that information?
When I investigated, 7 frames were the max B-frames for UHD Bluray (Disc).

Here are some examples:

File 1 = 7 consecutive B-frames

frame,I
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,P
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,P
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,P
frame,I
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,P
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,P
frame,I

File 2 = 4 consecutive B-frames

frame,I
frame,B
frame,B
frame,B
frame,B
frame,P
frame,B
frame,B
frame,B
frame,B
frame,P
frame,B
frame,B
frame,B
frame,B
frame,P
frame,B
frame,B
frame,B
frame,B
frame,P
frame,B
frame,B
frame,P
frame,I
frame,B
frame,B
frame,B
frame,B
frame,P
frame,B
frame,B
frame,B
frame,B
frame,P
frame,B
frame,B
frame,B
frame,B
frame,P
frame,B
frame,B
frame,B
frame,B
frame,P
frame,B
frame,B
frame,P
frame,I

File 3 = 2 consecutive B-frames

frame,I
frame,B
frame,B
frame,P
frame,B
frame,B
frame,P
frame,B
frame,B
frame,P
frame,B
frame,B
frame,P
frame,B
frame,B
frame,P
frame,B
frame,B
frame,P
frame,B
frame,B
frame,P
frame,B
frame,B
frame,P
frame,B
frame,B
frame,I

File 4 = 2

frame,I
frame,B
frame,B
frame,P
frame,B
frame,B
frame,P
frame,B
frame,B
frame,P
frame,B
frame,B
frame,P
frame,B
frame,B
frame,P
frame,B
frame,B
frame,P
frame,B
frame,B
frame,P
frame,B
frame,B
frame,I

GPU Info Intel Iris(R) Xe Graphics (96EU) 100-1500MHz [28W] (31.0.101.4575)

That is an iGPU if I am not mistaken.
I will do some testing with the GPUs I have at hand and report back.
Using the same command here:

x64\QSVEncC64.exe -i sample_movie_1080p.mpg -o F:\temp\test.mp4 -c hevc --output-depth 10 --no-hevc-gpb -b 3 --gop-len 24 --profile main10

This could be an iGPU-related issue.

I tested it on:

Machine 1:

QSVEncC (x64) 7.65 (r3361) by rigaya, May 24 2024 13:04:40 (VC 1939/Win)
OS             Windows 11 x64 (22631) [UTF-8]
CPU Info       12th Gen Intel Core i9-12900K [4.89GHz] (8P+8E,16C/24T) <AlderlakeS>
GPU Info       Intel UHD Graphics 770 (32EU) 300-1550MHz [125W] (31.0.101.5522)
Media SDK      QuickSyncVideo (hardware encoder) FF, 2nd GPU(i), API v2.10
Async Depth    3 frames
Hyper Mode     off
Buffer Memory  d3d11, 37 work buffer
Input Info     avqsv: H.264/AVC, 1920x1080, 30/1 fps
VPP            ColorFmtConvertion: nv12 -> p010
AVSync         auto
Output         H.265/HEVC(yuv420 10bit) main10 @ Level 4 (high tier)
               1920x1080p 1:1 30.000fps (30/1fps)
               avwriter: hevc => mp4
Target usage   4 - balanced
Encode Mode    ICQ (Intelligent Const. Quality)
ICQ Quality    23
QP Limit       min: 22, max: 63
Ref frames     3 frames
Bframes        3 frames, B-pyramid: on
Max GOP Length 24 frames
Ext. Features  WeightP WeightB GPB tskip ctu:64 sao:all

encoded 19036 frames, 418.70 fps, 4149.66 kbps, 313.89 MB
encode time 0:00:45, CPU: 0.4%, GPU: 19.1%, VD: 99.5%
frame type IDR   794
frame type I     794,  total size  127.08 MB
frame type P    4759,  total size  135.79 MB
frame type B   13483,  total size   51.03 MB

Result:

frame,I
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,I

Machine 2 with an A770:

Looks ok.
Driver not up to date.

frame=I
frame=B
frame=B
frame=B
frame=P
frame=B
frame=B
frame=B
frame=P
frame=B
frame=B
frame=B
frame=P
frame=B
frame=B
frame=B
frame=P
frame=B
frame=B
frame=B
frame=P
frame=B
frame=B
frame=B
frame=I

Machine 3:

iGPU does not support b-frames in HEVC.
iGPU = Intel Iris(R) Plus Graphics (64EU)

Machine 4:

Device #1: Intel Arc A770 Graphics
Device #2: Intel UHD Graphics 770

Device 2 result:

QSVEncC (x64) 7.65 (r3361) by rigaya, May 24 2024 13:04:40 (VC 1939/Win)
OS             Windows 11 x64 (22631) [UTF-8]
CPU Info       13th Gen Intel Core i5-13600 [4.71GHz] (6P+8E,14C/20T) <AlderlakeS>
GPU Info       Intel UHD Graphics 770 (32EU) 300-1550MHz [65W] (31.0.101.5186)
Media SDK      QuickSyncVideo (hardware encoder) FF, 2nd GPU(i), API v2.10

frame,I
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,I

Device 1 result:

QSVEncC (x64) 7.65 (r3361) by rigaya, May 24 2024 13:04:40 (VC 1939/Win)
OS             Windows 11 x64 (22631) [UTF-8]
CPU Info       13th Gen Intel Core i5-13600 [4.89GHz] (6P+8E,14C/20T) <DG2>
GPU Info       Intel Arc A770 Graphics (512EU) 300-2400MHz (31.0.101.5534)
Media SDK      QuickSyncVideo (hardware encoder) FF, 1st GPU(d), API v2.10

frame,I
frame,B
frame,B
frame,B
frame,P
frame,B
frame,B
frame,B
frame,P
frame,B
frame,B
frame,B
frame,P
frame,B
frame,B
frame,B
frame,P
frame,B
frame,B
frame,B
frame,P
frame,B
frame,B
frame,P
frame,I

UPDATE:

I did run the command on Machine 3 and let it complete out of curiosity:

"D:\QSVEncC\QSVEncC64.exe" -i test.mp4 -o test_IRIS.mp4 -c hevc --output-depth 10 --no-hevc-gpb -b 3 --gop-len 24 --profile main10
--------------------------------------------------------------------------------
test_IRIS.mp4
--------------------------------------------------------------------------------
B frame is not supported on current platform, disabled.
cop.SingleSeiNalUnit value changed off -> auto by driver
QSVEncC (x64) 7.65 (r3361) by rigaya, May 24 2024 13:04:40 (VC 1939/Win)
OS             Windows 11 x64 (22631) [UTF-8]
CPU Info       Intel Core i7-1065G7 @ 1.30GHz [TB: 3.49GHz] (4C/8T) <Icelake>
GPU Info       Intel Iris(R) Plus Graphics (64EU) 300-1100MHz [15W] (31.0.101.2127)
Media SDK      QuickSyncVideo (hardware encoder) FF, 1st GPU(i), API v1.35
Async Depth    3 frames
Buffer Memory  d3d11, 34 work buffer
Input Info     avqsv: H.264/AVC, 1920x1080, 30/1 fps
VPP            ColorFmtConvertion: nv12 -> p010
AVSync         auto
Output         H.265/HEVC(yuv420 10bit) main10 @ Level 4 (high tier)
               1920x1080p 1:1 30.000fps (30/1fps)
               avwriter: hevc => mp4
Target usage   4 - balanced
Encode Mode    ICQ (Intelligent Const. Quality)
ICQ Quality    23
QP Limit       min: 22, max: 63
Ref frames     2 frames
Bframes        none
Max GOP Length 24 frames
Ext. Features  WeightP WeightB GPB tskip ctu:64 sao:all

encoded 19036 frames, 284.20 fps, 3550.50 kbps, 268.57 MB
encode time 0:01:06, CPU: 6.8%, GPU: 36.3%, VD: 82.8%
frame type IDR   794
frame type I     794,  total size   81.29 MB
frame type P   18242,  total size  187.28 MB

But I didn't expect this result:

frame,I
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,B
frame,I

Yes. UHD can have more -- but not when it is encoded for a UHD-Bluray. There the limit is 3.

Where did you find that information? When I investigated, 7 frames were the max B-frames for UHD Bluray (Disc).

Here are some examples:

File 1 = 7 consecutive B-frames

As I recall, I got it from the Blu-Ray Specification (Part 3). But I haven't gone back and confirmed it. Either way (7 or 3) it is a problem that prevents the encode from being used for UHD Blu-Ray.

As I recall, I got it from the Blu-Ray Specification (Part 3). But I haven't gone back and confirmed it. Either way (7 or 3) it is a problem that prevents the encode from being used for UHD Blu-Ray.

I did some "digging" and found this:
https://community.intel.com/t5/Media-Intel-Video-Processing/Are-B-frames-from-h265-hw-encoder-actually-B-frames/m-p/1074962

According to this and other similar topics found.
The behaviour observed in Intel Quick Sync HEVC encoding, where P-frames are labelled as B-frames, is due to Low Delay B-frames (LDB) or Generalized P/B frames (GPB) instead of traditional P-frames.

Low Delay B-frames (LDB)
LDB frames are a special type of B-frame designed to reduce latency. In traditional video encoding, B-frames (bi-directional predictive frames) use both past and future frames for data reference, which can cause delays as future frames need to be encoded before the current frame can be fully processed. On the other hand, LDB frames only reference past frames, functioning more like P frames (predictive frames), which only reference preceding frames. This setup allows for lower latency in video streaming and conferencing applications where real-time performance is critical.

Generalized P/B frames (GPB)
GPB frames are a hybrid approach used in specific video encoders, such as Intel's HEVC encoder. They are encoded with the structure and characteristics of B-frames, but they are used in a predictive manner similar to P-frames. Essentially, a GPB frame can function as a B-frame while only referencing past frames, thus ensuring compatibility with encoders and decoders expecting traditional P-frame behavior.

Impact and Implementation
Using LDB and GPB frames instead of traditional P frames can confuse. Even though these frames are used predictively like P-frames, the encoder may label them as B-frames to improve compression efficiency and reduce latency. However, this approach could confuse video analysis tools and users accustomed to a clear distinction between P and B frames.

How this affects UHD BluRay encoding needs to be tested specifically with iGPUs, given that only iGPUs seem to be affected by this behaviour.

But what is strange is when you run the check-features command, you can see that --no-hevc-gpb should be supported.

No GPB | ○ | ○ | × | ○ | ○ | × | × | ○ | × | ○

image

I also was able to get no-hevc-gpb not working on iGPU, the long indicates no-gpu not accepted by the driver as it still shows GPB (and not “NoGPB”) even if no-hevc-gpb is set.

It’s wierd that this doesn’t work only in iGPU, I’m sorry but I’m thinking it to be difficult to be avoided.

@jdobbs1954 @rigaya

I did run a test encode and converted it to m2ts for UHD on the UHD 770 iGPU.

"E:\rigaya\QSVEncC\QSVEncC64.exe" --avhw -i "test.m2ts" --codec hevc --profile main10 --output-depth 10 --chromaloc auto --colorprim auto --transfer auto --colormatrix auto --master-display copy --max-cll copy --qp-min 0 --qvbr 25000 --aud --pic-struct --vbv-bufsize 45000 --max-bitrate 38000 --gop-len 24 --repeat-headers --no-hevc-gpb -b 7 --audio-copy -o "output.m2ts"
I run it through Tsmuxer to create a structure that can be used for further testing.

It plays without issues on my Oppo and my Panasonic. @jdobbs1954, give it a try.

I found this info:
Although Intel Quick Sync may label P frames as B frames, UHD Blu-ray players should generally handle this without issue, as long as the stream complies with HEVC standards. Most players focus on the overall structure and compatibility rather than the specific frame types.

And this:
While the specific frame labelling by Intel Quick Sync might not perfectly align with traditional expectations, it is unlikely to cause playback issues if the rest of the encoding and muxing process adheres to UHD Blu-ray standards.

FYI: https://github.com/intel/libvpl/issues/143

If you want to add further information that I forgot to add there.

@jdobbs1954 @rigaya

I did run a test encode and converted it to m2ts for UHD on the UHD 770 iGPU.

"E:\rigaya\QSVEncC\QSVEncC64.exe" --avhw -i "test.m2ts" --codec hevc --profile main10 --output-depth 10 --chromaloc auto --colorprim auto --transfer auto --colormatrix auto --master-display copy --max-cll copy --qp-min 0 --qvbr 25000 --aud --pic-struct --vbv-bufsize 45000 --max-bitrate 38000 --gop-len 24 --repeat-headers --no-hevc-gpb -b 7 --audio-copy -o "output.m2ts" I run it through Tsmuxer to create a structure that can be used for further testing.

It plays without issues on my Oppo and my Panasonic. @jdobbs1954, give it a try.

I found this info: Although Intel Quick Sync may label P frames as B frames, UHD Blu-ray players should generally handle this without issue, as long as the stream complies with HEVC standards. Most players focus on the overall structure and compatibility rather than the specific frame types.

And this: While the specific frame labelling by Intel Quick Sync might not perfectly align with traditional expectations, it is unlikely to cause playback issues if the rest of the encoding and muxing process adheres to UHD Blu-ray standards.

I'll give it a try. Thanks!

Well, I ran a test using the same command line that you used, and TSMuxer UHD to mux/create the disc -- and everything works correctly. I burned it to a BD-RW, ran it through my Sony Player, and FF, RW, Chapter skips, everything plays as it should.

So I guess this problem... isn't a problem.

Many thanks to both of you (Rigaya and guamt) for your insight, research and testing.

Thank you for letting me know TSMuxer runs fine and can be played correctly.

I'll close the issue as there seems to be no problem.