【编解码 002】HEVC(H265) AVC(H264) SPS 解析

1 解码软件

1 StreamEye

下载
Download Elecard StreamEye by Elecard (informer.com)
或者百度网盘
链接: https://pan.baidu.com/s/1Ck0R02V-F6HvmI1sY_nb-g?pwd=7gwd 提取码: 7gwd

官方网站 - 文档
StreamEye | Elecard: Video Compression Guru

使用教程
https://www.youtube.com/watch?v=SvVL3buADN8

2 exploer

Parabola Explorer - HEVC Bitstream Analyzer and Visualization Tool (parabolaresearch.com)

这一行可以控制,YUV 或者其他显不显示

或者百度网盘:
链接: https://pan.baidu.com/s/16mwa30hpnj8D5yxbrMG6XA?pwd=7qhz 提取码: 7qhz

2 SPS 解析

2.1 HEVC SPS 解析

7.4.3.2 SPS 语义
7.4.3.2.1 General sequence parameter set RBSP semantics

  • sps_video_parameter_set_id 指定VPS的值,供其他语法元素引用。

  • sps_max_sub_layers_minus1
    sps_max_sub_layers_minus1 + 1指定引用SPS的每个CVS中可能存在的时间子层的最大数量。sps_max_sub_layers_minus1取值范围为0 ~ 6(含6)。sps_max_sub_layers_minus1小于等于vps_max_sub_layers_minus1。

  • sps_temporal_id_nesting_flag
    当sps_max_sub_layers_minus1大于0时,sps_temporal_id_nesting_flag指定是否对引用SPS的CVSs进行额外的内部预测限制。当vps_temporal_id_nesting_flag = 1时,sps_temporal_id_nesting_flag = 1。当sps_max_sub_layers_minus1 = 0时,sps_temporal_id_nesting_flag = 1。注1 -语法元素sps_temporal_id_nesting_flag用于表示时态上切换,即从解码到任何TemporalId tIdN切换到解码到任何大于tIdN的TemporalId tIdM,在CVS中始终是可能的。

  • sps_seq_parameter_set_id
    sps_seq_parameter_set_id为SPS提供标识符,供其他语法元素引用。sps_seq_parameter_set_id取值范围为0 ~ 15(含)。

  • chroma_format_idc
    Chroma_format_idc 指定色度格式。指定色度采样相对于第6.2条规定的亮度采样。chroma_format_idc的取值范围为0 ~ 3(含3)。

  • separate_colour_plane_flag
    separate_color_plane_flag 指示是否独立编码色度平面。
    separate_color_plane_flag = 1指定对4:4:4色度格式的三个颜色成分进行编码
    分开。separate_color_plane_flag = 0指定颜色组件不单独编码。当
    separate_color_plane_flag不存在,它被推断为等于0。当separate_color_plane_flag等于1时,
    编码图像由三个独立的组件组成,每个组件由一个彩色平面(Y)的编码样本组成,
    Cb或Cr),并使用单色编码语法。在这种情况下,每个颜色平面都与一个特定的颜色平面相关联
    colour_plane_id价值。
    注2 -具有不同color_plane_id值的颜色平面在解码过程中没有依赖关系。为
    例如,一个值为color_plane_id的单色图片的解码过程不使用任何来自单色的数据
    具有不同的color_plane_id值的图片进行相互预测。
    根据separate_color_plane_flag的值,变量ChromaArrayType的值分配如下:
    —如果separate_color_plane_flag = 0,则设置为ChromaArrayType = chroma_format_idc。
    —否则(separate_color_plane_flag = 1),则将ChromaArrayType设置为0。

  • 1 pic_width_in_luma_samples

Pic_width_in_luma_samples以亮度样本为单位指定每个解码图像的宽度。pic_width_in_luma_samples不能等于0,应该是MinCbSizeY的整数倍。

  • 2 pic_height_in_luma_samples
    Pic_height_in_luma_samples以亮度样本为单位指定每个解码图像的高度。pic_height_in_luma_samples不能等于0,应该是MinCbSizeY的整数倍。
  • 3 conformance_window_flag
  • conformance_window_flag:指示是否存在符合性窗口偏移参数。
    conformance_window_flag = 1表示SPS中的一致性裁剪窗口偏移量参数跟随next。conformance_window_flag = 0表示一致性裁剪窗口偏移量参数不存在。
    software-manual.pdf (fraunhofer.de)

Conf_win_left_offset, conf_win_right_offset, conf_win_top_offset和conf_win_bottom_offset指定的示例解码过程中输出的CVS中的图片,以图片中指定的矩形区域表示输出坐标。

