我正在使用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输出的日志文件是here。
我还尝试了不同的预设和不同的顺序。我编码的所有10位序列的结果都相似。对于1920x1080 10位序列,使用HEVC编码器可获得大约50-60 fps。但是对于8位序列,在类似的预设和速率控制模式下,我获得了大约450-500 fps的更高吞吐量。在示例中,我将CBR用作速率控制模式,但我还测试了VBR和恒定QP模式并获得了相似的结果(就编码吞吐量而言)。
10位HEVC编码的命令中是否缺少任何内容?我了解使用10位,因为增加了位深度,所以编码将花费更长的时间。但是,如此大规模的吞吐量下降使我认为自己做错了事。似乎FFmpeg正在将编码器从yuv420p10le(我的输入格式)转换为p010le(NVENC接受的10位格式)之前插入auto_scaler。这个缩放模块能否大幅降低编码器速度?
答案 0 :(得分:0)
尝试将 -pix_fmt yuv420p10le
替换为
-pix_fmt yuv422p10le