现象:
DM8127 输出1080P 4Mbit/s码率的图像,使用VLC和自有工具观察H264码率。开始时码率正常。通过加大增益,减小光圈,制造大量的噪点,这时码率会增加到20Mbit/s以上,并且无法降回。无论设置CBR还是VBR都会有这个现象,只是CBR会相对好些,码率增加到17Mbit/s,但是也无法下降。减少噪点后,码率恢复正常。
请问H264编码器是否有其他设置可以避免这个问题。
Chris Meng:
Zou ZY,
噪声对于编码来说就是细节,所以编码的码率加大是可以预期的。
你能否这种噪声比较大的情况下开启HDVPSS的NSF,减少噪声?
zy zou:
回复 Chris Meng:
你好:
NSF已被开启,但是噪点较多。可以通过调整QP值处理这个问题么?
Chris Meng:
回复 zy zou:
Zou,
如果你处理的图像是1080p30的,你还可以尝试VTNF,并且把强度开强一点。
对于Qp,你可以先看看你现在的码流里面大部分的QP是否已经是51(最大)了,如果是,那还是需要通过减少噪声来减小码流。如果还有比较小的QP,你可以设定QP的最小值的值更大一点。
zy zou:
回复 Chris Meng:
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
Chris Meng:
回复 zy zou:
zy zou噪点多的时候,码率升高。这时降低噪点,码率会变得很低,
但过一段时间后,码率又会恢复是么?
如果你希望码流控制算法迅速反应,你可以设置 HRDBufferSize=initialBufferLevel=targetBitRate/2,看是否能满足你对码率控制的要求。
zy zou:
回复 Chris Meng:
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:
回复 zy zou:
Zou ZY,
你能确认这个参数是配置进算法库了么?请问你打印的参数是配置动态后用contro命令回读的么?
zy zou:
回复 Chris Meng:
是的,通过下面方法读回来的:
retVal = enclink_h264_control(algObj->u.h264AlgIfObj.algHandle, XDM_GETSTATUS, &dynamicParams, &status);
Chris Meng:
回复 zy zou:
Zou ZY,
请问你使用的是哪个版本的h264enc?
zy zou:
回复 Chris Meng:
Chris Meng:
H264 Encoder
Version 02.00.06