音视频 - 视频编码原理

news2024/11/29 22:37:54

目录

视频编码主要分为

图像的冗余

熵编码

帧内预测

帧间预测

DCT变换和量化

编码器比较

清晰度和耗时对比


        一部电影1080P,帧率25fps,时长2小时,文件大小 1920x1080x1.5x25x2x360 = 521.4G 数据量非常大,对存储和网络传输都有很大压力。因此视频压缩很有必要。

视频编码主要分为

熵编码、预测(帧内、帧间)、DCT变换和量化。

每一帧图像,划分一个个块(宏块)进行编码,大小一般是16x16(h264,vp8),32x32(h265,vp9),64x64(hz65,vp9,av1)

图像的冗余

  • 空间冗余:相邻块很多时候有明显的相似性;
  • 时间冗余:前后帧变化比较小,相似性高;
  • 视觉冗余:人眼对图像的高频信息敏感度小于低频信息,去除高频信息有的时候差别不大;
  • 信息熵冗余:压缩算法

熵编码

        主要去除信息熵冗余。

        如:字符串编码 aaaaabbbbbccccc(15个字节)压缩成5a5b5c(6个字节)  节省9字节空间

        图像也是一样,图像出现较多连续相同的字符,扫描出像素值,最好是很小的像素,比如0 像素,因为0在二进制中只占1位即可(指数哥伦布编码)。

如何做到像素值有很多0呢?

        先减少图像块的空间冗余和时间冗余,在编码的时候进行帧内预测和帧间预测

帧内预测

  1. 在当前编码图像内部已经编码完成的块中找到与将要编码的块相邻的块,一般是即将编码的左边块,上边块左上角块和右上角块。
  2. 将这些块与编码块相邻的像素经过多种不同的算法得到多个不同的预测块
  3. 然后再用编码块减去每个预测块得到一个个残差块
  4. 最后取这些算法得到的残差块中像素的绝对值加起来最小的块为预测块,得到的这个预测块的算法称为帧内预测模式。
  5. 残差块中像素的绝对值之和最小,这个残差块的像素经过扫描之后的“ 像素串”的值比直接扫描编码块的像素串的像素值更接近0

帧间预测

  1. 在前面已经编码完成的图像中,循环遍历每一个块,将它作为预测块。用当前的编码块与这个块做差值,得到残差块,取残差块中像素值的绝对值加起来最小的块为预测块。

        帧间预测的专业术语

  • 预测块所在的已经编码的图像称为参考帧
  • 预测块在参考帧中的坐标值(X0,Y1)与编码块在编码帧中的坐标值(X1,Y1)的差值(X0-X1,Y0-Y1)称为运动矢量
  • 在参考帧中去寻找预测块的过程称之为运动搜索
  • 编码的过程中真正的运动搜索不是一个个块去遍历寻找的,而是有快速的运动搜索算法


        总之通过预测得到的残差块的像素值比编码块的像素值,去除了大部分空间冗余和时间冗余,这样得到的像素值更小 

希望得到出现连续的0像素,如何处理呢?

DCT变换和量化

        将残差块变换到频域,分离图像的高频信息和低频信息,需要将图像块变换到频域。常用的是DCT变换,又叫离散余弦变换。

        变换的每一个像素值我们称为系数,变换块左上角的系数是图像的低频信息,其余的是图像的高频信息。(低频信息表示图像的轮廓,高频信息表示图像的细节)

DCT后低频与高频信息分开,再做之字扫描,前面的就是低频信息,后面就是高频信息。由于人眼对高频信息不太敏感,用过一种手段去除掉大部分高频信息,将大部分高频信息置为0

        将变换块的系数都同时除以一个值QStep(量化步长),得到的结果就是量化后的系数。QStep越大,得到量化后的系数就会越小。高频信息数值相比低频信息系数值更小,量化后更容易变成0。

编码器比较

编码标准块大小帧内编码帧间编码变换熵编码滤波和后处理
H264最大16x16 可划分成8x16 16x8 8x8 4x8 8x4 4x48个方向模式,planar+DC模式中值MVPDCT 4x4/8x8CAVLC,CABAC去块滤波
H265最大支持64X64,四叉树划分33个方向模式,planar+DC模式Merge模式AMVP模式DCT 4x4/8x8/16x16/32x32 DST 4X4CABAC去块滤波 SAO滤波
AV1最大支持128x128,四叉树划分56个方向模式+3个平滑模式+递归FilterIntra模式+色度CFL模式+色度板模式+帧内块拷贝模式OBMC+扭曲运动补偿+高级复合预测+复合帧内预测4x4 - 64x64正方形+1:2/2:1 + 1:4/4:1矩形DCT/ADST/flipADST/IDTX多符号算数编码去块滤波 CDEF LR滤波 Frame超分

标准越新,最大编码块越大,划分方式越多,编码模式越多,压缩效率越高,编码耗时越大。 

清晰度和耗时对比

编码器H264H265AV1
PSNR29.331.232
速度25fps8fps3fps

相同码率下,AV1清晰度稍好于H265,而H264最差,但编码耗时则相反。 

在机器性能比较差的机器上编码,最好选择H264和VP8。如果在新机器上,可以考虑H265,VP9 AV1。

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

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

相关文章

GMC Graph-Based Multi-View Clustering

GMC Graph-Based Multi-View Clustering 基于图的多视图聚类 abstract 现有的大多数方法没有充分考虑不同视图的权重,需要额外的聚类步骤来生成最终的聚类。还通常基于所有视图的固定图相似矩阵来优化目标。 本文提出了一种通用的基于图的多视图聚类算法(GMC)来解…

Android程序设计之学生考勤管理系统

