Toybrick

编码I帧模糊

jianglin2045

新手上路

积分
33
发表于 2020-10-26 10:46:40    查看: 37549|回复: 20 | [复制链接]    打印 | 显示全部楼层
我在RK3300 Pro上面使用/usr/share/rockchip-mpp/example/编码例子发现:编码分辨率640x480格式(YUV片源->H264)时候I帧模糊P帧正常,做了测试码率越低模糊的越明显。
例程里就该了分辨率其它参数没有改变,请教一下这是什么元素引起的呢?
回复

使用道具 举报

jefferyzhang

版主

积分
12844
发表于 2020-10-26 17:51:11 | 显示全部楼层
码率、DP值、GOP都是影响编码质量的重要因素。
264本来就是有损编码,你不可能要求4K编码1M码率还能跟原画一个样吧。
回复

使用道具 举报

jianglin2045

新手上路

积分
33
 楼主| 发表于 2020-10-26 19:46:27 | 显示全部楼层
jefferyzhang 发表于 2020-10-26 17:51
码率、DP值、GOP都是影响编码质量的重要因素。
264本来就是有损编码,你不可能要求4K编码1M码率还能跟原画 ...

您好 很高兴收到您的反馈
我在其它平台下(海思mpp和ffmpeg软编码)参数分辨率:640x480, gop:15,  fps:15, bps:819200 情况下编码都是比较正常。
在RK3399Pro用同样的参数,在画面相对静止的情况下,发现编码出来的画面的下半部分I帧模糊,P帧逐渐变清晰,到下一个I帧又模糊,这样导致画面下半部分闪烁的现象。不知道哪儿参数设置有问题吗?
谢谢!

参数如下:
EncCtx ctx;
        memset(&ctx, 0, sizeof(ctx));
        ctx.width = 640;
        ctx.height = 480;
        ctx.v4l2Format = ENCODE_TYPE_H264;
        ctx.size = size;
        ctx.fps = 15;
        ctx.gop = 15;
        ctx.bps = 819200;//width * height /16 * ctx.fps;
        ctx.mode = ENCODE_RC_MODE_CBR;
        ctx.quality = ENCODE_QUALITY_WORST;
        ctx.profile = ENCODE_PROFILE_HIGH;
回复

使用道具 举报

jefferyzhang

版主

积分
12844
发表于 2020-10-26 21:32:17 | 显示全部楼层
jianglin2045 发表于 2020-10-26 19:46
您好 很高兴收到您的反馈
我在其它平台下(海思mpp和ffmpeg软编码)参数分辨率:640x480, gop:15,  fps:15, ...

qp值呢
回复

使用道具 举报

jianglin2045

新手上路

积分
33
 楼主| 发表于 2020-10-27 09:50:04 | 显示全部楼层

您好,您是说ENCODE_QUALITY_CQP这个参数吗?
回复

使用道具 举报

jefferyzhang

版主

积分
12844
发表于 2020-10-27 10:37:08 | 显示全部楼层
jianglin2045 发表于 2020-10-27 09:50
您好,您是说ENCODE_QUALITY_CQP这个参数吗?

就是qp
qp_init
qp_min
qp_max
类似这样的一组值。
如果你不会配置的话,稍微等一下,我联系了媒体部门做一次升级,搞成自动配置。
回复

使用道具 举报

jianglin2045

新手上路

积分
33
 楼主| 发表于 2020-10-27 10:54:17 | 显示全部楼层

这些值好像Mpp例程里配置不了吧?
回复

使用道具 举报

jefferyzhang

版主

积分
12844
发表于 2020-10-27 11:14:34 | 显示全部楼层
jianglin2045 发表于 2020-10-27 10:54
这些值好像Mpp例程里配置不了吧?

当然可以,请仔细看sample,sample里都有
回复

使用道具 举报

Rereflyer

新手上路

积分
38
发表于 2020-10-27 14:00:35 | 显示全部楼层
你好,mpi_enc_test.c里面的配置是这样的,
    case MPP_VIDEO_CodingAVC : {
        /*
         * H.264 profile_idc parameter
         * 66  - Baseline profile
         * 77  - Main profile
         * 100 - High profile
         */
        mpp_enc_cfg_set_s32(cfg, "h264:profile", 100);
        /*
         * H.264 level_idc parameter
         * 10 / 11 / 12 / 13    - qcif@15fps / cif@7.5fps / cif@15fps / cif@30fps
         * 20 / 21 / 22         - cif@30fps / half-D1@@25fps / D1@12.5fps
         * 30 / 31 / 32         - D1@25fps / 720p@30fps / 720p@60fps
         * 40 / 41 / 42         - 1080p@30fps / 1080p@30fps / 1080p@60fps
         * 50 / 51 / 52         - 4K@30fps
         */
        mpp_enc_cfg_set_s32(cfg, "h264:level", 40);
        mpp_enc_cfg_set_s32(cfg, "h264:cabac_en", 1);
        mpp_enc_cfg_set_s32(cfg, "h264:cabac_idc", 0);
        mpp_enc_cfg_set_s32(cfg, "h264:trans8x8", 1);

        if (p->rc_mode == MPP_ENC_RC_MODE_FIXQP) {
            mpp_enc_cfg_set_s32(cfg, "h264:qp_init", 20);
            mpp_enc_cfg_set_s32(cfg, "h264:qp_max", 16);
            mpp_enc_cfg_set_s32(cfg, "h264:qp_min", 16);
            mpp_enc_cfg_set_s32(cfg, "h264:qp_max_i", 20);
            mpp_enc_cfg_set_s32(cfg, "h264:qp_min_i", 20);
        } else {
            mpp_enc_cfg_set_s32(cfg, "h264:qp_init", 26);
            mpp_enc_cfg_set_s32(cfg, "h264:qp_max", 51);
            mpp_enc_cfg_set_s32(cfg, "h264:qp_min", 10);
            mpp_enc_cfg_set_s32(cfg, "h264:qp_max_i", 46);
            mpp_enc_cfg_set_s32(cfg, "h264:qp_min_i", 24);
        }
    } break;
我也遇到了同样的问题, 编码H264出现I帧模糊,这个
qp_init
qp_min
qp_max
具体要设成多少,有没有规则可以参考?
回复

使用道具 举报

jefferyzhang

版主

积分
12844
发表于 2020-10-27 14:11:47 | 显示全部楼层
Rereflyer 发表于 2020-10-27 14:00
你好,mpi_enc_test.c里面的配置是这样的,
    case MPP_VIDEO_CodingAVC : {
        /*

比较麻烦,要看场景,最不济把min max设一样就好了。动态设置的已经提交了,正在做升级包,还是请先按sample的设置,然后回头更新下mpp即可
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

产品中心 购买渠道 开源社区 Wiki教程 资料下载 关于Toybrick


快速回复 返回顶部 返回列表