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

H.264 是一次概念的革新,它打破常规,完全没有 I 帧、P帧、B 帧的概念,也没有 IDR 帧的概念。对于 H.264 中出现的一些概念从大到小排序依次是:序列、图像、片组、片、NALU、宏块、亚宏块、块、像素。这里有几点值得说明:

(1)、在 H.264 协议中图像是个集合概念,顶场、底场、帧都可以称为图像(本文图像概念时都是集合概念)。因此我们可以知道,对于 H.264 协议来说,我们平常所熟悉的那些称呼,例如:I 帧、P 帧、B 帧等等,实际上都是我们把图像这个概念具体化和细小化了。我们在 H.264 里提到的“帧”通常就是指不分场的图像;(2)、如果不采用 FMO(灵活宏块排序) 机制,则一幅图像只有一个片组;

(3)、如果不使用多个片,则一个片组只有一个片;

(4)、如果不采用 DP(数据分割)机制,则一个片就是一个 NALU,一个 NALU 也就是一个片。

否则,一个片由 三个 NALU 组成(即标准“表7-1”中 nal_unit_type 值为 2、3、4 的三个 NALU 属于 一个片);

2 编码条带数据分割块A  slice_data_partition_a_layer_rbsp( )

3 编码条带数据分割块B slice_data_partition_b_layer_rbsp( )

4 编码条带数据分割块C slice_data_partition_c_layer_rbsp( )

