使用NVENC的FFmpeg-GPU 10位HEVC编码

使用NVENC的FFmpeg-GPU 10位HEVC编码,ffmpeg,nvenc,Ffmpeg,Nvenc,我正在使用NVENC HEVC编码器对一些4K 10位YUV测试序列进行编码。对于示例序列和配置,我使用以下命令 ffmpeg -hide_banner -benchmark -loglevel debug -y -f rawvideo -s:v 3840x2160 -r 50 -pix_fmt yuv420p10le -i ParkRunning3_3840x2160_50fps_10bit_420.yuv -c:v hevc_nvenc -preset hp -rc cbr -profile

我正在使用NVENC HEVC编码器对一些4K 10位YUV测试序列进行编码。对于示例序列和配置,我使用以下命令

ffmpeg -hide_banner -benchmark -loglevel debug -y -f rawvideo -s:v 3840x2160 -r 50 -pix_fmt yuv420p10le -i ParkRunning3_3840x2160_50fps_10bit_420.yuv -c:v hevc_nvenc -preset hp -rc cbr -profile:v main10 -b:v 10M output.mp4
我的目标是实现尽可能低的延迟;因此,我将预设设置为低延迟高性能。然而,使用这个命令,我只能获得大约15 fps的编码速度。来自上述命令的ffmpeg输出的日志文件为

我还尝试了不同的预设和不同的序列。对于我编码的所有10位序列,结果都是相似的。对于1920x1080 10位序列,我使用HEVC编码器获得大约50-60 fps。但是对于8位序列,我在类似的预设和速率控制模式下获得了大约450-500 fps的更高吞吐量。在本例中,我使用CBR作为速率控制模式,但我也测试并获得了与VBR和常量QP模式类似的结果(在编码吞吐量方面)


10位HEVC编码的命令中是否缺少任何内容?我知道,对于10位,由于位深度增加,编码将花费更长的时间。但这种规模的吞吐量下降让我觉得我做错了什么。FFmpeg似乎在编码器之前插入了一个自动定标器,该编码器将yuv420p10le(我的输入格式)转换为p010le(NVENC接受的10位格式)。此缩放模块是否会大幅降低编码器速度?

尝试将
-pix\u fmt yuv420p10le
替换为
-pix_fmt yuv422p10le