zoukankan      html  css  js  c++  java
  • ffmpeg中mp4转h264、h264_mp4toannexb、bsf使用说明及注意事项

    h264有两种封装,一种是annexb模式,传统模式,有startcode(0x000001或0x0000001)分割NALU,在mpegts流媒体中使用,vlc里打开编码器信息中显示h264;

    一种是AVCC模式,一般用mp4、mkv、flv容器封装,以长度信息分割NALU, vlc里打开编码器信息中显示avc1。

    很多场景需要进行这两种格式之间的转换,FFmpeg提供了名称为h264_mp4toannexb的Bitstream Filter(bsf)来实现这个功能。

    例如将mp4转换成h264可使用如下指令:

    mp4->h264:sudo ffmpeg -i test.mp4 -codec copy -bsf: h264_mp4toannexb -f h264 test.h264

    很多博客介绍的方法也对,但是转码之后码率会过高,慎用。

    Bitstream Filter

    (1)主要目的是对数据进行格式转换,使它能够被解码器处理(比如HEVC QSV的解码器)。

    (2)Bitstream Filter对已编码的码流进行操作,不涉及解码过程。

    (3)使用ffmpeg -bsfs命令可以查看ffmpeg工具支持的Bitstream Filter类型。

    (4)使用ff*工具的 -bsf 选项来指定对具体流的Bitstream Filter,使用逗号分割的多个filter,如果filter有参数, 参数名和参数值跟在filter名称后面。

    bsf的使用方法:

    (1)使用查询函数av_bsf_get_by_name 根据名称查找对应的AVBitstreamFilter。

    (2)使用av_bsf_alloc为AVBSFContext和他的一些内部变量分配内存。

    (3)设置AVBSFContext可能需要使用一些变解码参数和time_base[2].

    (4)在设置好参数之后使用av_bsf_init来初始化bsf.

    (5)使用av_bsf_send_packet函数输入数据,并使用av_bsf_receive_packet获得处理后的输出数据。

    (6)处理结束后,av_bsf_free清理用于上下文和内部缓冲区的内存。

    该接口官网介绍:

    ffmpeg视频转码基础操作可参考:http://www.ruanyifeng.com/blog/2020/01/ffmpeg.html

  • 相关阅读:
    Everspin MRAM技术的可靠性
    如何减小SRAM读写操作时的串扰
    SRAM电路工作原理
    关于如何提高SRAM存储器的新方法
    低功耗SRAM主要三部分功耗来源
    [小米OJ] 6. 交叉队列
    [小米OJ] 4. 最长连续数列
    [小米OJ] 5. 找出旋转有序数列的中间值
    [小米OJ] 3. 大数相减
    [剑指offer] 66. 机器人的运动范围
  • 原文地址:https://www.cnblogs.com/zhibei/p/12551810.html
Copyright © 2011-2022 走看看