rigaya / NVEnc

NVENCによる高速エンコードの性能実験
https://rigaya34589.blog.fc2.com/blog-category-17.html
Other
1.07k stars 115 forks source link

H.264 4:4:4 check features,.. #450

Closed Selur closed 1 year ago

Selur commented 1 year ago

using '--check-features' I get:

NVEncC (x64) 7.08 (r2398) by rigaya, Dec 29 2022 09:40:33 (VC 1929/Win)
  [NVENC API v12.0, CUDA 10.1]
 reader: raw, y4m, avi, avs, vpy, avsw, avhw [H.264/AVC, H.265/HEVC, MPEG2, VP8, VP9, VC-1, MPEG1, MPEG4, AV1]

Environment Info
OS : Windows 11 x64 (22621) [UTF-8]
CPU: AMD Ryzen 9 7950X 16-Core Processor [5.52GHz] (16C/32T)
RAM: Used 8193 MB, Total 64632 MB

#0: NVIDIA GeForce RTX 4080 (9728 cores, 2505 MHz)[PCIe4x16][528.02]
NVEnc features
Codec: H.264/AVC
Encoder Engines           2
Max Bframes               4
B Ref Mode                3 (each + only middle)
RC Modes                  63 (CQP, CBR, CBRHQ, VBR, VBRHQ)
Field Encoding            0 (no)
MonoChrome                no
FMO                       no
Quater-Pel MV             yes
B Direct Mode             yes
CABAC                     yes
Adaptive Transform        yes
Max Temporal Layers       4
Hierarchial P Frames      yes
Hierarchial B Frames      yes
Max Level                 62 (6.2)
Min Level                 10 (1)
4:4:4                     yes
Min Width                 145
Max Width                 4096
Min Height                49
Max Height                4096
Multiple Refs             yes
Max LTR Frames            8
Dynamic Resolution Change yes
Dynamic Bitrate Change    yes
Forced constant QP        yes
Dynamic RC Mode Change    no
Subframe Readback         yes
Constrained Encoding      yes
Intra Refresh             yes
Custom VBV Bufsize        yes
Dynamic Slice Mode        yes
Ref Pic Invalidiation     yes
PreProcess                no
Async Encoding            yes
Max MBs                   65536
Lossless                  yes
SAO                       no
Me Only Mode              1 (I,P frames)
Lookahead                 yes
AQ (temporal)             yes
Weighted Prediction       yes
10bit depth               no

but when encoding using: [code]ffmpeg -y -loglevel fatal -noautorotate -nostdin -threads 8 -i "G:\tos_dcp_test_04\tos_video.mxf" -map 0:0 -an -sn -vf scale=in_range=pc:out_range=pc -sws_flags accurate_rnd+full_chroma_inp -pix_fmt yuv444p -vsync 0 -f yuv4mpegpipe - | NVEncC --y4m -i - --fps 24.000 --codec h264 --profile high444 --level 5.2 --sar 1:1 --lookahead 16 --multipass "2pass-full" --vbr 80529 --max-bitrate 240000 --gop-len 0 --ref 3 --bframes 3 --direct auto --bref-mode disabled --no-b-adapt --mv-precision "Q-pel" --cabac --deblock --preset quality --colorrange full --colormatrix bt2020c --psnr --log-level debug --output "J:\tmp\tos_video_2023-01-15@08_25_25_5010_01.264"[/code] I get:

NVEncC    7.08 (x64)
OS        Windows 11 x64 (22621) [UTF-8]
CPU Info  AMD Ryzen 9 7950X 16-Core Processor [5.52GHz] (16C/32T)
Locale    C
InitCuda: device #-1.

