H.264的码率控制算法

H.264的码率控制算法采用了多种技术,其中包括自适应基本单元层(Adaptive Basic Unit Layer)、流量往返模型(Fluid Traffic Model)、线性MAD模型、二次率失真模型等。并且采用了分层码率控制策略,共分为三层:GOP层、帧层和基本单元层。在JVT的提案中,采用的是JVT-G012码率控制算法,该算法提出了基本单元的概念,将一帧划分为若干个基本单元,基本单元可能是一宏块、一行宏块、一场或一帧。帧层码率控制根据网络带宽、缓存占用量、缓存大小及剩余比特来分配每一帧的目标比特;在基本单元层码率控制中,目标比特由该帧的剩余目标比特平均得到。这些技术的采用成功地解决了传统码率控制算法与H.264的率失真优化技术之间存在的因果矛盾,能较准确地控制输出码率,输出视频质量较好。

H.264中的JVT.G012算法采用的二次R—Q模型如下:

        这一模型用于基本单元的量化参数计算,其中R代表编码量化系数所需的码字位数,Q指基本单元的量化步长,MAD通过以下线性预测模型进行预测:

        其中MADcb和MADpb代表当前基本单元和前一帧相应位置处的MAD,a1,a2是模型系数,在每一个基本单元的最后一个宏块处理中通过线性回归的方法进行更新。

        JVT的码率控制比以往的标准更加困难。因为量化参数不仅在码率控制算法中使用而且在率失真优化中应用,从而导致一种称为“鸡与蛋"的悖论(Chicken and Egg Dilemma):为了在当前帧的宏块中应用率失真优化,首先要有一个量化参数,这个量化参数通过计算当前帧的MAD(Mean Absolute Difference)得到。然而,只有在率失真优化以后才能得到当前帧的MAD。并且编码处理所使用的信道带宽可能是恒定的,也可能是可变的。必须同时考虑恒定比特率(Constant Bit Rate,CBR)和可变比特率(Variable Bit Rate,VBR)两种情况。目前的码率控制机制大多针对恒定码率的情况.

        率失真理论是视频编码的一个基本部分。率失真优化(RDO)在给定的码率限制下最小化解码失真,Lagrangian方法可以在码率和失真之间有效地进行折中。在H.264标准中,Lagrangian方法用于运动补偿的模式选择和帧内预测。换言之,它可以在给定的码率限制下,最小化失真,寻找到块的最佳运动向量和编码模式。然而,Lagrangian方法的应用使码率控制变得更困难,因为QP涉及到码率控制和失真计算。换言之,码率控制方案在调整QP后将影响块的运动和模式选择。在MPEG.4码率控制中,可以在估计QP前通过执行二次R—D模型来获得X1,X2、MAD和目标比特数。但在H.264标准中,QP在码率控制和RDO中都指定了,因此在执行RC时就存在一个问题:对MB执行RDO,要先通过MB的MAD决定MB的QP,然而MB的MAD只有在RDO运行后才能获得。这就是一个蛋鸡悖论


如上所述,在H.264标准的码率控制中存在两个问题:
1.在执行RDO之前,MAD是未知的。
2.虽然在运动补偿后可以获得每个编码模式的MAD,但最佳编码模式仍然未知,所以不能决定哪个MAD可以用于估计QP。
Ma等人提出了一个新的H.264码率控制方案,该方案没有考虑QP与MAD之间的相关性,但它不是single—pass码率控制算法。虽然该算法可以实现目标比特数且没有明显的比特变动,但执行RDO要花费2倍的时间,对宏块而言这样的时I司复杂度是不可接受的。

        H.264中的码率控制方法是以提案JVT—G012为蓝本的。JVT.G012提案通过引入基本单元和线形模型的概念,提出一种自适应基本单元层码率控制方案。基本单元可能是一帧、片或宏块。并提出了一种线性模型,通过前一帧相应位置的基本单元预测当前基本单元MAD。为阐述G012提案,本文首先对其中的关键技术进行分析。

