我用的drk版本是04.00.00.03,我的encode参数想从CBR设置为VBR,rateControlPreset的设置为IVIDEO_USER_DEFINED
rcAlgo的设置为IH264_RATECONTROL_PRC
那为什么我的码率和帧率没有什么变化呢?
Chris Meng:
你好,
无论是CBR还是VBR,TI码率控制算法的策略都是尽量靠近用户设定的目标码率。
请问你想利用VBR实现什么样的效果?
map dog:
回复 Chris Meng:
实现可变帧率,那样图像变化不会影响图像质量
Chris Meng:
回复 map dog:
你好,
IVAHD h264enc是否丢帧,丢多少帧,是用户配置的,相关参数如下:
allowFrameSkipskipDistributionWindowLengthnumSkipInDistributionWindow
图像的质量一般是由QP确定的,固定QP能确保图像质量不变化,但是码率就无法控制。
Ternence_Hsu:
map dog那为什么我的码率和帧率没有什么变化呢?
你把CBR 修改为 VBR 码率肯定是不会变的,帧率也不会变;
但是 VBR 会让你视频的瞬时码率的变化变大的,整体码流基本是不变的;
但瞬间大幅度画面运动,VBR 瞬时码率才变大;这个需要看你的具体场景才可以分析;
map dog:
回复 Ternence_Hsu:
问题是画面大量的运动,码率和帧率还是没有变化
Chris Meng:
回复 map dog:
map dog
问题是画面大量的运动,码率和帧率还是没有变化
你测试的是多少分辨率多少帧,设置的目标码率是多少?VBR只有在目标码率较低的情况下,运动剧烈时,码率增加比较明显。如果码率控制算法能够将码率控制在目标码率之下,那就是看不出码率的变化的。
map dog:
回复 Ternence_Hsu:
下面是enclink的统计信息,你看对吗?
[m3video] ——— CH 2 : H264 ENC : Dynamic Params ——-
[m3video]
[m3video] videnc2DynamicParams -> inputHeight : 576
[m3video] videnc2DynamicParams -> inputWidth : 704
[m3video] videnc2DynamicParams -> refFrameRate : 30000
[m3video] videnc2DynamicParams -> targetFrameRate : 25000
[m3video] videnc2DynamicParams -> targetBitRate : 256000
[m3video] videnc2DynamicParams -> intraFrameInterval : 50
[m3video] videnc2DynamicParams -> generateHeader : 0
[m3video] videnc2DynamicParams -> captureWidth : 704
[m3video] videnc2DynamicParams -> forceFrame : -1
[m3video] videnc2DynamicParams -> interFrameInterval : 1
[m3video] videnc2DynamicParams -> mvAccuracy : 2
[m3video] videnc2DynamicParams -> sampleAspectRatioHeight : 1
[m3video] videnc2DynamicParams -> sampleAspectRatioWidth : 1
[m3video] videnc2DynamicParams -> ignoreOutbufSizeFlag : 1
[m3video] videnc2DynamicParams -> lateAcquireArg : -1
[m3video] [m3video] rateControlParams -> rateControlParamsPreset : 1
[m3video] rateControlParams -> scalingMatrixPreset : 0
[m3video] rateControlParams -> rcAlgo : 0
[m3video] rateControlParams -> qpI : -1
[m3video] rateControlParams -> qpMaxI : 40
[m3video] rateControlParams -> qpMinI : 10
[m3video] rateControlParams -> qpP : -1
[m3video] rateControlParams -> qpMaxP : 40
[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 : 4000000
[m3video] rateControlParams -> HRDBufferSize : 4000000
map dog:
回复 Chris Meng:
分辨率是1280×720
帧率是每秒25帧
设置的目标码率是256k
Chris Meng:
回复 map dog:
你好,
1. 请参考xdias里面的ivideo.h, 你现在配置的是CBR。
typedef enum { IVIDEO_LOW_DELAY = 1, /**< CBR rate control for video conferencing. */ IVIDEO_STORAGE = 2, /**< VBR rate control for local storage (DVD) * recording. */ IVIDEO_TWOPASS = 3, /**< Two pass rate control for non real time * applications. */ IVIDEO_NONE = 4, /**< No configurable video rate control * mechanism. */ IVIDEO_USER_DEFINED = 5,/**< User defined configuration using extended * parameters. */ /** Default setting. */ IVIDEO_RATECONTROLPRESET_DEFAULT = IVIDEO_LOW_DELAY} IVIDEO_RateControlPreset;
2. 你发的参数是704×576不是720p的分辨率。
map dog:
回复 Chris Meng:
我把ivideo.h里面的IVIDEO_RATECONTROLPRESET_DEFAULT 设置成 IVIDEO_STORAGE
然后又在enclink_h264.c的enclink_h264_set_static_params函数里面
把staticParams->videnc2Params.rateControlPreset = IVIDEO_STORAGE;
后还是不行