DVR_RDK3.5, 8168平台。
我做了一个encoder的程序,分别以SDI和DVI(HDMI)作为输入源,编码后存储到本地文件。偶然发现,当我用SDI(采集帧率为25)输入,targetbitrate=20,
inputFrameRate=60时 产生的文件码率大小为10.2Mb/s, 而当我将inputFrameRate 设置成30时,产生的文件码率却成为了19.2Mb/s。 比在60时还要大,所以我又将输入改成了DVI-HDMI, 测试结果如下:
filesizebit 时间长度/s 平均码率bit/s targetbitrate inputFrameRate 采集源类型以及采集帧率
73662464 55.199 10.2Mb/s 20M 60FPS SDI-25FPS
99352576 39.566 19.2Mb/s 20M 30FPS SDI-25FPS
38797312 59.166 5.242Mb/s 10M 60FPS SDI-25FPS
62390272 49.666 9.58Mb/s 10M 30FPS SDI-25FPS
采集res=1920*1080,SDI采集帧数为25,由上面数据可以看出,在相同 targetbitrate 下, inputFrameRate 为30时比60时 产生的文件码率大出将近一倍!这是为啥?
我又换成DVI-HDMI输入,结果如下:
filesizebit 时间长度/s 平均码率bit/s targetbitrate inputFrameRate 采集源类型以及采集帧率
30408704 24.366 9.521Mb/s 20M 60FPS DVI-60FPS
51904512 39.466 10.03Mb/s 20M 60FPS DVI-60FPS
60817408 40.133 11.56Mb/s 20M 30FPS DVI-60FPS
65273856 44.366 11.22Mb/s 20M 30FPS DVI-60FPS
当设置inputFrameRate 分别为30以及60时,产生文件平均码率差别不大。
请问,采集的帧率与压缩编码帧率、码率参数的设置有什么关联吗?请各位帮忙说明下出现上面现象的原因。
附上编码部分参数设置:
pEncPrm->chCreateParams[i].format = IVIDEO_H264HP;
pEncPrm->chCreateParams[i].profile = IH264_HIGH_PROFILE;
pEncPrm->chCreateParams[i].dataLayout = IVIDEO_FIELD_SEPARATED;
pEncPrm->chCreateParams[i].fieldMergeEncodeEnable = FALSE;
pEncPrm->chCreateParams[i].enableAnalyticinfo = 0;
pEncPrm->chCreateParams[i].maxBitRate = 20*1000*1000* 15/10;
pEncPrm->chCreateParams[i].encodingPreset = XDM_DEFAULT;
pEncPrm->chCreateParams[i].rateControlPreset = IVIDEO_STORAGE;
pEncPrm->chCreateParams[i].enableHighSpeed = 0;
pEncPrm->chCreateParams[i].defaultDynamicParams.intraFrameInterval = 150;
pEncPrm->chCreateParams[i].defaultDynamicParams.inputFrameRate = 60;
pEncPrm->chCreateParams[i].defaultDynamicParams.targetBitRate = 20*1000*1000;
pEncPrm->chCreateParams[i].defaultDynamicParams.interFrameInterval = 1;
pEncPrm->chCreateParams[i].defaultDynamicParams.mvAccuracy = IVIDENC2_MOTIONVECTOR_QUARTERPEL;
pEncPrm->chCreateParams[i].defaultDynamicParams.rcAlg = -1;
pEncPrm->chCreateParams[i].defaultDynamicParams.qpMin = 10;
pEncPrm->chCreateParams[i].defaultDynamicParams.qpMax = 40;
pEncPrm->chCreateParams[i].defaultDynamicParams.qpInit = -1;///Initial QP for RC (-1,0-51)
pEncPrm->chCreateParams[i].defaultDynamicParams.vbrDuration = 8;
pEncPrm->chCreateParams[i].defaultDynamicParams.vbrSensitivity = 0;