You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GTX 1660Ti用NVENC编码YUV444时2560*1440分辨率报NV_ENC_ERR_INVALID_PARAM

解决GTX 1660Ti HEVC YUV444编码2560×1440分辨率报NV_ENC_ERR_INVALID_PARAM的问题

针对你遇到的GTX 1660Ti使用video-sdk-samples进行HEVC YUV444编码时,1920×1080和3840×2160正常,但2560×1440报错NV_ENC_ERR_INVALID_PARAM的问题,结合NVENC特性和你的代码,给出以下核心排查方向:

  • 编码器初始化与编码分辨率不匹配
    NVENC要求编码器初始化阶段(调用nvEncInitializeEncoder)设置的encodeWidth和encodeHeight,必须与编码时NV_ENC_PIC_PARAMS中的inputWidth/inputHeight完全一致。如果代码在切换分辨率时没有重新初始化编码器(比如用1080P初始化后直接切2K),就会触发参数错误。检查初始化逻辑,确保每次分辨率变更都重新创建并初始化编码器实例。

  • 输入分辨率的对齐验证
    虽然2560×1440看似符合NVENC基本对齐要求(宽度为32的倍数、高度为16的倍数),但需确认GetEncodeWidth()和GetEncodeHeight()返回的数值是否准确。可以在报错前增加日志打印这两个值,排查是否存在数值被意外修改、截断的情况。另外,部分显卡对YUV444格式的HEVC编码可能有更严格的对齐要求(比如高度也需要是32的倍数),可以尝试将1440调整为1472(32×46)做测试,验证是否能正常编码。

  • 输入缓冲区的Stride(行步长)错误
    YUV444格式下,每个颜色分量(Y/U/V)的行步长必须满足NVENC的对齐要求(通常为32字节的倍数)。如果输入缓冲区是自行分配的而非通过nvEncCreateInputBuffer创建,很可能存在stride不符合要求的情况。建议改用NVENC提供的缓冲区创建接口,确保返回的pitch值符合标准;若必须自行分配,计算stride时要向上取整到32的倍数。

  • SDK或驱动版本兼容性问题
    旧版本的NVIDIA Video SDK或显卡驱动可能对2560×1440分辨率的YUV444 HEVC编码存在兼容性bug。尝试更新到最新的NVIDIA Video SDK(至少12.x以上版本)和显卡稳定版驱动,再重新测试。


你的相关代码片段:

void NvEncoder::DoEncode(NV_ENC_INPUT_PTR inputBuffer, std::vector<bool> &vKeyFrame, std::vector<std::vector<uint8_t>> &vPacket, NV_ENC_PIC_PARAMS *pPicParams)
{
    NV_ENC_PIC_PARAMS picParams = {};
    if (pPicParams)
    {
        picParams = *pPicParams;
    }
    picParams.version = NV_ENC_PIC_PARAMS_VER;
    picParams.pictureStruct = NV_ENC_PIC_STRUCT_FRAME;
    picParams.inputBuffer = inputBuffer;
    picParams.bufferFmt = GetPixelFormat();
    picParams.inputWidth = GetEncodeWidth();
    picParams.inputHeight = GetEncodeHeight();
    picParams.outputBitstream = m_vBitstreamOutputBuffer[m_iToSend % m_nEncoderBuffer];
    picParams.completionEvent = m_vpCompletionEvent[m_iToSend % m_nEncoderBuffer];
    NVENCSTATUS nvStatus = m_nvenc.nvEncEncodePicture(m_hEncoder, &picParams);
    if (nvStatus == NV_ENC_SUCCESS || nvStatus == NV_ENC_ERR_NEED_MORE_INPUT)
    {
        m_iToSend++;
        GetEncodedPacket(m_vBitstreamOutputBuffer, vKeyFrame, vPacket, false);
    }
    else
    {
        printf("picParams.inputWidth = %d,picParams.inputHeight = %d\n", picParams.inputWidth, picParams.inputHeight);
        NVENC_THROW_ERROR("nvEncEncodePicture API failed", nvStatus);
    }
}

错误信息:

nvEncEncodePicture Prompt Error:NV_ENC_ERR_INVALID_PARAM

内容的提问来源于stack exchange,提问作者Travis990

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 18:10:28