1。基本单元的定义

       假设某一帧由Nmbpic个宏块组成,那么定义基本单元为一个由Nmbpic个宏块中连续的Nmbunit个宏块所组成的组。那么在该帧中的总的基本单元的个数为:

Nunit=Nmbpic/Nmbunit

        需要注意的是,如果采用了比较大的基本单元,那么PSNR可以达到一个较高的值,同时比特的波动也会增大。另一方面,如果采用了比较小的基本单元,比特的波动会比较的小,但是相应的会带来PSNR的损失。

2.流量往返模型(Fluid Tramc Model)


3.MAD的线性预测模型
       这里,该算法一个线性模型来预测当前帧中的基本单元的MAD值,它的参

 

 

 

预测模型参数a1和a2更新方法分为三步,如下所述:
      第一步一数据点选择:数据点是用于更新模型参数,数据点的数量以及质量对于模型的准确性有着重要的影响。通常而言,数据点越多,模型越准确。在JM86模型中,采用滑动窗口机制进行数据点的选择,窗口大小通常为20。
      第二步一计算模型参数:根据选中的数据点,算法收集预测的MAD和实际MAD的值,采用线性回归的方法,计算得到a1和a2。
      第三步一去除坏的数据点:在得到al和a2之后,根据滑动窗口中数据点的参考值,用a1和a2形成的预测模型计算数据点的预测值,然后将得到的值与数据点的原始预测值比较,计算误差,如果误差大于一定的值(JM中取误差的均值),则将该数据点去除,用更新后的数据点重新计算模型参数al和a2。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455663.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

消息中间件Client模块划分

上图是之间讨论确定的系统架构(后续内容会按照这个架构来叙述),其中: 客户端包含Producer和Consumer两大块 客户端需要和NameServer交互来获取元数据 客户端需要和Broker交互来读写消息 Client模块划分 1. 网络模块 第一个仍然是…

详解HashMap数据结构实现

HashMap的设计是由数组加链表的符合数据结构,在这里用自己的语言以及结合源码去总结一下,如果有不对的地方希望评论指正,先拱手谢谢。 HashMap是日常中非常常用的一种数据结构,我们要想深入了解学习任何一门技术,都是要…

java web开发学习手册_Java 人必备学习手册开发下载!

今天给大家分享一套 5000 页的 Java 学习手册,新鲜出炉!此手册内容专注 Java技术,包括 JavaWeb,SSM,Linux,Spring Boot,MyBatis,MySQL,Nginx,Git,…

Django初次体验

Django初次体验 关于django的安装,宝宝们可以参考django简介以及安装 Django框架的搭建 在终端中进入需要建立项目的目录 执行: django-admin startproject mysite其中,mysite是项目目录名,可以自定义 我们来看看startprojec…

【LeetCode-面试算法经典-Java实现】【002-Add Two Numbers (单链表表示的两个数相加)】...

【002-Add Two Numbers (单链表表示的两个数相加)】 原题 You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked…

不出现php version网页_php冷知识 - 从命令行参数列表中获取选项

分享一个php的冷知识 - ,从命令行参数列表中获取选项用到的函数是getopt 说明函数签名是这样的getopt ( string $options [, array $longopts [, int &$optind ]] ) : array|bool false解析传入脚本的选项,成功返回数组,解析失败返回fals…

[计算机视觉][神经网络与深度学习]Faster R-CNN配置及其训练教程2

faster-rcnn分为matlab版本和python版本,首先记录弄python版本的环境搭建过程.matlab版本见另一篇:faster-rcnn(testing): ubuntu14.04caffecuda7.5cudnn5.1.3opencv3.0matlabR2014a环境搭建记录 首先,进入官方github网站:https://github.com/rbgirshick/py-faster-…

modbus从站模拟软件_作为工控电气人,你知道我们必备的软件有哪些吗?

作为工控电气人,你知道我们必备的软件有哪些吗?今天我就来给大家介绍一下,工控电气人常用的几款软件,有了它们,我们的工作学习将会更易上手,效率翻倍。以下介绍主要是分为电工常用软件,PLC编程软…

【数据分析】豆瓣电影Top250爬取的数据的可视化分析