基于安卓平台开发的学生考勤管理系统,本系统采用java语言设计,数据存储使用SQLite轻量级数据库实现 SQLite 简介 SQLite是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite是一个增长最快的数据库引擎&…

JSON 对比工具

文章目录JSON对比工具JSON对比工具 JSON 是 Web 开发领域中最常用的数据传输格式之一,因为 JSON 的可读性较高,对于一些简单的 JSON 数据,我们不需要借助任何工具就可以轻易的读取。但对于复杂的 JSON 数据就需要借助工具才行,本…

公众号文案写作技巧有哪些?教你几招

公众号文案写作是每个公众号运营者心中的痛: 你是否每天纠结写什么? 你是否写着写着就词穷了? 你是否不知道该如何下手? 公众号文案应该怎么写?今天伯乐网络传媒就来给大家分享一份超实用的公众号文案写作技巧&…

增量模型和迭代模型的优点与缺点

增量模型: 举个例子: 用户有一个需求,功能包含A,B,C... ABC 增量模型: 开发完A我就直接上线供给用户去使用 开发完C我就直接上线供给用户去使用 开发完B我就直接上线供给用户去使用 增量模型的特点 增量模型的特点…

度量BGP监测源数量对AS可见性的影响

首先,本文介绍了两个公开的BGP数据源项目情况;其次,从可见AS数量和可见AS边关系数量两个方面来分析度量BGP监测源中对等AS的可见性。 BGP数据源介绍 BGP数据源有2个公开的项目,分别是RIPE RIS和Route Views,它们使用路…

VUE基础编程(三)

案例要求 基于Vue Cli和嵌套路由技术,完成以下功能: 站点打开后会默认显示如图3.1所示的“关于公司”页面,单击图3.1页面上的“公司简介”链接,站点会显示如图3.2所示的“公司简介”页面,单击图3.1页面上的“公司治理…

【JAVA程序设计】基于SSM的学校教务管理系统-有文档

基于SSM的学校教务管理系统-有文档项目获取项目简介开发环境项目技术功能结构文档目录运行截图项目获取 获取方式(点击下载):是云猿实战 项目经过多人测试运行,可以确保100%成功运行。 项目简介 本项目是基于SSM的学校教务管理…

[附源码]java毕业设计校园失物招领平台

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

idea反编译

1、问题描述 只有jar包,反编译下,看几个配置; 2、问题说明 用的idea里面的插件,java Decoplier,可以反编译jar包,效果挺好的,反编译出来的.java没乱码,可以直接看; 2…

139.深度学习分布式计算框架-2

139.1 Spark MLllib MLlib(Machine Learnig lib) 是Spark对常用的机器学习算法的实现库,同时包括相关的测试和数据生成器。MLlib是MLBase一部分,其中MLBase分为四部分:MLlib、MLI、ML Optimizer和MLRuntime。 ML Optimizer会选择它认为最适合…

4款企业常用的工时管理系统盘点

4款企业常用的工时管理系统有:1、Excel;2、8Manage 工时表;3、诺明软件;4、Aceteamwork。 “时间就是金钱”,相信大家都听过这句话。对于企业来说,管理员工工时,其实就是管理企业的人力成本和实…

数据结构-难点突破(C++实现树的双亲表示法,孩子表示法,孩子兄弟表示法(树转化为二叉树))

文章目录1. 树的双亲表示法2. 孩子表示法3. 孩子兄弟表示法(树转化为二叉树)普通树的存储一半采用三种方式: 双亲表示法;孩子表示法;孩子兄弟表示法; 1. 树的双亲表示法 思路和图片来源 采用双亲表示法…

智慧停车解决方案-最新全套文件

智慧停车解决方案-最新全套文件一、建设背景痛点分析二、建设思路准确、安全、可靠、及时性原则统一规划、分布实施保护以往投资、整合现有资源资源共享和整体性、统一性原则可扩展性原则三、建设方案四、获取 - 智慧停车全套最新解决方案合集一、建设背景 痛点分析 随着经济…

stm32cubemx hal学习记录:FreeRTOS事件

一、事件 事件是一种实现任务间通信的机制,主要用于实现多任务间的同步,但事件通信只能是事件类型的通信,无数据传输。与信号量不同的是,它可以实现一对多,多对多的同步。即一个任务可以等待多个事件的发生&#xff1a…

C语言源代码系列-管理系统之机房机位预定系统

往期文章分享点击跳转>《导航贴》- Unity手册,系统实战学习点击跳转>《导航贴》- Android手册,重温移动开发 👉关于作者 众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过…

华为电量分段图表实现过程

以前一直是改的MPAndroidChart,但最近看到华为手机的电池图表发现一旦设计不符合常规图表逻辑实现起来就很困难, 考虑过path相减(areaPath.op(-,- Path.Op.DIFFERENCE))、图像混合(paint.setXfermode)、裁剪区域(clipR…

学生HTML个人网页作业作品下载 动漫主题网页设计制作 大学生个人网站作业模板 dreamweaver简单个人网页制作

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐&#x1…

vue3面试题

文章目录一、vue3有了解过吗?能说说跟vue2的区别吗?1.vue3介绍2.vue3的新特性:2.1速度更快2.2体积更小2.3更易维护2.4更好的Typescript支持2.5编译器重写2.6更接近原生2.7更易使用3.vue3新增特性framentsTeleportcreateRenderercomposition A…

JVM区域划分

概述 JVM在运行代码时,他使用多块内存空间,不同的内存空间用来放不同的数据,然后配合代码流程,让系统运行起来。 存放类加载信息 举个最简单的例子,比如现在知道了JVM会加载类到内存里来供后续运行,所以…