现象:
DM8127 输出1080P 4Mbit/s码率的图像,使用VLC和自有工具观察H264码率。开始时码率正常。通过加大增益,减小光圈,制造大量的噪点,这时码率会增加到20Mbit/s以上,并且无法降回。无论设置CBR还是VBR都会有这个现象,只是CBR会相对好些,码率增加到17Mbit/s,但是也无法下降。减少噪点后,码率恢复正常。
请问H264编码器是否有其他设置可以避免这个问题。
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.
Zou ZY,
噪声对于编码来说就是细节,所以编码的码率加大是可以预期的。
你能否这种噪声比较大的情况下开启HDVPSS的NSF,减少噪声?
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
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值设置得很低,导致的问题?