6月17日实验课之“H.264文件解析”

2023-11-19

1.实验要求

一、选择一个.mp4或者.264文件。
二、在码流分析仪软件中打开该文件,从几个层次进行分析:
(1)分析SPS和PPS里都包含哪些主要的信息,给出参数值。(例如分辨率、帧率、GOP结构等等)
(2)以一个GOP为例,分析如下信息:
●每个图像帧的类型及所用的编码比特数、QP值;并以图像帧号为横坐标、每帧所用比特数为纵坐标画出曲线图;以图像帧号为横坐标、每帧所用QP为纵坐标画出曲线图。
●以第一个I帧作为分析对象,基于该帧图像的空间特性,分析每个宏块所采用的编码类型及其比例。
●以第一个P帧作为分析对象,基于该帧图像的空间和时间特性,分析每个宏块所采用的编码类型及其比例。
●以某一个B帧作为分析对象,基于该帧图像的空间和时间特性,分析每个宏块所采用的编码类型及其比例。

2.实验结果

2.1 SPS:

SPS即Sequence Paramater Set,又称作序列参数集。SPS中保存了一组编码视频序列(Coded video sequence)的全局参数。

用码流分析软件打开该文件得到:
在这里插入图片描述

其中的每一个语法元素及其含义如下:

2.1.1 profile_idc:

标识当前H.264码流的profile。我们知道,H.264中定义了三种常用的档次profile:

基准档次:baseline profile;

主要档次:main profile;

扩展档次:extended profile;

在H.264的SPS中,第一个字节表示profile_idc,根据profile_idc的值可以确定码流符合哪一种档次。判断规律为:

profile_idc = 66 → baseline profile;

profile_idc = 77 → main profile;

profile_idc = 88 → extended profile;

在新版的标准中,还包括了High、High 10、High 4:2:2、High 4:4:4、High 10 Intra、High 4:2:2 Intra、High 4:4:4 Intra、CAVLC 4:4:4 Intra等,每一种都由不同的profile_idc表示。
另外,constraint_set0_flag ~ constraint_set5_flag是在编码的档次方面对码流增加的其他一些额外限制性条件。
在我们实验码流中,profile_idc = 66,因此码流的档次为baseline profile。

2.1.2 level_idc

标识当前码流的Level。编码的Level定义了某种条件下的最大视频分辨率、最大视频帧率等参数,码流所遵从的level由level_idc指定。

当前码流中,level_idc = 31,因此码流的级别为3.1,可看出支持720p
在这里插入图片描述

2.1.3 seq_parameter_set_id

表示当前的序列参数集的id。通过该id值,图像参数集pps可以引用其代表的sps中的参数。

2.1.4 log2_max_frame_num_minus4

用于计算MaxFrameNum的值。计算公式为MaxFrameNum = 2^(log2_max_frame_num_minus4 +4)。MaxFrameNum是frame_num的上限值,frame_num是图像序号的一种表示方法,在帧间编码中常用作一种参考帧标记的手段。

2.1.5 pic_order_cnt_type

表示解码picture order count(POC)的方法。POC是另一种计量图像序号的方式,与frame_num有着不同的计算方法。该语法元素的取值为0、1或2。

2.1…6 log2_max_pic_order_cnt_lsb_minus4

用于计算MaxPicOrderCntLsb的值,该值表示POC的上限。计算方法为MaxPicOrderCntLsb = 2^(log2_max_pic_order_cnt_lsb_minus4 + 4)。

2.1.7 max_num_ref_frames

用于表示参考帧的最大数目。

2.1.8 gaps_in_frame_num_value_allowed_flag

标识位,说明frame_num中是否允许不连续的值。

2.1.9 pic_width_in_mbs_minus1

用于计算图像的宽度。单位为宏块个数,因此图像的实际宽度为:

frame_width = 16 × (pic_width_in_mbs_minus1 + 1);
在这里插入图片描述
图像的宽为:(53+1)*16=864

2.1.10 pic_height_in_map_units_minus1

使用PicHeightInMapUnits来度量视频中一帧图像的高度。PicHeightInMapUnits并非图像明确的以像素或宏块为单位的高度,而需要考虑该宏块是帧编码或场编码。PicHeightInMapUnits的计算方式为:
PicHeightInMapUnits = pic_height_in_map_units_minus1 + 1

