【读书会第13期】第二章视频文件的封装格式和编码格式笔记

举报
suifeng1324 发表于 2022/07/13 16:40:15 2022/07/13
【摘要】 笔记参考来源:https://education.huaweicloud.com/courses/course-v1:HuaweiX+CBUCNXLO005+Self-paced/courseware/96d922bf013841c39aabcb94f210e197/6b6d22c4ae644bc4b8b39c27c9ecd491/ FFmpeg的视频封装格式FFmpeg支持很多封装格式,包...

笔记参考来源:https://education.huaweicloud.com/courses/course-v1:HuaweiX+CBUCNXLO005+Self-paced/courseware/96d922bf013841c39aabcb94f210e197/6b6d22c4ae644bc4b8b39c27c9ecd491/

FFmpeg的视频封装格式

FFmpeg支持很多封装格式,包括MP4、FLV、MKV、TS 等视频封装格式、MP3、AAC等音频封装格式以及RTMP、RTSP、HLS 等网络协议封装格式。

# ./configure  --list-muxers
a64                     framehash               mpeg1vcd                rm
ac3                     framemd5                mpeg1video              roq
adts                    g722                    mpeg2dvd                rso
adx                     g723_1                  mpeg2svcd               rtp
aiff                    g726                    mpeg2video              rtp_mpegts
amr                     g726le                  mpeg2vob                rtsp
apng                    gif                     mpegts                  sap
aptx                    gsm                     mpjpeg                  sbc
aptx_hd                 gxf                     mxf                     scc
asf                     h261                    mxf_d10                 segafilm
asf_stream              h263                    mxf_opatom              segment
ass                     h264                    null                    singlejpeg
ast                     hash                    nut                     smjpeg
au                      hds                     oga                     smoothstreaming
avi                     hevc                    ogg                     sox
avm2                    hls                     ogv                     spdif
avs2                    ico                     oma                     spx
bit                     ilbc                    opus                    srt
caf                     image2                  pcm_alaw                stream_segment
cavsvideo               image2pipe              pcm_f32be               sup
chromaprint             ipod                    pcm_f32le               swf
codec2                  ircam                   pcm_f64be               tee
codec2raw               ismv                    pcm_f64le               tg2
crc                     ivf                     pcm_mulaw               tgp
dash                    jacosub                 pcm_s16be               truehd
data                    latm                    pcm_s16le               tta
daud                    lrc                     pcm_s24be               uncodedframecrc
dirac                   m4v                     pcm_s24le               vc1
dnxhd                   matroska                pcm_s32be               vc1t
dts                     matroska_audio          pcm_s32le               voc
dv                      md5                     pcm_s8                  w64
eac3                    microdvd                pcm_u16be               wav
f4v                     mjpeg                   pcm_u16le               webm
ffmetadata              mkvtimestamp_v2         pcm_u24be               webm_chunk
fifo                    mlp                     pcm_u24le               webm_dash_manifest
fifo_test               mmf                     pcm_u32be               webp
filmstrip               mov                     pcm_u32le               webvtt
fits                    mp2                     pcm_u8                  wtv
flac                    mp3                     pcm_vidc                wv
flv                     mp4                     psp                     yuv4mpegpipe
framecrc                mpeg1system             rawvideo

MP4封装格式

MP4 封装格式基本上可以认为是日常生活和工作中最常见的视频文件格式,主要是由于其广泛的适用性,不仅在PC端(windows、mac、linux)支持的非常好,而且在移动端(Android、iOS)也能流畅播放。

MP4 格式标准

MP4 格式标准为ISO-14496 Part 12和ISO-14496 Part 14,具体特征如下:

  1. MP4 文件由许多Box和FullBox。
  2. FullBox是 Box 的扩展,在 Header中增加了8位version信息和24位的flags信息。3.每个Box 由Header 和 Data两部分组成。
  3. Header中包含了整个Box的长度大小(size)和类型(type)。
  4. Data中包含了实际的数据,可以是纯数据,也可以是子Box。当Box 中的 Data是一系列子Box时,这个Box又被称为Container(容器)。

MP4 ftyp Box

ftyp Box,一般位于文件开始位置,其中包含了MP4视频文件的类型、版本、兼容协议等信息。

MP4 moov容器

moov容器中包含了MP4视频文件的媒体数据信息,内部又包含两个子容器: mvhd和trak,前者定义了文件头信息,后者定义了媒体文件中的track信息。
moov容器一般默认会生成在MP4文件结尾,在线播放时需要加载完整个文件才能正常打开,为了能够快速打开视频,需要把moov容器放在MP4文件的前面。

MP4 mdat Box

mdat Box,用来存放媒体文件的实际数据内容。

FFmpeg的视频编码格式

FFmpeg 支持很多视频编码格式,比如MPEG4、H263、H264、H265、VP8、VP9等。接下来,重点介绍H264 视频编码格式。

H264的码率控制

  1. VBR: Variable BitRate,动态码率模式,其码率可以随着图像的复杂程度的不同而变化,因此其编码效率比较高。
  2. CBR: Constant BitRate,恒定码率模式,由于码率恒定,有画面剧烈变化时,QP参数会增大,图像质量会变差,当场景静止时,又浪费带宽。该模式的整体图像质量不稳定。
  3. ABR: Average BitRate,平均码率模式,是VBR的一种衍生形式,在指定的文件大小内,静态或者接近静态的画面部分使用相对较低的流量,复杂画面部分使用较高的流量,可以视为是 VBR和CBR的一种折衷方案。

H264的I帧类型

帧内编码帧,帧表示关键帧,你可以理解为这一帧画面的完整保留;

  1. 一个GOP序列的第一个图像叫做IDR图像(立即刷新图像),IDR图像都是Ⅰ帧图像,但I帧不一定都是IDR帧,只有GOP序列的第1个I帧是IDR帧。
    2.I帧,又叫帧内参考帧,保留一帧完整的画面。
    3.解码时仅用I帧的数据就可重构出完整的图像。
    4.I帧不需要参考其他画面而生成。
    5.I帧是P帧和B帧的参考帧(其质量直接影响到同组中以后各帧的质量)。
  2. I帧不需要考虑运动矢量。
    7.I帧所占数据的信息量最大。

H264的B帧类型

双向预测内插编码帧。B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别
1.B帧,又叫双向参考帧,也就是B帧记录的是本帧与前后帧的差别,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。
2.B帧的压缩率最高,但是解码时CPU使用率会比较高。
3.B帧是由前面的I或P帧和后面的P帧来进行预测的。
4. B帧传送的是它与前面的I或P帧和后面的P帧之间的预测误差及运动矢量。5.B帧不是参考帧,不会造成解码错误的扩散。

H264的P帧类型

前向预测编码帧。P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要之前缓存的画面叠加上本帧定义的差别,生成最终画面。
1.P帧,又叫前向参考帧,表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面,Р帧没有完整画面数据,只有与前一帧的画面差异的数据。
2.P帧是I帧后面相隔1~2帧的编码帧。
3.P帧采用运动补偿的方法传送它与前面的I或P帧的差值及运动矢量(预测误差)。
4.P帧属于前向预测的帧间编码。它只参考前面最靠近它的I帧或P帧。
5.P帧可以是其后面P帧的参考帧,也可以是其前后的B帧的参考帧。
6. P帧是参考帧,可能会造成解码错误的扩散。
7. P帧的压缩比介于I帧和B帧之间。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。