(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 也即非IDR图像有可能全部包含I片。只不过我们平常最常见到的形式是:所有片都是 I 片的图像就是 IDR 图像。其实这个时候 IDR 图像的概念也被我们具体化和细小化了。 但IDR图像必定全部包含I片或SI片,不过只有用NALU的类型才能判断是不是IDR图像

一幅图像由 1~N 个片组组成,而每一个片组又由一个或若干个片组成 一个片由一个NALU或三个NALU(假如有数据分割)组成。图像解码过程中总是按照片进行解码,然后按照片组将解码宏块重组成图像。从这种意义上讲,片实际是最大的解码单元。

一个片又包含哪些类型的宏块呢?

标准“表7-10”做了最好的说明。

一个 I 宏块又分为哪些类型呢?

标准“表7-11”做了最好的说明。

一个 P 宏块又分为哪些类型呢?

标准“表7-13”做了最好的说明。

一个 B 宏块又分为哪些类型呢?

标准“表7-14”做了最好的说明。

一个 P 宏块的亚宏块又分为哪些类型呢?

标准“表7-17”做了最好的说明。

一个 B 宏块的亚宏块又分为哪些类型呢?

标准“表7-18”做了最好的说明。

I帧、B帧、P帧、NALU类型

i帧 i frame,即内部画面 intra picture,通常是GOP的第一个帧(即IDR)I帧是最大去除图像空间冗余信息而压缩得到的帧,自带全部信息,不参考其他帧可独立解码,称为帧内编码帧所有视 ...

Kinect 图像帧的格式

一.ColorImageFormat:彩色图像帧的格式 RawYuvResolution640x480Fps15 原始YUV格式,分辨率是640x480,每秒15帧: RgbResolution128 ...

从零开始一起学习SLAM | 用四元数插值来对齐IMU和图像帧

视觉 Vs. IMU 小白:师兄,好久没见到你了啊,我最近在看IMU(Inertial Measurement Unit,惯性导航单元)相关的东西,正好有问题求助啊 师兄:又遇到啥问题啦? 小白:是这 ...

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

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

opencv2 用imwrite 抽取并保存视频图像帧

最近在写一个车辆检测程序,程序中需要获取图像帧,并保存为图片,且放到指定目录中去,我在网上查了很多发现都是opencv1的有关操作,没有opencv2的操作,我参考网上的例子,结合着用opencv2新 ...

python 视频 图像帧提取

import cv2 vidcap = cv2.VideoCapture('005.avi') success,image = vidcap.read() count = 0 success = Tr ...

X264-视频帧的存取

X264的编码器结构体x264_t中的子结构体字段frames包含了4个临时视频帧序列空间:current.next.unused和reference,分别保存当前编码帧.将编码帧序列.未处理原始视频 ...

H264编码原理以及I帧、B和P帧详解, H264码流结构分析

H264码流结构分析 http://blog.csdn.net/chenchong_219/article/details/37990541 1.码流总体结构: h264的功能分为两层,视频编码层(V ...

H264编码原理以及I帧、B和P帧详解

H264是新一代的编码标准,以高压缩高质量和支持多种网络的流媒体传输著称,在编码方面,我理解的他的理论依据是:参照一段时间内图像的统计结果表明,在相邻几幅图像画面中,一般有差别的像素只有10%以内的点 ...

随机推荐

使用git进行源代码管理

git是一款非常流行的分布式版本控制系统,使用Local Repository追踪代码的修改,通过Push和Pull操作,将代码changes提交到Remote Repository,或从Remote ...

Java Se:自定义ClassLoader

JVM是如何知道java.lang包中的类的?JVM又是如何知道我们应用中的类的?我们的应用中明明是有某个类, 但是JVM却抛出ClassNotFoundException,这是为什么?XxxImpl ...

mybatis写mapper文件注意事项(转)

原文链接:http://wksandy.iteye.com/blog/1443133 xml中某些特殊符号作为内容信息时需要做转义,否则会对文件的合法性和使用造成影响  & ...

Restful风格的简单实现办法

如果实在着急上Restful的URL在项目里 , 可以使用turkey的urlrewrite. 先在web.xml中加入如下代码

RxJava2出现:Unable to create call adapter for io.reactivex.Flowable

前面一直使用的是Rxjava 1.x 版本,最近 Rxjava 2.x 版本发布了,并且支持了背压,便换成了 Rxjava 2.x 版本.更换之后出现了下面的错误. Caused by: java.l ...

Android开机键失灵启动手机的解决办法

问题描述 Android手机的关机键损坏,无法开机. 解决方法 将手机通过USB线链接电脑,进入命令行,找到adb命令所在目录,运行如下命令: adb reboot 注意:用这种方法的前提是,如果你当 ...

Codeforces 660C - Hard Process - [二分+DP]

题目链接:http://codeforces.com/problemset/problem/660/C 题意: 给你一个长度为 $n$ 的 $01$ 串 $a$,记 $f(a)$ 表示其中最长的一段连 ...

Thymeleaf基本用法

1.Thymeleaf简介 官方网站:https://www.thymeleaf.org/index.html Thymeleaf是用来开发Web和独立环境项目的现代服务器端Java模板引擎. 2.特 ...

hdu 4717(三分) The Moving Points

链接:http://acm.hdu.edu.cn/showproblem.php?pid=4717 n个点,给出初始坐标和移动的速度和移动的方向,求在哪一时刻任意两点之间的距离的最大值的最小. 对于最 ...

洛咕 P4474 王者之剑

宝石只能在偶数秒取到,假设有一个宝石在奇数秒取到了,那么上一秒是偶数秒,在上一秒的时候这里的宝石就没了. 相邻的两个宝石不能同时取,很显然,先取一块,那么这是偶数秒,取完了这一块之后相邻的都没了. 只 ...

nalu模式多slice_图像、帧、片、NALU相关推荐

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

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

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

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

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

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

  4. [matlab数字图像处理2]对一张图像进行缩放,观察其分辨率,降低灰度分辨率两种模式,观察图像变化;

    %任务:对一张图像进行缩放,观察其分辨率,降低灰度分辨率两种模式,观察图像变化: %本文使用matlab2021a软件对图像进行处理 clear; clc; close all %首先获取一个灰度图像 ...

  5. nalu模式多slice_H.264中NAL、Slice与frame意思及相互关系

    H.264中NAL.Slice与frame意思及相互关系 NAL nal_unit_type中的1(非IDR图像的编码条带).2(编码条带数据分割块A).3(编码条带数据分割块B).4(编码条带数据分 ...

  6. 流媒体开发中H264编码NALU结构介绍与I帧判断方法

    背景分析 随着互联网基础设施建设的发展,4G/5G/NB-IoT各种网络技术的大规模商用,视频随时随地可看.可控的诉求越来越多,互联网思维.架构和技术引入进传统监控行业里,成为新形势下全终端监控的基础 ...

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

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

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

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

  9. python YUV420视频转图像帧

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

最新文章

  1. DHTML之-----document.selection 的 createRange
  2. 锁相放大器sr830_各位谁会用Stanford SR830啊,我都快被这个锁相放大器折腾死了!!!!-北京搜狐焦点...
  3. Debian 9.6.0 + OpenMediaVault 4.x : U盘作系统盘时遇到的问题
  4. robcad和catia是什么关系_proe/CATIA/UG/SolidWorks软件区别与联系
  5. 集团bim对集团项目服务器,BIM再添一员,五洋建设集团BIM项目组举行成立仪式
  6. SAP License:工程设备采购倒扣备品价
  7. Spring配置XML本地提示:点击eclipse属性——选择XML Catalog
  8. 【博客管理】博客新建栏目的添加—HTML格式书写规范
  9. KNN 分类红酒数据集
  10. win10网络计算机删除,手把手教你彻底删除win10系统自带的微软拼音输入法-网络教程与技术 -亦是美网络...
  11. 深入剖析线程同步工具CountDownLatch原理
  12. 整合xxl-job-admin动态添加xxl-job定时任务
  13. Silverlight 4 - MVVM with Commanding and WCF RIA Services
  14. 【英语学习】关于音标的汇总图分享
  15. Verilog编程规范——reset
  16. 池化方法总结(Pooling) 和卷积 。 第三部分讲的很好
  17. 【案例分享】项目施工进度报告 – 树形报表
  18. Chrome油猴(Tampermonkey)脚本使用及常用脚本分享
  19. Python基于face-alignment实现2D/3D人脸关键点检测
  20. mysql小版本升级补丁操作

热门文章

  1. 轻享 | 极客 CTO 的成长复盘
  2. 从平凡到非凡 阿里云李克的技术进阶之路
  3. 谈判技巧之奇怪的压力
  4. PTA:单继承中的构造函数与析构函数(c++,继承)
  5. Gatling测试工具使用教程(小白初次使用)
  6. 陌陌、米聊、微博、微信看IT人士对交际的重视
  7. 深度学习环境配置指南/YOLOv8目标检测实践
  8. 论CRM与数据库营销
  9. 【IDF】古老的邮件编码
  10. linux中dup2函数,Linux 下的 dup 和 dup2 函数简介