ffmpeg--从mp4中提取并转换sps/pps为annexb

一、简介

        本文将利用ffmpeg API提取mp4的sps/pps,并用h264_mp4toannexb将sps/pps转换成annexb形式。h265的话,将h264_mp4toannexb换成hevc_mp4toannexb即可

二、代码片段

    _videoCodecCtx = _ifmtCtx->streams[_videoIndex]->codecpar;
    const AVBitStreamFilter *absFilter = NULL;
    AVBSFContext *absCtx = NULL;

    absFilter = av_bsf_get_by_name("h264_mp4toannexb");
    av_bsf_alloc(absFilter, &absCtx);
    avcodec_parameters_copy(absCtx->par_in, _videoCodecCtx);
    av_bsf_init(absCtx);

    FILE* fp = fopen("test.264", "rb+");
    fwrite(absCtx->par_out->extradata, 1, absCtx->par_out->extradata_size, fp);
    fclose(fp);

        注:代码片段中没有处理资源释放的问题

三、两种格式的sps/pps数据的比较

        mp4:

        

        简单解释一下:前五个字节基本不用管,第6个字节后五位为sps个数,第7/8个字节是sps长度,sps内容。后面的pps类似,pps个数一个字节,长度两个字节。

        h264:

        

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值