FFmpeg Bitstream Filter学习记录

近日学习腾讯学院有关“FFmpeg 介绍与开发”的课程,里面讲到近两年新引入的“Bitstream Fillter”功能很有用。下面简单记录一下课程内容,再结合网络查询到的相关资料,小结一下。

相关链接:

http://www.ffmpeg.org/ffmpeg-bitstream-filters.html

FFmpeg 官网介绍:

A bitstream filter operates on the encoded stream data, and performs bitstream level modifications without performing decoding.

  1. 比特流滤波器对编码后的数据进行操作(压缩码流)。
  2. 不进行解码操作,但是支持比特流级别的修改。

模版操作:

ffmpeg -i INPUT -c:v copy -bsf:v filter1[=opt1=str1:opt2=str2][,filter2] OUTPUT

示例操作1:mp4 转 ts 格式(annexb字节流格式)

ffmpeg -i input.mp4 -codec copy -bsf:v h264_mp4toannexb output.ts

annexb 和 mp4的区别可以参考:

https://www.jianshu.com/p/909071e8f8c6
H.264码流分Annex-B和AVCC两种格式。
> 1别名
AVCC格式 也叫AVC1格式,MPEG-4格式,字节对齐,因此也叫Byte-Stream Format。用于mp4/flv/mkv,
Annex-B格式 也叫MPEG-2 transport stream format格式(ts格式),
Annex-B 附录B, 指ITU-T的 Recommendation(h.264和h.265)在附录B中规定码流格式。
> 2 结构区别:
区别有两点:一个是参数集(SPS, PPS)组织格式;一个是分隔。
Annex-B:使用start code分隔NAL(start code为三字节或四字节,0x000001或0x00000001,一般是四字节);SPS和PPS按流的方式写在头部。
AVCC:使用NALU长度(固定字节,通常为4字节)分隔NAL;在头部包含extradata(或sequence header)的结构体。

示例操作2:不解码的情况下,跟踪标头语法元素

ffmpeg -i in.264 -c copy -bsf:v trace_headers -f null - 2> NALUS.txt

用于日志跟踪输出,NALUS.txt 内可以包含编码流标头中的所有语法元素(高于单个编码块的水平)。 对于调试底层流问题很有效。

比如,可以查看SPS
在这里插入图片描述
可以查看Slice Header等等。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_37524256/article/details/106410906