Checking Environment Info...
NVEncC (x64) 7.08 (r2398) by rigaya, Dec 29 2022 09:40:33 (VC 1929/Win)
OS Version     Windows 11 x64 (22621)
CPU            AMD Ryzen 9 7950X 16-Core Processor [5.52GHz] (16C/32T)
cuInit: Success.
cuvidInit: Success.
InitCuda: Success.
cuDeviceGetCount: Success, 1.
gpuinfo: checking for device #0.
gpuinfo:   cuDeviceGet(0): success
gpuinfo:   cuDeviceGetName(0): NVIDIA GeForce RTX 4080
gpuinfo:   cudaDeviceGetAttribute: CUDA 8.9
gpuinfo:   PCIBusId: 0000:01:00.0
gpuinfo:   Got GPU Info from NVML.
gpuinfo:   NV Driver version: 528020.
gpuinfo:   CUDA Driver version: 12000.
gpuinfo: using cuda schedule mode: auto.
gpuinfo: cuCtxCreate: Success.
gpuinfo: cuCtxPopCurrent: Success.
gpuinfo: cuvidCtxLockCreate: Success.
nvenc : Loaded nvEncodeAPI64.dll.
nvenc : nvEncodeAPICreateInstance(APIVer=0x7002000c): Success.
nvenc : Opened Encode Session (API ver 12.0)
nvenc : NvEncOpenEncodeSessionEx(device_type=NV_ENC_DEVICE_TYPE_CUDA): Success.
nvenc : m_pEncodeAPI->nvEncGetEncodeGUIDCount: 3.
nvenc : Found codec H.264/AVC.
nvenc : Found codec H.265/HEVC.
nvenc : Found codec AV1.
nvenc : m_pEncodeAPI->nvEncGetEncodeProfileGUIDCount: 6.
nvenc : Found H.264/AVC baseline profile.
nvenc : Found H.264/AVC main profile.
nvenc : Found H.264/AVC high profile.
nvenc : Found H.264/AVC Unknown profile.
nvenc : Found H.264/AVC high444 profile.
nvenc : Found H.264/AVC auto profile.
nvenc : m_pEncodeAPI->nvEncGetEncodePresetCount: 17.
nvenc : m_pEncodeAPI->nvEncGetEncodePresetGUIDs: Success.
nvenc : m_pEncodeAPI->nvEncGetInputFormatCount: 9.
nvenc : Found input fmt:
nvenc : nv12
nvenc : yv12
nvenc : Invalid
nvenc : yuv444
nvenc : rgb32
nvenc : Invalid
nvenc : Invalid
nvenc : Invalid
nvenc : Invalid
nvenc : m_pEncodeAPI->nvEncGetEncodeProfileGUIDCount: 4.
nvenc : Found H.265/HEVC Unknown profile.
nvenc : Found H.265/HEVC main profile.
nvenc : Found H.265/HEVC main10 profile.
nvenc : Found H.265/HEVC main444 profile.
nvenc : m_pEncodeAPI->nvEncGetEncodePresetCount: 17.
nvenc : m_pEncodeAPI->nvEncGetEncodePresetGUIDs: Success.
nvenc : m_pEncodeAPI->nvEncGetInputFormatCount: 11.
nvenc : Found input fmt:
nvenc : nv12
nvenc : yv12
nvenc : Invalid
nvenc : yuv444
nvenc : yv12(10bit)
nvenc : yuv444(10bit)
nvenc : rgb32
nvenc : Invalid
nvenc : Invalid
nvenc : Invalid
nvenc : Invalid
nvenc : m_pEncodeAPI->nvEncGetEncodeProfileGUIDCount: 3.
nvenc : Found AV1 Unknown profile.
nvenc : Found AV1 main profile.
nvenc : Found AV1 high profile.
nvenc : m_pEncodeAPI->nvEncGetEncodePresetCount: 7.
nvenc : m_pEncodeAPI->nvEncGetEncodePresetGUIDs: Success.
nvenc : m_pEncodeAPI->nvEncGetInputFormatCount: 9.
nvenc : Found input fmt:
nvenc : nv12
nvenc : yv12
nvenc : Invalid
nvenc : yv12(10bit)
nvenc : rgb32
nvenc : Invalid
nvenc : Invalid
nvenc : Invalid
nvenc : Invalid
gpuinfo:   createDeviceFeatureList
nvenc : nvEncDestroyEncoder...
nvenc : nvEncDestroyEncoder: success.
InitDeviceList: Success.
gpuinfo: Closing device #0: NVIDIA GeForce RTX 4080...
gpuinfo: Closed cuvid Ctx Lock...
gpuinfo: Closed cuvid Ctx Lock.
gpuinfo: Closed CUDA Context...
gpuinfo: Closed CUDA Context.
gpuinfo: Closed device #0: NVIDIA GeForce RTX 4080.
GPU #-1790619776 (yuv444) does not support Unknown erro occurred during checking GPU.
Closed EncodeStatus.
Closing perf monitor...
Closing logger...

GPU #-1790619776 (yuv444) does not support Unknown erro occurred during checking GPU Am I missing something in the settings? Is '--check-features' wrong and '4:4:4' is wrong?

rigaya commented 1 year ago

I'm sorry the error message is misleading and not correct.

I think the problem we have here is actually caused by --psnr.

It requires hw decode support, but H.264 4:4:4 hw decode is not supported (even though encode is supported). It will work fine without --psnr.

I'll improve the error message in next release, will show error message as below.

GPU #0 (NVIDIA GeForce RTX 4080) does not support H.264/AVC yuv444 decoding required for ssim/psnr/vmaf calculation.
Selur commented 1 year ago

Without psnr it works. Thanks, for clearing that up. :)

rigaya commented 1 year ago

Thank you for sharing the error with me.

NVEnc 7.09 improves error message for this case.

rigaya commented 1 year ago

I'll close this issue now as the error message has been improved, and now it's easier to find out the reason of the error.