使用FFmpeg的NVENC编码器进行HEVC 10位编码后的灰色方形伪影
最近,我购买了全新的GPU - AORUS GeForce GTX 1080 Ti。我发现它支持HEVC 10位编码,所以我想尝试一下。不幸的是,在编码之后,我注意到了一些出现在黑暗场景和最后一帧视频中的文物。你可以看到他们对这些截图:使用FFmpeg的NVENC编码器进行HEVC 10位编码后的灰色方形伪影
我想知道,如果有人可以帮我找出什么可能是这些文物的原因,以及如何我可以摆脱他们。
这里是源视频的MI:
ID : 1
Format : AVC
Format/Info : Advanced Video Codec
Format profile : [email protected]
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 [email protected]@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
问题已解决。事实证明,基于GP102内核的GPU上的NVENC在H.265编码上存在问题。如果超频超过某个点,这些工件在编码后出现。降低GPU的核心时钟应该解决问题。
哦,这真的很有趣。你使用一些不寻常的选项。请试试看:
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
这个设置是我可以测试的最好的场景翻录。
好的,我会试试看。但是,-rc constqp -global_quality 21有什么特别之处? – Cryman
-global_quality是为libav *库设计的,qmin-qmax更具体,量化是我在hevc_nvnec中找到的唯一稳定的速率控制方法。 -rc vbr_2pass比constqp好。它可以节省更多的空间,因为vbr和使用lookahead。我不确定rc-lookahead是否在没有2pass的情况下工作。 – hedgar2017
我试着用这个命令编码。首先,工件仍然存在。在与以前一样的深色场景中。其次,我在FFmpeg的输出中得到了一个警告: '[hevc_nvenc @ 0000000002f28c00]不建议使用指定的rc模式。 [hevc_nvenc @ 0000000002f28c00] vbr_2pass - > vbr_hq' 第三,文件大小与使用-rc constqp -global_quality 21.几乎相同。 – Cryman
请发布解决方案作为答案,而不是更新您的问题。我回滚了一下,你可以在[修订](https://stackoverflow.com/posts/45103251/revisions)中看到。谢谢。 – Bugs