当conformance_window_flag = 0时,conf_win_left_offset、Conf_win_right_offset, conf_win_top_offset和conf_win_bottom_offset被推断为等于0。

  • bit_depth_luma_minus8 和 bit_depth_chroma_minus8:指定色度和亮度的比特深度。
  • log2_max_pic_order_cnt_lsb_minus4:指定最大图片顺序计数的位数。
  • sps_sub_layer_ordering_info_present_flag:与VPS中对应的标志相同的作用。
  • sps_max_dec_pic_buffering_minus1、sps_max_num_reorder_pics 和 sps_max_latency_increase_plus1:与VPS中的对应参数相同的作用。
  • log2_min_luma_coding_block_size_minus3 到 max_transform_hierarchy_depth_intra:定义了编码块、变换块和变换层次深度的最小和最大尺寸。
  • scaling_list_enabled_flag:指示是否启用量化矩阵缩放列表。
  • amp_enabled_flag、sample_adaptive_offset_enabled_flag 和 pcm_enabled_flag:指示是否启用各种编码工具。
  • num_short_term_ref_pic_sets:指定短期参考图片集的数量。
  • long_term_ref_pics_present_flag:指示是否使用长期参考图片。
  • sps_temporal_mvp_enabled_flag 和 strong_intra_smoothing_enabled_flag:启用特定的预测和平滑功能。
  • vui_parameters_present_flag:指示是否存在VUI参数集。
  • sps_extension_present_flag:指示是否存在SPS扩展。

2.2 AVC SPS

SPS中包含的参数非常多,但其中一些关键参数如下:
在这里插入图片描述

  • 1.profile_idc
    :指定了使用的编码特性集,指示了视频流使用的H.264配置文件类型(如Baseline、Main、High等)。

  • 2.level_idc
    :指定了视频流符合的等级,定义了编码器和解码器的性能需求(如分辨率和比特率)。

  • 3.seq_parameter_set_id
    :SPS的标识符,用于区分不同的SPS。

  • 4.log2_max_frame_num_minus4
    :定义了视频序列中最大帧号的对数减4,用于计算视频流中的帧号。

  • 5.pic_order_cnt_type
    :定义了图像顺序计数类型,用于处理视频帧的显示顺序。

  • 6.num_ref_frames
    :指定了解码过程中使用的参考帧的数量。

  • 7.frame_mbs_only_flag
    :指示视频帧是否仅由宏块组成。如果为1,视频流中不包含场编码。
    根据frame_mbs_only_flag,语义分配给pic_height_in_map_units_minus1如下:
    —当frame_mbs_only_flag = 0时,pic_height_in_map_units_minus1 + 1表示字段的高度,单位为macroblocks。
    —否则(frame_mbs_only_flag = 1), pic_height_in_map_units_minus1 + 1为帧的高度,单位为macroblocks。

  • 8.pic_width_in_mbs_minus1 和 pic_height_in_map_units_minus1
    :定义了视频帧的宽度和高度,以宏块(16x16像素)的数量表示。
    以宏块为单位的图片宽度变量派生为
    PicWidthInMbs = pic_width_in_mbs_minus1 + 1 (7-13)
    亮度分量的图像宽度变量推导为
    PicWidthInSamplesL = PicWidthInMbs * 16 (7-14)
    色度分量的图像宽度变量推导为
    PicWidthInSamplesC = PicWidthInMbs * MbWidthC (7-15)

Pic_height_in_map_units_minus1 + 1指定解码帧或字段的切片组映射单位的高度:
PicHeightInMapUnits = pic_height_in_map_units_minus1 + 1 (7-16)
PicSizeInMapUnits = PicWidthInMbs * PicHeightInMapUnits (7-17)

  • 9.vui_parameters_present_flag
    :指示是否存在VUI(Video Usability Information,视频可用性信息)参数,这些参数提供了有关视频流显示和解释的附加信息。

3 解码的宽高实例

3.1HEVC 中解码的宽高

注3 -一致性裁剪窗口偏移参数仅适用于输出。所有内部解码过程都应用于未裁剪的图片大小。
也就是解码过程,使用的宽高是 pic_width_in_luma_samples,pic_height_in_luma_samples
在这里插入图片描述
例如这个,解码过程使用的pic宽和高应当为 1920*1088,裁剪动作应该在解码之后

3.2 AVC 中解码的宽高

在这里插入图片描述
PicWidthInMbs = 119 + 1 = 120
PicWidthInSamplesL = PicWidthInMbs * 16 = 1920

()67+1) * 16 = 1088

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值