豆瓣Top250网址 将之前爬取到的豆瓣电影进行简单的可视化: 数据列表保存为CSV格式,如图 导入数据 做好准备 #!-*- coding:utf-8 -*- import pandas as pd import numpy as np import matplotlib.pylab as plt import re from numpy import rank from bu…

sqlmap的二次开发

1、sqlmapapi的帮助信息。 -s 启动sqlmap作为服务器 -h 指定sqlmap作为服务器的IP地址,默认127.0.0.1 -p 指定sqlmap服务器的端口,默认端口为8775 2、启动服务 浏览器访问: 3、api介绍:sqlmap项目下的api.py文件含有所有的api adm…

docker nginx配置_docker随手笔记第十二节 jenkins+docker+nginx+纯静态页面配置

docker随手笔记第一节 docker概念及安装docker随手笔记第二节 docker常用命令解析docker随手笔记第三节 docker构建java镜像docker随手笔记第四节 docker安装mysql5.7docker随手笔记第五节 docker安装redis4.0docker随手笔记第六节 docker安装jenkinsdocker随手笔记第七节 jenk…

【机器学习】逻辑斯蒂回归原理

逻辑斯蒂函数 引入: 在线性感知器算法中,我们使用了一个f(x)x函数,作为激励函数,而在逻辑斯蒂回归中,我们将会采用sigmoid函数作为激励函数,所以它被称为sigmoid回归也叫对数几率回归(logistic …

手机影音第十一天,显示视频缓冲,显示卡顿时的网速,播放系统视频时调用播放器的选择...

代码已经托管到码云,有兴趣的小伙伴可以下载看看https://git.oschina.net/joy_yuan/MobilePlayer一、设置视频缓冲进度显示视频播放进度的效果图如下:灰色的是缓冲的进度。原理:只有播放网络视频时,才有缓冲这个说法,所…

Django之创建应用以及配置路由

Django之创建应用以及配置路由 配置所有IP都可以访问你的项目 1.进入manage.py同级的my_web里面的settings.py的文件 2.在文件的第28行把ALLOWED_HOSTS []改成ALLOWED_HOSTS [*] 注意:*代表的是所有IP都可以访问 创建一个app应用 在终端中,结束项目…

python中opencv是什么_python-opencv的用法

#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2 # 接收两个参数,一个是文件名,一个值,如果值为1,接收的是彩色图片,如果值为零,接受的是灰度图片。会有一个返回值&#xff0c…

【Tensorflow】卷积神经网络实现艺术风格化通过Vgg16实现

卷积神经网络实现艺术风格化 基于卷积神经网络实现图片风格的迁移,可以用于大学生毕业设计基于python,深度学习,tensorflow卷积神经网络, 通过Vgg16实现,一幅图片内容特征的基础上添加另一幅图片的风格特征从而生成一幅…

抗误码技术

抗误码技术: 视频传输过程中的错误是不可避免的,抗误码技术历来都足视频领域一个研究的热点。H264标准继承r以前视频编码标准中某些优秀的错误恢复工具,同时也改进和创新了多种错误恢复丁具。这些错误恢复的工具主要有:参数集、数…

Linux统计文件行数、字数、字节数

2019独角兽企业重金招聘Python工程师标准>>> 语法:wc [选项] 文件 说明:该命令统计给定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所有指定文件的总统计数。字是由空格字符区分开的最大字符…

【Tensorflow】人脸128个关键点识别基于卷积神经网络实现

引言: 卷积神经网络 卷积神经网络最早是为了解决图像识别的问题,现在也用在时间序列数据和文本数据处理当中,卷积神经网络对于数据特征的提取不用额外进行,在对网络的训练的过程当中,网络会自动提取主要的特征.卷积神经网络直接用原始图像的全部像素作为输入,但是内…

python 爬虫 包_python爬虫学习之路-抓包分析

利用浏览器抓包,是爬虫中的很实用的技能。在爬虫编程之前,我们要对抓取的目标页面有所了解,比如浏览器的这个请求这个页面中间都经历了什么,数据是怎么发送和返回的。 抓包的作用 我把抓包分析的作用简单列一下: 分析请…