This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DM8127图像噪点多时,H264码率过高。



 DM8127,接入包含大量噪点的图像时,使用H264编码,码率会非常高,并且不会降回来。

现象:

DM8127 输出1080P 4Mbit/s码率的图像,使用VLC和自有工具观察H264码率。开始时码率正常。通过加大增益,减小光圈,制造大量的噪点,这时码率会增加到20Mbit/s以上,并且无法降回。无论设置CBR还是VBR都会有这个现象,只是CBR会相对好些,码率增加到17Mbit/s,但是也无法下降。减少噪点后,码率恢复正常。



请问H264编码器是否有其他设置可以避免这个问题。 
  • Zou ZY,

    噪声对于编码来说就是细节,所以编码的码率加大是可以预期的。

    你能否这种噪声比较大的情况下开启HDVPSS的NSF,减少噪声?

  • 你好:

      NSF已被开启,但是噪点较多。可以通过调整QP值处理这个问题么?

  • Zou,

    如果你处理的图像是1080p30的,你还可以尝试VTNF,并且把强度开强一点。

    对于Qp,你可以先看看你现在的码流里面大部分的QP是否已经是51(最大)了,如果是,那还是需要通过减少噪声来减小码流。如果还有比较小的QP,你可以设定QP的最小值的值更大一点。

  • Chris Meng,

       调节QP确实有改善,可以降低部分码率。但是发现另外一个现象:

        噪点多的时候,码率升高。这时降低噪点,码率会变得很低,仅有600 kbit/s,导致H264质量很差。CBR和VBR现象都一致。码率控制部分的参数如下,还需要其他什么参数么?

    [m3video] --------- CH 0 : H264 ENC : Dynamic Params -------
    [m3video] 
    [m3video] videnc2DynamicParams -> inputHeight : 1080
    [m3video] videnc2DynamicParams -> inputWidth : 1920
    [m3video] videnc2DynamicParams -> refFrameRate : 60000
    [m3video] videnc2DynamicParams -> targetFrameRate : 60000
    [m3video] videnc2DynamicParams -> targetBitRate : 2097152
    [m3video] videnc2DynamicParams -> intraFrameInterval : 10
    [m3video] videnc2DynamicParams -> generateHeader : 0
    [m3video] videnc2DynamicParams -> captureWidth : 1920
    [m3video] videnc2DynamicParams -> forceFrame : -1
    [m3video] videnc2DynamicParams -> interFrameInterval : 1
    [m3video] videnc2DynamicParams -> mvAccuracy : 2
    [m3video] videnc2DynamicParams -> sampleAspectRatioHeight : 1080
    [m3video] videnc2DynamicParams -> sampleAspectRatioWidth : 1920
    [m3video] videnc2DynamicParams -> ignoreOutbufSizeFlag : 1
    [m3video] videnc2DynamicParams -> lateAcquireArg : 0
    [m3video] 
    [m3video] rateControlParams -> rateControlParamsPreset : 1
    [m3video] rateControlParams -> scalingMatrixPreset : 0
    [m3video] rateControlParams -> rcAlgo : 0
    [m3video] rateControlParams -> qpI : -1
    [m3video] rateControlParams -> qpMaxI : 51
    [m3video] rateControlParams -> qpMinI : 10
    [m3video] rateControlParams -> qpP : -1
    [m3video] rateControlParams -> qpMaxP : 51
    [m3video] rateControlParams -> qpMinP : 10
    [m3video] rateControlParams -> qpOffsetB : 4
    [m3video] rateControlParams -> qpMaxB : 44
    [m3video] rateControlParams -> qpMinB : 10
    [m3video] rateControlParams -> allowFrameSkip : 0
    [m3video] rateControlParams -> removeExpensiveCoeff : 0
    [m3video] rateControlParams -> chromaQPIndexOffset : 0
    [m3video] rateControlParams -> IPQualityFactor : 0
    [m3video] rateControlParams -> initialBufferLevel : 4194304
    [m3video] rateControlParams -> HRDBufferSize : 4194304
    [m3video] rateControlParams -> minPicSizeRatioI : 0
    [m3video] rateControlParams -> maxPicSizeRatioI : 320
    [m3video] rateControlParams -> minPicSizeRatioP : 0
    [m3video] rateControlParams -> maxPicSizeRatioP : 0
    [m3video] rateControlParams -> minPicSizeRatioB : 0
    [m3video] rateControlParams -> maxPicSizeRatioB : 0
    [m3video] rateControlParams -> enablePRC : 1
    [m3video] rateControlParams -> enablePartialFrameSkip : 0
    [m3video] rateControlParams -> discardSavedBits : 1
    [m3video] rateControlParams -> VBRDuration : 8
    [m3video] rateControlParams -> VBRsensitivity : 0
    [m3video] rateControlParams -> skipDistributionWindowLength: 5
    [m3video] rateControlParams -> numSkipInDistributionWindow : 1
    [m3video] rateControlParams -> enableHRDComplianceMode : 1
    [m3video] rateControlParams -> frameSkipThMulQ5 : 0
    [m3video] rateControlParams -> vbvUseLevelThQ5 : 0

  • zy zou 说:
    噪点多的时候,码率升高。这时降低噪点,码率会变得很低,

    但过一段时间后,码率又会恢复是么?

    如果你希望码流控制算法迅速反应,你可以设置 HRDBufferSize=initialBufferLevel=targetBitRate/2,看是否能满足你对码率控制的要求。

  • Chris Meng:

    码率降低后,20分钟以后发现码率恢复,20分钟之内码率并无上升,都在600kbit/s附近。

    调整HRDBufferSize=initialBufferLevel=targetBitRate/2,并无明显效果。

    [m3video] --------- CH 0 : H264 ENC : Dynamic Params -------
    [m3video]
    [m3video] videnc2DynamicParams -> inputHeight : 1080
    [m3video] videnc2DynamicParams -> inputWidth : 1920
    [m3video] videnc2DynamicParams -> refFrameRate : 60000
    [m3video] videnc2DynamicParams -> targetFrameRate : 60000
    [m3video] videnc2DynamicParams -> targetBitRate : 2097152
    [m3video] videnc2DynamicParams -> intraFrameInterval : 10
    [m3video] videnc2DynamicParams -> generateHeader : 0
    [m3video] videnc2DynamicParams -> captureWidth : 1920
    [m3video] videnc2DynamicParams -> forceFrame : -1
    [m3video] videnc2DynamicParams -> interFrameInterval : 1
    [m3video] videnc2DynamicParams -> mvAccuracy : 2
    [m3video] videnc2DynamicParams -> sampleAspectRatioHeight : 1080
    [m3video] videnc2DynamicParams -> sampleAspectRatioWidth : 1920
    [m3video] videnc2DynamicParams -> ignoreOutbufSizeFlag : 1
    [m3video] videnc2DynamicParams -> lateAcquireArg : 0
    [m3video]
    [m3video] rateControlParams -> rateControlParamsPreset : 1
    [m3video] rateControlParams -> scalingMatrixPreset : 0
    [m3video] rateControlParams -> rcAlgo : 1
    [m3video] rateControlParams -> qpI : -1
    [m3video] rateControlParams -> qpMaxI : 51
    [m3video] rateControlParams -> qpMinI : 10
    [m3video] rateControlParams -> qpP : -1
    [m3video] rateControlParams -> qpMaxP : 51
    [m3video] rateControlParams -> qpMinP : 10
    [m3video] rateControlParams -> qpOffsetB : 4
    [m3video] rateControlParams -> qpMaxB : 44
    [m3video] rateControlParams -> qpMinB : 10
    [m3video] rateControlParams -> allowFrameSkip : 0
    [m3video] rateControlParams -> removeExpensiveCoeff : 0
    [m3video] rateControlParams -> chromaQPIndexOffset : 0
    [m3video] rateControlParams -> IPQualityFactor : 0
    [m3video] rateControlParams -> initialBufferLevel : 1048576
    [m3video] rateControlParams -> HRDBufferSize : 1048576
    [m3video] rateControlParams -> minPicSizeRatioI : 0
    [m3video] rateControlParams -> maxPicSizeRatioI : 320
    [m3video] rateControlParams -> minPicSizeRatioP : 0
    [m3video] rateControlParams -> maxPicSizeRatioP : 0


  • Zou ZY,

    你能确认这个参数是配置进算法库了么?请问你打印的参数是配置动态后用contro命令回读的么?

  •  是的,通过下面方法读回来的:

    retVal = enclink_h264_control(algObj->u.h264AlgIfObj.algHandle,
    XDM_GETSTATUS,
    &dynamicParams,
    &status);

  • Zou ZY,

    请问你使用的是哪个版本的h264enc?

  • Chris Meng:

    H264 Encoder

    Version 02.00.06

  • Zou ZY,

    maxPicSizeRatioI设置为960或者640,问题有改变么?

  • Chris Meng,

    实测 maxPicSizeRatioI需要符合条件

    maxPicSizeRatioI = intraFrameInterval * 32;

    否则编码器报错:

    [m3video] 162081:!ERROR!:ENCLINK::links_m3video/iva_enc/encLink_h264.c:[260]::INTERNAL ERROR:-1
    [m3video] ALGCONTROL FAILED:CMD:0
    [m3video] ERROR: IH264ENC_LEVEL_INCOMPLAINT_PARAMETER , 0,
    [m3video] ERROR: IH264ENC_PROFILE_INCOMPLAINT_FMO_SETTING = 2,
    [m3video] ERROR: IH264ENC_PROFILE_INCOMPLAINT_INTERFRAMEINTERVAL = 4,
    [m3video] ERROR: XDM_UNSUPPORTEDPARAM = 14,
    [m3video] ERROR: XDM_FATALERROR = 15
    [m3video] 162083: WARN:
    [m3video] ENCLINK: ERROR in Run time parameters changes,Extended Error code:49173
    [m3video] 162083: WARN: ENCLINK:ERROR in Enclink_h264EncodeFrameBatch.Status[-1] for IVAHD_0
    [m3video] 162084: WARN: ENC : IVAHDID : 0 ENCLINK:ERROR in EncLink_SubmitBatch.Status[-1]
    [m3video] Enclink: Height change to 1080
    [m3video] Enclink: Width change to 1920
    [m3video] EncSetMask: ENC_LINK_SETCONFIG_BITMASK_FORCEI = 3,
    [m3video] 162122:!ERROR!:ENCLINK::links_m3video/iva_enc/encLink_h264.c:[260]::INTERNAL ERROR:-1
    [m3video] ALGCONTROL FAILED:CMD:1
    [m3video] ERROR: IH264ENC_LEVEL_INCOMPLAINT_PARAMETER , 0,
    [m3video] ERROR: IH264ENC_PROFILE_INCOMPLAINT_FMO_SETTING = 2,
    [m3video] ERROR: IH264ENC_PROFILE_INCOMPLAINT_INTERFRAMEINTERVAL = 4,
    [m3video] ERROR: XDM_UNSUPPORTEDPARAM = 14,
    [m3video] ERROR: XDM_FATALERROR = 15
    [m3video] 162124: WARN: ENCLINK: ERROR in Run time parameters changes, Extended Error code: 0x0000c015, bitMask = 0x00000008

    修改I帧间隔为20和30,maxPicSizeRatioI分别为640和960.但是情况并没有改善,依旧出现码率低无法恢复的问题。

    另外,请问有办法打印编码当前帧的QP值么?是否有可能H264编码器的码率控制算法,把当前帧的QP值设置得很低,导致的问题?

  • Zou ZY,

    能否尝试把intraFrameInterval 设置为50或者60,我之前的建议配置也都一起改动,看看是否有改善?