自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 问答 (1)
  • 收藏
  • 关注

转载 x264-参数

X264算法参数一(X264线程参数)_CrystalShaw的博客-CSDN博客_x264线程X264算法参数二(VUI参数配置)_CrystalShaw的博客-CSDN博客X264算法参数三(Bitstream parameters)_CrystalShaw的博客-CSDN博客X264算法参数四(analyse parameters)_CrystalShaw的博客-CSDN博客X264算法参数五(码控参数)_CrystalShaw的博客-CSDN博客_码控算法X264算法参数六(动态

2022-03-15 21:27:03 184

转载 x264-1pass和2pass

直观的性能对比:视频序列:crowd_run_1080p50.y4m参数设定:1pass的:time x264 --profile high --preset veryslow --tune film --psnr --ssim --nal-hrd vbr --bitrate 10000 --pass 1 -o 1pass.h264 crowd_run_1080p50.y4m 2pass的:time x264 --profile high -...

2022-03-15 17:31:59 882

转载 x264-VBV(video buffering verifier)

VBV的作用:处理各帧编码后大小不一和恒定输出码率的矛盾。可以将VBV想象成为一个水池,水池的入口连接着encoder的输出,出口为恒定码率的网络输出。为了使得输出恒定,encoder必须保证水池既不上溢也不下溢。上溢会导致数据丢失,下溢会导致无数据输出。所以encoder在编码一帧时会参考当前VBV的充盈情况,并由此计算出,当前帧应该编码出多少bit,从而保证既不会上溢(增加QP)也不会下溢(减少QP)。VBV的参数:bufsize:...

2022-03-15 16:19:28 1049

翻译 x264-几种码控模式

CRF(Constant Rate Factor):转载于:ffmpeg与x264编码指南_暂时为空-CSDN博客_ffmpeg ultrafast该方法在输出文件的大小不太重要的时候,可以使整个文件达到特定的视频质量。该编码模式在单遍编码模式下提供了最大的压缩效率,每一帧可以按照要求的视频质量去获取它需要的比特数。不好的一面是,你不能获取一个特定大小的视频文件,或者说将输出位率控制在特定的大小上。量化比例的范围为0~51,其中0为无损模式,23为缺省值,51可能...

2022-03-15 15:42:12 791

转载 C++多线程知识

C++多线程并发(一)--- 线程创建与管理_流云-CSDN博客_c++ 创建线程浅谈C++中的多线程(一)_Eason_Grace的博客-CSDN博客_c++多线程[c++11]多线程编程(一)——初识 - 简书

2022-03-08 15:55:14 67

转载 lookahead相关贴汇总

x264 lookahead阶段详解 - 十方云山 - 博客园 (cnblogs.com)x264 MB-tree实现细节 - 十方云山 - 博客园 (cnblogs.com)

2022-02-24 10:58:46 125

转载 码率控制相关贴汇总

为了更全面的学习码率控制相关的知识,下面列举了在互联网中搜寻到的一些帖子,如果其他的请留言补充。

2022-02-19 15:17:14 109

原创 H264/AVC SEI和VUI

Supplemental Enhancement Information(SEI)和Video Usability Information(VUI)是可以作为264码流的一部分被传输的参数。SEI和VUI参数可能对解码器有用,但对基本解码过程(basic decoding process)不是必要的。SEI一个SEI信息以SEI RBSP形式传输,每个SEI信息作为一个独立的NALU发送。下面是一些SEI信息。VUIVUI信息在PPS的可选结构中传输,VUI参数语法结构包含标志和参数,具

2022-02-17 15:00:41 1611

原创 H264/AVC 数据的传输

RBSP、NALU和packet封装(encapsulation)264的语法元素被封装到Raw Byte Sequence Payload(RBSP)中,然后被封装到Network Abstraction Layer Units(NALU)中。下图显示了已编码slice、SPS和PPS的语法元素序列。语法元素的形式是长度不同的二进制码流,长度可能是字节的整数倍,也可能不是字节的整数倍。必要时会在RBSP末尾添加一系列0,以保证长度是字节的整数倍。RBSP封装在NALU中,通过(1)添加一个1字

2022-02-16 23:29:40 1268

原创 H264/AVC 用于传输的编码工具

考虑到H.264的大多数应用都涉及到对压缩比特流的通信或存储,该标准指定了许多旨在支持高效和健壮传输的特性或工具。Baseline和Extended Profiles支持Redundant Slice、Arbitrary Slice Order和Flexible Macroblock Order;Extended Profiles支持Data Partitioned Slice、SI Slice和SP Slice。值得注意的是,这些特性还没有被商业H.264/AVC编解码器广泛采用,大多数编解码器倾向于使用

2022-02-15 18:05:11 814

原创 H264/AVC Conformance testing

旨在验证编码的码流和解码器是否符合H.264/AVC要求。1. 验证码流是否符合要求方法比较直接:使用参考软件JM去解码。如果码流有问题,那么解码器就会输出错误信息。2. 验证解码器是否符合要求解码器应该能够解码在profile和level设定下的任何码流。检查解码器是否符合264的要求可以通过让其解码一组Conformance Test Bitstreams来进行。符合标准的解码器应该能够获取正确的视频序列(帧/场的顺序正确,输出帧之间有正确的时序关系)。...

2022-02-13 20:27:52 1065

原创 H264/AVC Hypothetical Reference Decoder(HRD)

除了确保解码器能够处理264码流中的语法元素和序列参数外,确保编码序列“符合”解码器缓冲和处理能力的限制也很重要。这是通过定义HRD来处理的,HRD是一种虚拟缓冲算法,可以用来测试编码码流的行为以及其对真实解码器的影响。先看一下264的编解码过程:视频帧被编码以产生码流,该码流在传输前被缓冲。当一个帧n被编码时,编码缓冲器被bn个编码比特填充。编码器缓冲器以传输通道的速率(每秒rc个比特)清空。从信道中到达的比特以每秒rc个比特的速度填充编码图像缓冲区(CPB)。解码器从CPB中解码帧,并将解码

2022-02-13 17:06:35 2514 2

原创 H264/AVC Profile和Level

Profile对解码器设置算法约束,确定解码器应该能够处理哪些解码工具。Level对解码器设置数据处理和存储约束,决定解码器应该能够存储、处理和输出多少数据。一个H.264解码器可以通过提取profile和level参数,从而确定解码器的能力是否支持这些参数,进而确定它是否能够解码某个特定的流。Profile264规定了一系列profile,每个profile都指定了264可用的编码工具的一个子集。profile限制了264解码器所需的算法。因此,符合264 Main Profile的解码器

2022-02-13 16:03:08 1531

原创 H264/AVC 宏块层

宏块层(macroblock layer)包含解码单个宏块所需的所有语法元素,见下图:mb_type:表示宏块编码类型,I, SI, P或B,以及关于宏块预测和编码的进一步信息(例如尺寸)。I宏块可以出现在任何片类型中,并且在编码时不引用任何其他片。SI宏块仅在SI片中出现。P宏块可以出现在P或SP片中,并利用一个预测参考进行帧间编码。B宏块出现在B片中,并利用一个或两个预测参考进行帧间编码。注:对于P或B片中的skip宏块,并不传输mbtype,当在片数据层中提示skip宏块时,这些宏块的mb_.

2022-02-12 22:04:42 550

原创 H264/AVC Parameter Sets的激活

一个参数集在被激活之前是‘inactive’的,即它的参数不被解码器使用。先前传送给解码器的PPS,当它在一个片头中被引用时被激活(视频序列中的每个编码切片可以引用/激活若干PPS中的一个),并且一直保持激活状态,直到另一个不同的PPS被激活。当引用SPS的PPS时,SPS被激活。一个单独的SPS在整个编码的视频序列中保持激活状态,由于序列必须从一个IDR访问单元开始,因此一个SPS会被一个IDR片有效地激活。...

2022-02-11 21:17:05 254

原创 H264/AVC 解码 帧间预测

码流进入解码器,先后通过“获取MV和参考索引操作”和“帧间预测像素解码操作”得到帧间预测像素矩阵,包括1个16×16的亮度矩阵和2个8×8的色度矩阵。获取MV和参考索引操作这时候的码流中的数据是mbPartIdx和subMbPartIdx,经过“获取MV和参考帧索引操作”后输出的数据是mvL0、mvL1、mvCL0、mvCL1、refIdxL0、refIdxL1、predFlagL0和predFlagL1。1. 当宏块为普通类型时,计算mvL0/1使用的公式和流程如下:mvL0/1[0/1]

2022-02-11 17:43:31 854

原创 H264/AVC 解码 帧内预测

在帧内预测中,当前编码的宏块上方及左侧的宏块用于计算出当前宏块的预测值。当前宏块与其预测值的差值将进一步编码并传输到解码器。解码器利用码流中用于表示预测方式和预测残差的bits来解出当前宏块的预测值。此外,264提供了PCM编码模式,即码流中传输的就是像素值,解码器只负责接收就可以,没有其他计算。264提供了四种帧内预测方式:分别是4×4亮度块的帧内预测、16×16亮度块的帧内预测、8×8色度块的帧内预测和PCM帧内预测模式。4×4亮度块预测解码4×4亮度块一共有8种帧内预测角度+1个DC预测,

2022-02-11 16:23:30 501

原创 H264/AVC 片数据分割的解码

(似懂非懂,需要回顾)解码器根据一个片的A 型数据分割RBSP,如NAL类型为3或4时,还有一个属于同一片的B型数据分割RBSP或C型数据分割RBSP,来产生一个完整的编码片。当不使用片数据分割时,编码片仅有一个片层,没有数据分割RBSP。分割RBSP包含一个片头,后跟包含了片中宏块数据的分类2、3、4 语法元素的一个片数据语法结构。当使用片数据分割时,片中的宏块数据分割成1到3个分割并位于单独的NAL单元中。分割A包括一个片数据分割A头部和所有的第2类语法元素。分割B包括一个片数据分割B头

2022-02-10 20:36:46 250

原创 H264/AVC 宏块片组映射图的产生

(这一届内容不太友好,没看懂,后面会回顾重新理解)解码器在对每个片解码之前,首先需要基于当前有效图像参数集和需解码的片头,产生“宏块片组映射图”变量MbToSliceGroupMap,该变量对于一个接入单元中的所有片均有效。当num_slice_groups_minus1等于1而且slice_group_map_type等于3、4或5时,片组0和1的大小和形状根据下表由“片组变化方向标记”slice_group_change_direction_flag确定。按照定义的增长顺序的片组图单元Map

2022-02-10 20:31:53 510

原创 H264/AVC 解码时POC的计算

POC用于标识图像的播放顺序,同时还用于在对帧间预测片解码时,标记参考图像的初始图象序号,表明下列情况下帧或场之间的图像序号差别:使用直接预测模式的运动矢量推算时;B片中使用固有模式加权预测时;解码器一致性检查时。264对每个编码帧有两个图像序列号,分别成为顶场序列号(TopFieldOrderCnt)和底场序列号(BottomFieldOrderCnt)。这两个序列号分别指明了相应的顶场/底场相对于前一个IDR图像(或解码顺序中前一个包含memory_management_control_operat

2022-02-09 22:41:43 958

原创 H264/AVC NAL单元和解码

在264中,NAL是以NALU(NAL unit)为单元来支持编码数据在基于包交换技术网络中的传输的;它定义了符合传输层或存储介质需求的数据格式,同时提供头信息,从而提供了视频编码与外部世界的接口。网络层和传输层的RTP封装只针对基于NAL单元的本地NAL接口,且每个NAL单元都只包含整数个字节。NAL单元结构一个NAL单元定义了可用于基于包和基于比特流系统的基本格式,区别这两种格式的方法在于每个比特流传输层都有一个起始代码。在NAL解码器接口,它假定按传输顺序传递NALU,同时,在NALU的头部设

2022-02-09 16:14:56 1672

原创 H264/AVC 解码器原理

264包括VCL(视频编码层)和NAL(网络提取层),VCL包括核心压缩引擎和块、宏块和片的语法级别定义,它的设计目标是尽可能地独立于网络进行高效编码;NAL则负责将VCL产生的比特字符串适配到各种各样地网络和多元环境中,它覆盖了所有片级别以上的语法级别,同时支持以下功能:支持独立片解码;起始码唯一保证;支持SEI;支持流格式编码数据传送。总体来说,NAL解码器负责将符合264规范的压缩视频流解码,并进行图像重建。大致流程为:从NAL中接受压缩的比特流,经过对码流进行熵解码获得一系列量化参数X;这些系数

2022-02-09 15:53:46 653

原创 H264/AVC 句法

在编码器输出的码流中,数据的基本单位是句法元素,每个句法元素由若干比特构成,它表示某个特定的物理意义,例如:宏块类型、量化参数等。句法表示句法元素的组织结构。句法元素的分层结构码流是由一个个句法元素依次衔接组成的,码流中除了句法元素并不存在专门用于控制或同步的内容。264中,句法元素被组织成有层次地结构,分别描述各个层次的信息,如下所示:264中,句法元素共被组织成序列、图像、片、宏块、子宏块五个层次。句法元素的分层结构有助于节省码流(例如将不同片的公共信息抽取出来,形成图像一级的句法元素,

2022-02-09 15:19:20 379

原创 H264/AVC 数据分割片和传输

数据分割片组成片的编码数据存放在3个独立的DP(数据分割,A、B、C)中,各自包含一个编码片的子集。分割A包含片头和片中每个宏块头数据。分割B包含帧内和SI片宏块的编码残差数据。分割C包含帧间宏块的编码残差数据。每个分割可放在独立的NAL单元并独立传输。由A、B和C中的数据可知A是很重要的,即A对传输误差很敏感。解码器可以按着要求仅解码A和B或者A和C,以降低在一定传输条件下的复杂度。传输264的编码视频序列包括一系列NAL单元,每个NAL单元包含一个RBSP...

2022-02-08 21:06:51 464

原创 H264/AVC 参考图像管理

264中,已编码图像存储在编码器和解码器的参考缓冲区(DPB,解码图像缓冲区),并由相应的参考图像列表list0,以供帧间宏块的运动补偿预测使用。对B片预测而言,list0包含当前图像的前面和后面两个方向的图像,并以显示测序排列。也可同时包含短期和长期参考图像,短期参考图像由帧号标定,长期参考图像由LongTermPicNum标定,保存在DPB中,直到被代替或删除。当一幅图像在编码器被编码重建或在解码器被解码时,它存放在DPB并标定为以下中的一种:1)“非参考”,不用于进...

2022-02-08 20:50:36 1117

原创 H264/AVC 码率控制

春节快乐呀,前面种种原因停更了一段时间,现在继续看看书。264仅规定了编码后bit stream的句法结构和解码器的结构,对于编码器的结构和实现模式没有具体的规定。在进行压缩编码时,编码器通过相应的编码控制算法已确定各种编码模式,如宏块的划分类型、运动矢量以及量化参数等,已选定的各种编码模式进一步确定了编码器输出比特流的比特率和失真度。264采用基于Lagrangian优化算法的编码控制模型,其编码性能相较于以往的所有编码标准有了重大提高。视频编码...

2022-02-08 20:38:27 548

原创 H264/AVC SP/SI的基本原理

从SP/SI的应用可知,SP帧分为主SP帧(Primary SP-Frame)和辅SP帧(Secondary SP-Frame)。其中,前者的参考帧和当前编码帧同属于一个码流,而后者则不属于同一个码流。如下图所示,主SP帧作为切换插入点,不切换时,码流进行正常的编码传输;而切换时,辅SP帧取代主SP帧进行传输。其中,Δ表示编码器的输入;⚪表示解码器的输出。由图可知,解码出来的是B2,而非辅SP。 下面描述SP帧实现的功能原理。SI帧的功能实现与SP帧相类似,都能恢复出...

2022-01-11 23:31:19 857

原创 H264/AVC SP/SI的应用

SP和SI是干什么的为了顺应视频流的带宽自适应性和抗误码性能的要求,定义了SP帧和SI帧。SP帧编码的基本原理同P帧类似,两者的差异在于SP帧能够参考不同参考帧重构出相同的图像帧。(要注意这里并不是说的单向多参考帧)充分利用这一特性,SP帧可取代I帧,广泛应用于流间切换(bitstream switching)、拼接(splicing)、随机接入(random access)、快进快速(fast forward,fast backward)和错误恢复(error recovery)等应用中,同时大大

2022-01-10 12:08:23 737

原创 H264/AVC 档次

时隔很久,终于有时间再看一看264了,这次了解一下“档次”的概念。264支持三个不同档次,分别为:基本档次:主要用于“视频会话”,如会议电视,可视电话,远程医疗,远程教学; 扩展档次:主要用于网络的视频流,如视频点播; 主要档次:主要用于消费电子应用,如数字电视广播,数字视频存储。264中的每一种档次支持一组特性的编码功能,并支持一类特定的应用。基本档次:利用I和P Slice支持帧内和帧间编码,支持利用基于上下文的自适应变长编码进行熵编码(CAVLC); 扩展档次:支持码流之间的有效切

2022-01-10 10:50:57 271

原创 CS:APP/深入理解计算机系统-第三章(3.1~3.2)

程序的机器级表示汇编代码是机器代码的文本表示,给出程序中的每一条指令。然后GCC 调用汇编器和链接器,根据汇编代码生成可执行的机器代码。通常情况下,使用现代的优化编译器产生的代码至少与一个熟练的汇编语言程序员手工编写的代码一样有效。最大的优点是,用高级语言编写的程序可以在很多不同的机器上编译和执行,而汇编代码则是与特定机器密切相关的。1. 机器级代码计算机系统使用了多种不同形式的抽象,利用更简单的抽象模型来隐藏实现的细节。对于机器级编程来说,其中两种抽象尤为重要。第一种是由指令集体系结构

2021-10-26 12:03:31 423

原创 CS:APP/深入理解计算机系统-第二章(2.4)

本节主要介绍浮点数。2.4.1 二进制小数首先看看十进制小数的数学表示形式:这里每个d都是一个0~9的十进制数,i是正还是负取决于d在小数点左边还是右边。那么尝试使用这种数学表示形式来使用二进制表示小数:b代表0或1的二进制数,i是正还是负取决于b在小数点左边还是右边。表示为假设我们仅考虑有限长度的编码,那么十进制表示法不能准确表达例如这种数。类似,小数的二进制表示法只能表示那些能够被携程的数。其他的值只能够被近似地表示。例如,数字可以用十进制小数0....

2021-10-23 16:56:10 93

原创 CS:APP/深入理解计算机系统-第二章(2.3)

2.3节主要是介绍整数运算,在写代码的时候可能会遇见整数相加得出一个负数、x<y和x-y<0的结果不一致的现象。这是由于计算机运算的有限性导致的,本节可以帮助理解。2.3.1 无符号加法考虑两个非负整数x 和y, 满足 。每个数都能表示为位无符号数字。然而,如果计算它们的和,我们就有一个可能的范围。表示这个和可能需要位。然而一般来说,编程语言支持的是固定精度的运算,因此计算机上的“加法”和“乘法”这样的运算不用于它们在整数上的相应运算。计算机上的无符号加法的定义是:假设有两个数x

2021-10-23 12:14:54 173

原创 CS:APP/深入理解计算机系统-第二章(2.2)

2.2.1 整型数据类型以C语言为例,32和64位程序的不同类型的整型数据取值范围如下所示:(32bit)(64bit)2.2.2 无符号数的编码无符号数的表示有一个很重要的属性:介于0~-1之间的数有一个唯一的w位的值编码。例如,有一个无符号的十进制数11,有一个4位的二进制表示,即1011。2.2.3 补码编码计算机中使用补码表示负数。对于补码来说,二进制表示中的最高有效位叫做符号位,0表示正数,1表示负数,例如,0001表示1,0101表示5,1011表示...

2021-10-22 21:59:04 74

原创 CS:APP/深入理解计算机系统-第二章(2.1)

学习本章的意义可以用这么一句话概括:to write programs that work correctly over the full range of numeric values and that are portable across different combinations of machine, operating system, and compiler.2.1 Information Storage计算机使用1个byte或者8个bit作为最小的可寻址内存单元。一个machi

2021-10-17 22:23:07 120

原创 H.264/AVC 变换量化

先说一句,在传统的混合编码框架中,预测和变换是不会产生失真的,只有量化才会导致失真。貌似264没有把变换和量化分的很清楚,没有特别明显的界限感,下面实际看看。264的basic transform或者说是core transform是4x4或者8x8的整数变换,是DCT的近似。...

2021-10-16 21:30:34 328

原创 H.264/AVC 环路滤波

今天看看264的滤波。和265、266比起来,264只有一个DBF,看看有没有有意思的地方。264的滤波位置与265和266相同。具体的处理方式和265有区别:265是以8x8的块为基础,264是以宏块中的4x4块为基础。Filtering is applied to vertical or horizontal edges of 4x4 blocks in a macroblock excluding edges on slice boundaries, in the following

2021-10-15 11:07:10 299

原创 H.264/AVC 帧间预测

首先介绍一下帧间的划分264的帧间预测块尺寸包含了16x16到4x4。每个宏块(16x16)可以使用4种方式进行划分:1个16x16,2个16x8,2个8x16,4个8x8,叫做宏块划分。在8x8的情况下,子宏块还可以继续划分:1个8x8,2个4x8,2个8x4,4个4x4,叫做子宏块划分。上述划分方式的简单示意图如下:上述划分描述的是亮度分量,对于色度分量来说,色度块的尺寸是亮度块的一半,且色度块的划分方式和亮度块相同。每个宏块划分和子宏块划分都有一个或两个MV(P/B),每.

2021-10-12 22:33:45 769 2

原创 H.264/AVC 帧内预测

u1s1,和265、266比起来,264的帧内预测真滴朴实无华在帧内预测模式中,预测块P是基于已编码重建块和当前块形成的。对亮度像素而言,P块用于4x4子块或者16x16宏块的相关操作。4x4亮度子块有9种可选预测模式,独立预测每一个4×4亮度子块,适用于带有大量细节的图像编码;16×16 亮度块有4 种预测模式,预测整个16×16 亮度块,适用于平坦区域图像编码;色度块也有4 种预测模式,类似于16×16 亮度块预测模式。还有一种帧内编码模式称为I_PCM 编码模式。该模式下,编码器直接传输图像

2021-10-11 21:35:35 541

原创 H.264/AVC 片——slice

一帧视频可以编码成一个或多个片slice,每个slice包含有一个或多个宏块MB(最多时一个slice包含整帧的宏块)。设置slice的目的是为了限制误码的扩散和传输(怪不得搞编码速度/性能的paper大都不考虑多个slice,只考虑一帧只有一个slice,因为这些paper不会考虑出现误码的情况),使得每个slice之间是相互独立的,不能互相作为预测时的参考。slice的结构如下图所示:slice头用于确定slice的类型、slice的参考帧以及slice属于哪帧图像slice数据..

2021-10-11 20:57:59 1036

原创 H.264/AVC的编码格式

H.264具有良好的网络亲和性,可适用于各种传输网络H.264包含视频编码层(Video Coding Layer,VCL)和网络抽象层(Network Abstraction Layer,NAL)VCL数据就是编码的输出,它表示被压缩编码后的视频数据序列。在VCL数据传输或存储之前,这些编码的VCL数据先被映射或封装进NAL单元里。每个NAL单元包括一个原始字节序列负荷(RBSP)和一组对应于视频编码数据的NAL头信息,NAL的结构如下图所示:...

2021-10-11 19:57:15 783

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除