使用 NVENCODE 时出现损坏的输出 API

Getting corrupted output when using NVENCODE API

我正在尝试使用作为视频编解码器 SDK 11.1.5 的一部分提供的 NVENC API(特别是 AppEncode 应用程序)使用 H.264 编码对 yuv 视频(从 IMX490 传感器保存)进行编码.

使用 CMake 构建所需的库后,我给出以下命令:

./AppEncCuda -i ~/Desktop/input-yuv420p.yuv -s 320x320 -tuninginfo lowlatency -rc cbr -gpu 0 -bitrate 2M -maxbitrate 4M -vbvbufsize 6M -vbvinit 25 -bf 0 -aq 0 -cq 20 -multipass qres -o ~/Desktop/output-yuv.h264

一些附加信息: input-yuv420p.yuv 的像素格式为 yuyv422(渐进式),2880x1860 所有标志设置均基于推荐设置(NVENC 视频编码器 API 编程指南 :: NVIDIA 视频编解码器 SDK 文档)

使用的硬件:CUDA 11.4、NVIDIA GeForce RTX 3050 Ti

我还尝试了使用 ffmpeg(h264_nvenc 和 h264_cuvid)的等效方法,并且效果很好。但是,当我尝试仅使用 NVENC APIs 进行编码时,我得到了损坏的输出。我已经尝试将像素格式转换为 yuv420p 并进行编码,但仍然无效。当我尝试使用 VLC 媒体播放器按编码文件显示时,我得到绿色 pixels/lines 和随机颜色。

我对使用 NVENC 还很陌生 API 所以我立即开始使用视频 SDK,但我遇到了这些问题。我不确定是什么原因造成的,所以任何建议都会很有帮助!

-s 320x320改成-s 2880x1860就这么简单。 -s 标志表示输入分辨率大小而不是比例(这是我最初假设的)。

理想情况下,像这样的命令应该可以顺利运行:

./AppEncCuda -i ~/Desktop/input-yuv420p.yuv -s 2880x1860 -tuninginfo lowlatency -rc cbr -gpu 0 -bitrate 2M -maxbitrate 4M -vbvbufsize 6M -vbvinit 25 -bf 0 -aq 0 -cq 20 -multipass qres -o ~/Desktop/output-yuv.h264