2.1.11 frame_mbs_only_flag

标识位,说明宏块的编码方式。当该标识位为0时,宏块可能为帧编码或场编码;该标识位为1时,所有宏块都采用帧编码。根据该标识位取值不同,PicHeightInMapUnits的含义也不同,为0时表示一场数据按宏块计算的高度,为1时表示一帧数据按宏块计算的高度。

按照宏块计算的图像实际高度FrameHeightInMbs的计算方法为:
FrameHeightInMbs = ( 2 − frame_mbs_only_flag ) * PicHeightInMapUnits

2.1.12 mb_adaptive_frame_field_flag

标识位,说明是否采用了宏块级的帧场自适应编码。当该标识位为0时,不存在帧编码和场编码之间的切换;当标识位为1时,宏块可能在帧编码和场编码模式之间进行选择。

2.1.13 direct_8x8_inference_flag

标识位,用于B_Skip、B_Direct模式运动矢量的推导计算。

2.1.14 frame_cropping_flag

标识位,说明是否需要对输出的图像帧进行裁剪。

2.1.15 vui_parameters_present_flag

标识位,说明SPS中是否存在VUI信息。

参考

https://zhuanlan.zhihu.com/p/27896239

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

6月17日实验课之“H.264文件解析” 的相关文章

  • Sapir—Whorf Hypothesis (萨皮尔—沃尔夫假说)

    Sapir Whorf Hypothesis 萨皮尔 沃尔夫假说 Sapir Whorf Hypothesis 的思想源头可追溯到德国哲学家海德 G Herder 1744 1803 Wilhelm von Humboldt 1762 18
  • Linux终端退出程序不退出解决方案(nohup/screen)

    终端异常退出后 后台进程不关闭的解决办法 1 使用nohup命令 nohup
  • 作业:递归实现插入排序和在o(nlgn)时间复杂度内寻找和为定值的两个元素

    1 递归实现插入排序 基本思想 可以把插入排序看作递归 地排序A 1 n 1 然后插入a n 到已经排好序的序列a 1 n 1 中 一下是实现算法 C 描述 VS205中调试通过 class InsertSort static void M
  • 计算机系统大作业

    摘 要 本文对hello c在Linux下的生命周期进行了分析 通过一些Linux平台的工具 如gcc objdump edb gdb readelf对程序代码的预处理 编译 汇编 链接 反汇编的过程进行了分析 对比 通过hello在she
  • pikachu之不安全的文件下载概述

    不安全的文件下载概述 文件下载功能在很多web系统上都会出现 一般我们当点击下载链接 便会向后台发送一个下载请求 一般这个请求会包含一个需要下载的文件名称 后台在收到请求后 会开始执行下载代码 将该文件名对应的文件response给浏览器
  • 理解矩阵(一)

    前不久chensh出于不可告人的目的 要充当老师 教别人线性代数 于是我被揪住就线性代数中一些务虚性的问题与他讨论了几次 很明显 chensh觉得 要让自己在讲线性代数的时候不被那位强势的学生认为是神经病 还是比较难的事情 可怜的chens
  • Java赛马程序

    编写一个多线程的控制程序 称为赛马程序 创建分别代表两匹马的两个线程 并将它们设置为高低不同的优先级 并以进度条的形式显示赛马过程 没几天Java要考试了 紧急学习一下再把之前参考 10条消息 Java多线程 进度条实现赛马实验 shall
  • 代码审计作业-area39/pikachu

    1 问答题 1 使用 docker 构建 pikachu镜像 1 搜索pikachu docker search pikachu 2 拉取镜像 docker pull area39 pikachu 3 启动pikachu镜像 docker
  • 线性回归实现人脸识别——ORL数据集

    今天写一个比较简单的机器学习例子 使用线性回归实现人脸识别 使用的数据集是ORL数据集 算法描述 输入 图片矩阵img 标签信息label 测试图片test 对每一个类 第一步 从图片矩阵中读出来一类图片 划分为训练集 X 与测试集 y 第
  • 2021-07-31

    2周目总结 7 19 7 25 无事 打牌 7 26 8 1 河南加油 无事打牌 我似乎忘了什么 哦 还有作业没弄 作业qaq 正在补习ing
  • 爬取湖北师范大学官网新闻信息

    爬虫 内容 要求 分析 爬取摸个面板 部分代码 写入CSV文件的方法 综合代码 内容 要求 爬取湖北师范大学校园官网新闻 将其标题 内容 来源和发布时间写入CSV文件中 分析 湖北师范大学校园官网新闻网页 由于刚开始爬取可以根据其模块将其慢
  • # HTB-Tier2- Vaccine

    HTB Tier2 Vaccine Web Network Vulnerability Assessment Databases Injection Custom Applications Protocols Source Code Ana
  • # HTB-Tier2- Oopsie

    HTB Tier2 Oopsie Tags PHP Web Custom Applications Session Handling Apache Penetration Tester Level 1 Reconaisance Web Si
  • ComSec HW6 Hash

    11 1 安全 Hash 函数需要具有那些特性 H能用于任何大小的数据分组 H产生定长输出 对任意给定的x H x 要相对易于计算 使得软硬件实现都实际可行 单向性 对任意给定的码y 寻求x使得H x y在计算上不可行 弱抗碰撞性 任意给定
  • 课堂小作业之3位水仙花数计算

    3位水仙花数计算 描述 3位水仙花数 是指一个三位整数 其各位数字的3次方和等于该数本身 例如 ABC是一个 3位水仙花数 则 A的3次方 B的3次方 C的3次方 ABC
  • Lloyd-Max条件、DPCM系统最佳预测系数推导以及最小二乘:梯度下降、牛顿法、高斯牛顿法总结

    文章目录 1 Lloyd Max条件推导 2 DPCM系统最佳预测系数推导 3 最小二乘 梯度下降 牛顿法 高斯牛顿法总结 3 1 梯度下降 3 2 牛顿法 3 3 高斯牛顿法 1 Lloyd Max条件推导 2 DPCM系统最佳预测系数推
  • 清华梦的粉碎-写给清华大学的退学申请

    作者 王垠 清华梦的诞生 小时候 妈妈给我一个梦 她指着一个大哥哥的照片对我说 这是爸爸的学生 他考上了清华 大学 他是我们中学的骄傲 长大后 你也要进入清华大学读书 为我们家争光 我不知道清华是什么样子 但是我知道爱迪生和 牛顿 的故事
  • c语言发牌小程序

    include
  • 服务计算:简单的web程序

    CloudGo 框架选择 看了go的一些框架如beego和iris觉得挺好的 本来想用 但是虚拟机出了点问题装不成 windows上装成了没ab指令 所以使用官方的net http库做简单的实验 看完beego和iris的特性我还是比较想用
  • 6月17日实验课之“H.264文件解析”

    文章目录 1 实验要求 2 实验结果 2 1 SPS 2 1 1 profile idc 2 1 2 level idc 2 1 3 seq parameter set id 2 1 4 log2 max frame num minus4

