关于硬编码在每一帧前都会出现SEI的问题

在硬编码的时候,会在每一帧前都有一个SEI     00 00 00 01 06

用命令行测试也还是会有SEI,主要是比较占我使用的空间大小,影响我码率吧,二来也是看起来不爽。所以想把他去掉,其实不去掉好像也没啥影响。

而测试了软编码没有,也确定了硬编码是可以不出现SEI的,所以找找源码到底是哪里出问题,怎么去掉SEI。

当然是看nvenc.c了

一看是以为是ff_nvenc_send_frame里的a53_cc导致的,设置为0之后仍不生效。

int ff_nvenc_send_frame(AVCodecContext *avctx, const AVFrame *frame)
{
    NvencContext *ctx = avctx->priv_data;
    ...

if (ctx->a53_cc && av_frame_get_side_data(frame, AV_FRAME_DATA_A53_CC)) {            
            if (ff_alloc_a53_sei(frame, sizeof(NV_ENC_SEI_PAYLOAD), (void**)&sei_data, &sei_size) < 0) {
                av_log(ctx, AV_LOG_ERROR, "Not enough memory for closed captions, skipping\n");
            }

            if (sei_data) {
                sei_data->payloadSize = (uint32_t)sei_size;
                sei_data->payloadType = 4;
                sei_data->payload = (uint8_t*)(sei_data + 1);
            }
        }

        nvenc_codec_specific_pic_params(avctx, &pic_params, sei_data);
    ...
}

只能看看有没有相关的SEI参数了,最终在nvEncodeAPI.h中找到几个有SEI字样的参数。

有个朋友给我提示了这个参数

--pic-struct  Force pic_struct in Picture Timing SEI

但是这个是libx264才有的,我看了h264_nvenc没有这个设置 

最终在函数nvenc_setup_h264_config中感觉h264->outputPictureTimingSEI = 1;就是我想要找的

这个配置好像没有可以外部去配置的,只能改下源码了

h264->outputPictureTimingSEI = 0;

编译,测试,成功.

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值