图像、帧、片、NALU 是学习 H.264 的人常常感到困惑的一些概念,我在这里对自己的理解做一些阐述,欢迎大家讨论:

H.264 是一次概念的革新,它打破常规,完全没有 I 帧、P帧、B 帧的概念,也没有 IDR 帧的概念。对于 H.264 中出现的一些概念从大到小排序依次是:序列、图像、片组、片、NALU、宏块、亚宏块、块、像素。这里有几点值得说明:
(1)、在 H.264 协议中图像是个集合概念,顶场、低场、帧都可以称为图像(本文后面内容用到图像概念时都是集合概念,不再重复说明)。因此我们可以知道,对于 H.264 协议来说,我们平常所熟悉的那些称呼,例如:I 帧、P 帧、B 帧等等,实际上都是我们把图像这个概念具体化和细小化了,即我们提到的“帧”通常就是指不分场的图像;
(2)、如果不采用 FMO(灵活宏块排序) 机制,则一幅图像只有一个片组;
(3)、如果不使用多个片,则一个片组只有一个片;
(4)、如果不采用 DP(数据分割)机制,则一个片就是一个 NALU,一个 NALU 也就是一个片。否则,一个片由三个 NALU 组成(即标准“表7-1”中 nal_unit_type 值为 2、3、4 的三个 NALU 属于一个片);
(5)、以上所述的片和 NALU 的大小关系并不是抽象概念上的从属关系。从概念的从属关系上来看,NALU其实又是片的一个集合概念,例如:标准“表7-1”中 nal_unit_type 值为 5 的 NALU 包括 I 片或者 SI 片。

一幅图像根据组成它的片类型来分,可以分为标准“表7-5”中的 8 种类型。我们平常应用中所最常见到的其实是这些类型的特例。例如:我们平常所谓的“I 帧”和“IDR 帧”,其实是 primary_pic_type 值为 0 的图像,我们平常所谓的“P帧”其实是 primary_pic_type 值为 1 的图像的特例,我们平常所谓的“B帧”其实是 primary_pic_type 值为 2 的图像的特例。

一幅图像根据概念来分可以分为两种:IDR 图像和非 IDR 图像。一幅图像是否是 IDR 图像是由组成该图像的 NALU 决定的,如果组成该图像的 NALU 为标准“表7-1”中 nal_unit_type 值为 5 的 NALU,则该图像为 IDR 图像,否则为非 IDR 图像。这里也有几点值得说明:
(1)、nal_unit_type 值为 5 的 NALU 只会出现在 IDR 图像中,而 IDR 图像中的所有 NALU 都是nal_unit_type 值为 5 的 NALU;
(2)、我们以组成一幅图像的片的类型来区分该图像是否是 IDR 图像是错误的。例如:一幅图像中的所有片都是 I 片并不代表这幅图像就是 IDR 图像。因为 I 片也可以从属于 nal_unit_type 值为 1 的 NALU。只不过我们平常最常见到的形式是:所有片都是 I 片的图像就是 IDR 图像。其实这个时候 IDR 图像的概念也被我们具体化和细小化了。

一幅图像由 1~N 个片组组成,而每一个片组又由一个或若干个片组成。图像解码过程中总是按照片进行解码,然后按照片组将解码宏块重组成图像。从这种意义上讲,片实际是最大的解码单元。而一个片又包含哪些类型的宏块呢?标准“表7-10”做了最好的说明。一个 I 宏块又分为哪些类型呢?标准“表7-11”做了最好的说明。一个 P 宏块又分为哪些类型呢?标准“表7-13”做了最好的说明。一个 B 宏块又分为哪些类型呢?标准“表7-14”做了最好的说明。一个 P 宏块的亚宏块又分为哪些类型呢?标准“表7-17”做了最好的说明。一个 B 宏块的亚宏块又分为哪些类型呢?标准“表7-18”做了最好的说明。

