视频 码率控制类型和内涵
在做视频编码时,当我们给编码器设定一个目标码率的时候,编码器内部是怎么达到码率要求的呢 ?
编码器如何合理分配码率,以获得更高的视频质量 ?
这都是码率控制的问题。
x264的码率控制分为帧间级和帧内级,本文介绍帧间级各种码率控制类型,其内涵和使用方法。
1 目的和意义:
码率控制有两个目的
- 兼容传输、播放条件
- 更高的视频质量
1.1 兼容传输、播放条件
视频编码中,越高的码率通常可以产生更高的质量。同时,保持一定质量的情况下,不同复杂度场景需要的码率是不一样的。
如果不进行码率控制,视频的码率会不可控制。下图是对一段40s的视频,采用固定量化参数(也就是没有码率控制)编码后的瞬时码率分布。
可以看到,码率的波动很大。这对于传输是不利的。码率控制通过调节编码参数,控制单位时间内的编码视频流的数据量,以使产生的比特流符合各种应用的需求。
【图1】固定量化参数,码率分布
1.2 更高的视频质量
在满足码率要求的前提下,码率控制的另一个目标是更高的视频质量。
如何通过在帧间以及帧内合理分配比特,实现率失真性能优化,是码率控制研究的问题。
2. 分类
码率控制可以分为两类:
- CBR : constant bit rate, 固定码率
- VBR: variable bit rate, 可变码率
2.2 恒定码率模式
图2是第一节中同样视频用CBR模式编码得到的码率分布图。
可以看到它的码率波动比图1小。
恒定码率不代表每个瞬间的码率都一样,实际上那是不可能的。恒定码率模式究竟是什么原理,我们在下文会详细展开。
【图2】恒定码率
使用固定码率会损害视频质量,但对传输有好处。
2.3 可变码率模式
可变码率是一类码率控制算法的统称,它们的特点是局部的码率是可变的。 常用的可变码率子类包括:
- abr : average bit rate, 平均码率。
局部码率是可变的,限制整个文件的的评价码率。 - crf: constant refactor, 恒定质量
把某个恒定的“质量”作为目标,灵活分配码率,最终的码率大小是不确定的。 - cqp: constant qp: 恒定量化参数
采用固定的qp, 相当于没有码率控制
3. 恒定码率 CBR 的内涵
恒定码率模式有点tricky,容易导致误解。
- 它不代表每个瞬间码率相同。这是不可能的,由于I帧,P帧和B帧体积相差巨大。
- 它也不代表每一秒(或者某个时间窗口)码率相同。实际上,如图2所见,每一秒的数据量是不同的。
- CBR 的 “固定码率”, 指的是固定 “信道容量”。 码率控制的目标是,在用恒定的速率传输码流,播放器的接收缓存不会上溢,也不会下溢。
3.1 vbv 模型
CBR 码率控制算法是针对缓冲区校验模型的。
区校验模型是视频编码标准的重要组成部分,是用来验证编码码流是否符合标准的重要工具。
在 MPEG系列标准中缓冲区模型常称 VBV ( Video Bu Verifier ) , 即视频缓冲区校验器,在 H.26x系列标准中,该部分称 HRD ( Hypothetical Reference Decoder) ,即假想参考解码器。
vbv 模型假想编码码率通过一个容量受限的信道传输到解码设备,解码设备在解码前有一个缓存。解码器实时从缓存区取数据解码。vbv必须保证缓存区不上溢,也不下溢。
解码器的缓存可以理解成一个水池,如下图所示。水池的输入速度是恒定的,也就是设定的码率。水池的输出的不恒定的,是视频的实际瞬时码率。
缓存区的存在使得视频的瞬时码率可以在一定范围内波动。
但是,如果视频实际瞬时码率过大,从缓存区取数据的速度就会大于填数据的速度,这是缓冲区有可能就被取空了,这叫做缓冲区的下溢。
相反,如果视频实际瞬时码率过小,从缓存区取数据的速度就会小于填数据的速度,这是缓冲区有可能就会溢出,这叫做缓冲区的上溢。
不难理解,vbv 能容忍的最大码率波动和缓冲区的大小,以及缓冲区初始充盈程度有关。
3.2 vbv 参数的设置方法
在x264中, vbv 有两个参数可以设置,分别是:
---vbv-maxrate, 设置缓冲区最大填入速度。
---vbv-bufsize , 设置缓冲区大小。
例子:
假设设置maxrate= 1M, bufsize = 2M, 缓冲区初始是充盈的。假设某时峰值率是2M, 那么能容忍的峰值的最大长度为 2M/(2M-1M) = 2s
假设某时峰值率是3M, 那么能容忍的峰值的最大长度为 2M/(3M-1M) = 2s
假设某时峰值率是11M, 那么能容忍的峰值的最大长度为 2M/(11M-1M) =0.1s
也就是说,计算设置最大码率为1M, 也能容忍很高的码率峰值。越高的峰值,能容忍的时长越短。
效果:
bufsize 越大,码率波动空间越大 → 视频质量越好。
bufsize 越大,播放延时越大。 延时 delay = bufsize / maxrate。 (假设需要等缓冲区填满才开始播放)
bufsize设置的大小取决于容忍的延时以及播放器的硬件内存限制。
足够长的时间里,总码率 约等于 maxrate * 时间。
4. 可变码率 VBR 的类型和内涵
- abr 平均码率,控制的目标是整个文件的平均码率
2 pass : 两趟编码,根据第一趟的实际码率,估计每一帧复杂度
1 pass : 一趟编码, 根据已编码的邻近帧,估计正在编的帧的复杂度 - crf
恒定质量: 控制一个恒定的“质量”,总码率不可控。 - cqp
恒定qp: 恒定量化参数,关闭一切码率控制算法。cqp 和crf 的区别是,crf 允许x264对每一帧,每一宏块灵活选取qp, 通过对视觉感知特点的运用,产生一个恒定的“质量”。
视频 码率控制类型和内涵相关推荐
- MediaInfo+c#获取视频码率
MediaInfo,简介我不重复了,我使用的方式主要是在项目中引用其dll来查看视频的码率. MediaInfl带有How to user的c# sample,使用时注意要将MediaInfo的dll ...
- 视频码率,帧率和分辨率的区别
视频码率,帧率和分辨率到底哪一个影响电影的清晰度 码率(bit 率):影响体积,与体积成正比:码率越大,体积越大:码率越小,体积越小. 码率就是数据传输时单位时间传送的数据位数,一般我们用的单位是kb ...
- 视频码率[百科词条]
视频码率 编辑 视频码率就是数据传输时单位时间传送的数据位数,一般我们用的单位是kbps即千位每秒. 中文名 视频码率 定 义 数据传输单位时间传送的数据位数 单 位 kbps即千位每秒 ...
- 视频码率,帧率和分辨率
视频码率,帧率和分辨率到底哪一个影响电影的清晰度 码率:影响体积,与体积成正比:码率越大,体积越大:码率越小,体积越小. 码率就是数据传输时单位时间传送的数据位数,一般我们用的单位是kbps即千位每秒 ...
- 【视频码率相关笔记】
码率是指视频文件在单位时间内使用的数据流量,是视频编码中画面质量控制中最重要的部分,一般用的单位是kbps.码率并不是越高越好,因为码率高到一定极限之后,人眼就很难辨别出更好的画质了,但是视频的体积会 ...
- 视频码率(Bitrate),帧率(FPS)和分辨率的联系与区别
一.视频码率 码率就是数据传输时单位时间传送的数据位数,一般我们用的单位是kbps即千位每秒.也就是取样率(并不等同与采样率,采样率的单位是Hz,表示每秒采样的次数),单位时间内取样率越大,精度就越高 ...
- 音视频码率,采样率,帧率基础知识
音视频码率,采样率,帧率基础知识 简单来讲,采样率和比特率就像是坐标轴上的横纵坐标. 横坐标的采样率表示了每秒钟的采样次数. 纵坐标的比特率表示了用数字量来量化模拟量的时候的精度(在计算机里面占几个 ...
- 3GPP: IMS视频码率自适应调整介绍
3GPP即第三代合作计划,是权威的3G技术规范机构.3GPP成立时的目标是实现由2G网络到3G网络的平滑过渡,保证未来技术的后向兼容性,支持轻松建网及系统间的漫游和兼容性. 其职能: 3GPP主要是制 ...
- 【ffmpeg】生成的视频码率显示N/A或者0kb?
cv::Mat转 yuv时 ,写入本地视频H264,生成的视频码率显示N/A或者0, 解决办法:设置GOP size大小 c->codec = codec;c->gop_size = 50 ...
- 视频码率 - Bitrate
视频码率编辑 视频码率就是数据传输时单位时间传送的数据位数,一般我们用的单位是kbps即千位每秒. 中文名 视频码率 定 义 数据传输单位时间传送的数据位数 单 位 kbps即千位每秒 分 ...
最新文章
- JSP显示页面和数据库乱码
- 《Agile Impressions》作者问答录
- mysql导入csv大数据
- java ndk 在哪_NDK简介
- 计算机存有多少游戏,8G和16G的计算机内存之间有很大区别吗?玩游戏需要多少内存?...
- android studio Cmake undefine func
- [Ext JS ] 7.25.1 Form或者面板自动定位到错误的输入框
- Arch Linux配置gnome桌面
- 超强的照片无损放大修复工具 SmartDeblur模糊照片变清晰工具
- Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificat
- 【ARM】程序快速定位segmentation fault core dumped错误
- 怎么用python画房子_用python画一个小房子
- 微信小程序毕业设计题目音乐播放器+后台管理系统|前后分离VUE.js
- 一种简单的色彩平衡算法的OPENCV实现
- java实现PEKS_JAVA线程基础
- 用IE浏览器打开vsd文件
- Luogu P2245 星际导航
- 芯片测试术语 ,片内测试(BIST),ATE测试
- 1:MOST: A Multi-Oriented Scene Text Detector with Localization Refinement
- java se的命令文件_Java SE的命令文件(java、javac、javadoc等)所在目录是___