天天看点

h.264中的SPS和PPS1、概念2、sps、pps、I帧、P帧在NALU中的关系和nalu type判断 一个完整的NALU单元结构图如下:3、序列参数集 (Sequence Paramater Set, SPS) 4、图像参数集 (Picture Paramater Set, PPS)

1、概念

在 

H.264

 流中,有两种 

NALU

 极其重要,H264码流可以分为两层,VCL层和NAL层,NAL的全称是Network abstraction layer,叫网络抽象层,它保存了H264相关的参数信息和图像信息,NAL层由多个单元NALU组成,NALU由了NALU头(00 00 00 01或者00 00 01)、sps(序列参数集)、pps(图像参数集合)、slice、sei、IDR帧、I帧(在图像运动变化较少时,I帧后面是7个P帧,如果图像运动变化大时,一个序列就短了,I帧后面可能是3个或者4个P帧)、P帧、B帧等数据。

2、sps、pps、I帧、P帧在NALU中的关系和nalu type判断

一个完整的NALU单元结构图如下:

h.264中的SPS和PPS1、概念2、sps、pps、I帧、P帧在NALU中的关系和nalu type判断 一个完整的NALU单元结构图如下:3、序列参数集 (Sequence Paramater Set, SPS) 4、图像参数集 (Picture Paramater Set, PPS)

3、序列参数集 (Sequence Paramater Set, 

SPS

)

SPS 记录了编码的 

Profile

level

、图像宽高等

3.1、profile 主要参数:

  • 1、Baseline Profile:基本画质。支持I/P 帧,只支持无交错(Progressive)和CAVLC;
  • 2、Extended profile:进阶画质。支持I/P/B/SP/SI 帧,只支持无交错(Progressive)和CAVLC;(用的少)
  • 3、Main profile:主流画质。提供I/P/B 帧,支持无交错(Progressive)和交错(Interlaced), 也支持CAVLC 和CABAC 的支持;
  • 4、High profile:高级画质。在main Profile 的基础上增加了8x8内部预测、自定义量化、 无损视频编码和更多的YUV 格式;

  H.264 Baseline profile、Extended profile和Main profile都是针对8位样本数据、4:2:0格式(YUV)的视频序列。在相同配置情况下,High profile(HP)可以比Main profile(MP)降低10%的码率。 根据应用领域的不同,Baseline profile多应用于实时通信领域,Main profile多应用于流媒体领域,High profile则多应用于广电和存储领域。

h.264中的SPS和PPS1、概念2、sps、pps、I帧、P帧在NALU中的关系和nalu type判断 一个完整的NALU单元结构图如下:3、序列参数集 (Sequence Paramater Set, SPS) 4、图像参数集 (Picture Paramater Set, PPS)

3.2、Level 主要参数:

h.264中的SPS和PPS1、概念2、sps、pps、I帧、P帧在NALU中的关系和nalu type判断 一个完整的NALU单元结构图如下:3、序列参数集 (Sequence Paramater Set, SPS) 4、图像参数集 (Picture Paramater Set, PPS)

3.3、fmpeg如何控制profile&level

ffmpeg -i input.mp4 -profile:v baseline -level 3.0 output.mp4

ffmpeg -i input.mp4 -profile:v main -level 4.2 output.mp4

ffmpeg -i input.mp4 -profile:v high -level 5.1 output.mp4      

如果ffmpeg编译时加了external的libx264,那就这么写:

ffmpeg -i input.mp4 -c:v libx264 -x264-params "profile=high:level=3.0" output.mp4      

从压缩比例来说,baseline< main < high ,对于带宽比较局限的在线视频,可能会选择high,但有些时候,做个小视频,希望所有的设备基本都能解码(有些低端设备或早期的设备只能解码baseline),那就牺牲文件大小吧,用baseline。自己取舍吧!

 4、图像参数集 (Picture Paramater Set, 

PPS

)

每一帧编码后数据所依赖的参数保存于 

PPS

 中

一般情况

SPS

PPS

NAL Unit

通常位于整个码流的起始位置。

封装文件一般进保存一次,位于文件头部,

SPS/PPS

在整个解码过程中复用,不发生变化。

然而对于实时流,通常是从流中间开始解码,因此需要在每个

I帧

前添加

SPS

PPS

如果编码器在编码过程中改变了码流参数(如分辨率),需要重新调整

SPS

PPS

数据。

继续阅读