使用 FFmpeg 的 NVENC 编码器进行 HEVC 10 位编码后的灰度方块伪影

Grey squared artifacts after HEVC 10-bit encoding using FFmpeg's NVENC encoder

最近我购买了全新的 GPU - AORUS GeForce GTX 1080 Ti。我发现它支持 HEVC 10 位编码,所以我想试一试。不幸的是,编码后我注意到一些伪像,这些伪像出现在黑暗场景和视频的最后一帧中。您可以在这些屏幕截图中看到它们:

我想知道是否有人可以帮助我找出这些伪像的可能原因以及如何消除它们。

这里是源视频的MI:

ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : High@L4.1
Format settings, CABAC                   : Yes
Format settings, ReFrames                : 4 frames
Codec ID                                 : V_MPEG4/ISO/AVC
Duration                                 : 2 h 2 min
Bit rate mode                            : Variable
Bit rate                                 : 29.5 Mb/s
Maximum bit rate                         : 37.0 Mb/s
Width                                    : 1 920 pixels
Height                                   : 1 080 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
Bit depth                                : 8 bits
Scan type                                : Progressive
Bits/(Pixel*Frame)                       : 0.593
Stream size                              : 25.2 GiB (66%)
Language                                 : English
Default                                  : Yes
Forced                                   : No

这里是编码视频的 MI:

ID                                       : 1
Format                                   : HEVC
Format/Info                              : High Efficiency Video Coding
Format profile                           : Main 10@L4@Main
Codec ID                                 : V_MPEGH/ISO/HEVC
Duration                                 : 2 h 2 min
Bit rate                                 : 3 689 kb/s
Width                                    : 1 920 pixels
Height                                   : 800 pixels
Display aspect ratio                     : 2.40:1
Frame rate mode                          : Constant
Frame rate                               : 23.976 (24000/1001) FPS
Standard                                 : Component
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 10 bits
Bits/(Pixel*Frame)                       : 0.100
Stream size                              : 3.15 GiB (95%)
Default                                  : Yes
Forced                                   : No
Color range                              : Limited

我用于编码的命令:

ffmpeg -hide_banner -i "<input_file>" -map 0:v:0 -map_chapters -1 -map_metadata -1 -vf "crop=1920:800:0:140" -vcodec hevc_nvenc -pix_fmt p010le -preset hq -profile:v main10 -rc constqp -global_quality 21 -rc-lookahead 32 -g 240 -f matroska Video_CQP21_LAF32_GOP240.mkv

呵呵,真有意思。您使用了一些不寻常的选项。请试试看:

ffmpeg -hide_banner -i "<input_file>" -map 0:v:0 -map_chapters -1 -map_metadata -1 -vf "crop=1920:800:0:140" -vcodec hevc_nvenc -pix_fmt p010le -preset slow -profile:v main10 -qmin 22 -qmax 22 -rc-lookahead 32 -g 240 -f matroska Video_CQP21_LAF32_GOP240.mkv

这个设置是我能测试的最好的场景翻录设置。

问题已解决。事实证明,基于 GP102 内核的 NVENC 在 GPU 上完成的 H.265 编码存在问题。如果你超频超过某个点,这些伪像会在编码后出现。降低 GPU 的核心时钟应该可以解决问题。