I’m trying to use the NVENC API (specifically the AppEncode application) available as part of Video Codec SDK 11.1.5 to encode a yuv video (saved from IMX490 sensor) using H.264 encoding.
After building the required libraries using CMake, I give the following command:
./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
A bit of additional information:
input-yuv420p.yuv has pixel format yuyv422(progressive), 2880x1860
All the flags set were based on recommended settings (https://docs.nvidia.com/video-technologies/video-codec-sdk/nvenc-video-encoder-api-prog-guide/#recommended-nvenc-settings)
Hardware used: CUDA 11.4, NVIDIA GeForce RTX 3050 Ti
I also tried the equivalent using ffmpeg (h264_nvenc and h264_cuvid) and it works perfectly. However, when I try to encode just using the NVENC APIs I get corrupted outputs. I have tried converting the pixel format to yuv420p and encode, still doesn’t work. When I try to display by encoded files using VLC media player I get green pixels/lines and random colours.
I’m quite new to using NVENC API so I started right away with the Video SDK but I’m facing these issues. I’m not sure what’s causing it, so any advice would be really helpful!