图像、帧、片、NALU相关推荐

  1. 四元数姿态解算c语言例程_(21)用四元数插值来对齐IMU和图像帧

    最近一直在外实习,好久没更新博文了,实在罪过哈. 面临秋招,亚历山大,宝宝想哭,但要坚强. 前不久看到一句话,很有感触,送给一起秋招的小伙伴拉: 不要等到准备充足了才去开始,放出去溜溜吧拉1 说正事哈 ...

  2. OpenCV实现按指定间隔抽取视频中的图像帧

    习惯了C++语言的OpenCV突然用Python语言OpenCV还是感觉有点不适应,但是慢慢在写的过程中,觉得Python语言的风格也挺美的(但自己的写的还是很丑-),晚上回宿舍的剩余时间,记录一下最 ...

  3. 使用ffmpeg从视频中截取图像帧(最简单实用的视频抽帧,一句命令)

    Table of Contents 1.最佳方式 2.普通的命令:(画质差) 3. 视频旋转: 4. 批量视频抽帧: 参考:ffmpeg视频抽帧 1.最佳方式 第二种方法抽帧图片画质很差,这里提供更好 ...

  4. 用java实现给图片增加图片水印或者文字水印(也支持视频图像帧添加水印)

    javaCV图像处理系列: javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置.大小.粗度.翻转.平滑等操作 javaCV图像处理之2:实时视频添加图片水 ...

  5. 网络数据包片段拼合(连续h264片段拼接成完整h264帧)--纠正下,是h264 slice,不是图像帧

    最近项目用的网络摄像头,从网络层获取到连续的h264片段数据,于是写了一个将连续输入数据按 指定字符串分割成一个slice数据的 class, 稍作改动,也可以用来处理 文本文件中查找 替换等等功能, ...

  6. python YUV420视频转图像帧

    YUV420p视频转成多帧图像 import os import cv2 import numpy as np from typing import Listdef YUVvideo2IMGs(fil ...

  7. 密集人体姿态估计:2D图像帧可实时生成UV贴图(附论文)

    Root 编译整理 量子位 出品 | 公众号 QbitAI Facebook人工智能研究院和法国国立计算机及自动化研究院最近提出了一种密集人体姿态估计新方法:DensePose-RCNN,同时宣布即将 ...

  8. 【ROS】ros抽取图像帧

    个人认为最简便的办法. 用ros工具从bag文件中提取图片 1)首先需要安装一些图片处理依赖的包: mjpeg, ffmpeg $ sudo apt-get install mjepgtools $ ...

  9. nalu模式多slice_图像、帧、片、NALU

    图像.帧.片.NALU 是学习 H.264 的人常常感到困惑的一些概念,我在这里对自己的理解做一些阐述,欢迎大家讨论: H.264 是一次概念的革新,它打破常规,完全没有 I 帧.P帧.B 帧的概念, ...

  10. H264—帧,片,参数集,NALU等概念

    h264是一个编码压缩的格式,可以使用x264库进行编码,源码开放,可下载编译使用. --------------------------------------------------------- ...

最新文章

  1. 【C++】Google C++编码规范(一):作用域
  2. s3c6410_u-boot-2010.03移植
  3. css文本框样式收集
  4. ios不响应presentModalViewController界面的处理
  5. java每秒执行一次_Java性能权威指南
  6. 云栖专辑 | 阿里开发者们的第6个感悟:享受折磨
  7. redhat5中架设DHCP服务器与DHCP中继
  8. android view过度动画,为View的切换添加过渡动画
  9. mysql数据库比较,各数据库不同之处
  10. txt文件循环插入固定字符_第02章 文件和用户管理(2)
  11. Spring @Bean @Scope @Qualifier
  12. 关于人工智能你需要了解的事
  13. 硬盘保护卡(增霸卡)的工作原理
  14. python商业爬虫教程_python爬虫课程
  15. 【转】全国最佳医院排名
  16. java将输入的阿拉伯数字金额转换为中文大写金额
  17. WAIC直击:商汤科技展示AI应用落地最新成果
  18. 2022年女性精致美学白皮书
  19. 查看程序集(*.dll)的PublicKeyToken
  20. 帆软report分析报表修改控件样式

热门文章

  1. hdu 4717 The Moving Points(三分)
  2. 【原创】关于nginx.pid丢失的解决办法
  3. nodejs gulp less编辑
  4. Mac Automator小教程,简单易懂
  5. cmd使用conda建立python虚拟环境
  6. [原] MyBatis 整理
  7. LintCode 137. 克隆图
  8. okhttp3.4.1+retrofit2.1.0实现离线缓存
  9. Adobe Flex初记
  10. jqueryEasyui常用代码