随机推荐

  • java POI在excel中插入等比例缩放的图片

    这个缩放的比例不是很准确 但还凑合能用 目前本人找不到其它方法 就先用这个 先看一个关键的API方法 void org apache poi ss usermodel Picture resize double scaleX double
  • DES加解密算法

    DES加解密算法 单密钥对称加解密算法 入口参数有三个 key data mode key为加密解密使用的密钥 data为加密解密的数据 mode为其工作模式 当模式为加密模式时 明文按照64位进行分组 形成明文组 key用于对数据加密 当
  • githubActions部署文件到服务器

    示例 githubAction配置示例 ssh秘钥方式 首先在服务器生成秘钥 参考https github com easingthemes ssh deploy 安装 rsync apt get install rsync 参考 参考 n
  • Go 流程控制 for、for range 循环

    在Go语言中 for循环是一种常用的流程控制语句 可以重复执行一段代码块 直到满足退出条件 同时 Go语言还提供了for range循环 用于遍历数组 切片 映射和字符串等数据结构 在本篇博客中 我们将介绍Go语言中的for循环和for r
  • USART HMI智能串口屏介绍

    概要 USART HMI智能串口屏 该显示屏的介绍 GUI界面的设计 通讯方式和修改控件参数的相关指令等 一开始我们项目组在显示上用的是12864液晶显示屏 带字库 但是看起来效果不是很好 感觉很LOW 而且不知道什么原因 12864常常会
  • Redis主从复制总结整理

    Redis的主从复制策略是通过其持久化的rdb文件来实现的 其过程是先dump出rdb文件 将rdb文件全量传输给slave 然后再将dump后的操作实时同步到slave中 让从服务器 slave server 成为主服务器 master
  • 实现文件里字符替换功能

    思路 首先要打开你要打开的文件例如我这边桌面的demo txt 利用相关函数计算出这个文件大小 然后开始遍历里面的内容 一个字符一个字符的遍历 如果找到了要被替换的字符就当场重新把新的内容赋值进去 最后重新覆盖整个文章 可能表达有误 可直接
  • mysql 5.6 安装流程

    一 首先解压安装包到指定路径 解压路径不可为中文 二 配置环境变量 我是windows11 1 1 2 3 4 5 6 6 全部点击确定 三 更改my ini 这两条路径更改为与环境变量相同路径 四 运行cmd 1 2 输入mysqld i
  • 2021-08-06软考网工的一个简单的综合实验

    拓扑 PC1和PC2都设置成dhcp获取ip PC1属于10网段 标记为教学区 PC2属于20网段 标记为宿舍区 LSW1作为接入交换机 LSW2作为核心交换机 AR1作为外网入口 AR2表示电信运营商的路由器 AR3表示联通运营商的路由器
  • oracle tcp空包请求,再谈 TCP 的 CLOSE_WAIT

    背景 某日集群告警 hbase regionserver 因 fd 不足导致进程主动退出 简单排查后发现regionserver 到 datanode 的TCP 连接存在大量 CLOSE WAIT 单机总数有10万之多 众所周知 CLOSE
  • HTML表格

    目录 实例 表格 表格和边框属性 表格的表头 表格中的空单元格 更多实例 表格标签 一个完整的实例 本例涉及到的资源 eg background jpg eg cute gif 可以使用 HTML 创建表格 实例 表格 这个例子演示如何在
  • 一台电脑上安装两个Tomcat服务器

    在排查问题来源的时候 由于不想卸载之前下载的Tomcat 需要再安装一个Tomcat服务器 下载压缩版的Tomcat之后 第一个Tomcat配置不变 需要修改第二个Tomcat的配置 1 CATALINA HOME 8081 新的地址 2
  • flex:1可以撑满剩余空间

    flex 1 的妙用 首先 flex 是 flex grow flex shrink flex basis的缩写 当 flex 取值为一个非负数字 则该数字为 flex grow 值 flex shrink 取 1 flex basis 取
  • MySql中left join、right join、inner join实例分析,union与union all的区别,Mybatis中CDATA []的用法

    inner join select from user a inner join grade b on a gid b id 只返回两个表中联结字段相等的行 left join select from user a left join gr
  • bokeh python_Python Bokeh数据可视化教程

    bokeh python Bokeh is an interactive Python data visualization library which targets modern web browsers for presentatio
  • cad隐藏图层命令快捷键_教你学会天正CAD局部隐藏对象技巧

    天正局部隐藏命令 JBYC 即局部隐藏的拼音首字母 其命令全称为TMKHIDE 适用于所有天正软件 建筑 电气 给排水 暖通 天正建筑的工具界面中是有此菜单的 且默认快捷键4为局部隐藏 6为恢复可见 其他软件并未显示 需要通过命令输入使用
  • 基于conda的相关命令

    conda 查看python版本环境 打开Anaconda Prompt的命令输入框 查看自己的python版本 conda env list 激活相应的python版本 环境 conda avtivate python 3 9 若输入以下
  • 我在工作中是如何使用【Linux】的

    目录 前言 一 常用命令 二 文件和目录处理 三 用户与组管理命令 四 进程管理命令 五 网络管理命令 六 帮助命令 七 磁盘管理 前言 大家好 这是我首篇博客 内容是linux工作需用到的内容 在这里我给大家总结出来了 希望多支持支持 感
  • 【Hello mysql】 mysql的事务

    Mysql专栏 Mysql 本篇博客简介 介绍mysql的事务 mysql的事务 事务的概念 事务功能测试 事务的隔离级别 如何理解隔离性 粗浅理解 隔离级别 查看和设置隔离级别 四种隔离级别详解 读 未提交 读 提交 可重复读 串行化 一
  • 6月17日实验课之“H.264文件解析”

    文章目录 1 实验要求 2 实验结果 2 1 SPS 2 1 1 profile idc 2 1 2 level idc 2 1 3 seq parameter set id 2 1 4 log2 max frame num minus4