音视频 — 视频编码原理
目录
视频编码主要分为
图像的冗余
熵编码
帧内预测
帧间预测
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呢?
先减少图像块的空间冗余和时间冗余,在编码的时候进行帧内预测和帧间预测。
帧内预测
- 在当前编码图像内部已经编码完成的块中找到与将要编码的块相邻的块,一般是即将编码的左边块,上边块左上角块和右上角块。
- 将这些块与编码块相邻的像素经过多种不同的算法得到多个不同的预测块。
- 然后再用编码块减去每个预测块得到一个个残差块。
- 最后取这些算法得到的残差块中像素的绝对值加起来最小的块为预测块,得到的这个预测块的算法称为帧内预测模式。
- 残差块中像素的绝对值之和最小,这个残差块的像素经过扫描之后的“ 像素串”的值比直接扫描编码块的像素串的像素值更接近0
帧间预测
- 在前面已经编码完成的图像中,循环遍历每一个块,将它作为预测块。用当前的编码块与这个块做差值,得到残差块,取残差块中像素值的绝对值加起来最小的块为预测块。
帧间预测的专业术语
- 预测块所在的已经编码的图像称为参考帧
- 预测块在参考帧中的坐标值(X0,Y1)与编码块在编码帧中的坐标值(X1,Y1)的差值(X0-X1,Y0-Y1)称为运动矢量。
- 在参考帧中去寻找预测块的过程称之为运动搜索。
- 编码的过程中真正的运动搜索不是一个个块去遍历寻找的,而是有快速的运动搜索算法。
总之通过预测得到的残差块的像素值比编码块的像素值,去除了大部分空间冗余和时间冗余,这样得到的像素值更小
希望得到出现连续的0像素,如何处理呢?
DCT变换和量化
将残差块变换到频域,分离图像的高频信息和低频信息,需要将图像块变换到频域。常用的是DCT变换,又叫离散余弦变换。
变换的每一个像素值我们称为系数,变换块左上角的系数是图像的低频信息,其余的是图像的高频信息。(低频信息表示图像的轮廓,高频信息表示图像的细节)
DCT后低频与高频信息分开,再做之字扫描,前面的就是低频信息,后面就是高频信息。由于人眼对高频信息不太敏感,用过一种手段去除掉大部分高频信息,将大部分高频信息置为0
将变换块的系数都同时除以一个值QStep(量化步长),得到的结果就是量化后的系数。QStep越大,得到量化后的系数就会越小。高频信息数值相比低频信息系数值更小,量化后更容易变成0。
编码器比较
编码标准 | 块大小 | 帧内编码 | 帧间编码 | 变换 | 熵编码 | 滤波和后处理 |
H264 | 最大16x16 可划分成8x16 16x8 8x8 4x8 8x4 4x4 | 8个方向模式,planar+DC模式 | 中值MVP | DCT 4x4/8x8 | CAVLC,CABAC | 去块滤波 |
H265 | 最大支持64X64,四叉树划分 | 33个方向模式,planar+DC模式 | Merge模式AMVP模式 | DCT 4x4/8x8/16x16/32x32 DST 4X4 | CABAC | 去块滤波 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超分 |
标准越新,最大编码块越大,划分方式越多,编码模式越多,压缩效率越高,编码耗时越大。
清晰度和耗时对比
编码器 | H264 | H265 | AV1 |
PSNR | 29.3 | 31.2 | 32 |
速度 | 25fps | 8fps | 3fps |
相同码率下,AV1清晰度稍好于H265,而H264最差,但编码耗时则相反。
在机器性能比较差的机器上编码,最好选择H264和VP8。如果在新机器上,可以考虑H265,VP9 AV1。
参考
https://ke.qq.com/course/3202131?flowToken=1040744
音视频 — 视频编码原理相关推荐
- 音视频开发系列-H264编码原理
H264简介 来自百度百科的介绍: H.264是国际标准化组织(ISO)和国际电信联盟(ITU)共同提出的继MPEG4之后的新一代数字视频压缩格式. H.264是ITU-T以H.26x系列为名称命名的 ...
- 深入讲解音视频编码原理,H264码流详解——手写H264编码器
音视频高手课08-H264 I帧 P帧 B帧及手写H264编码器 1 三种帧的说明 1.I 帧:帧内编码帧,帧表示关键帧,你可以理解为这一帧画面的完整保留:解码时只需要本帧数据就可以完成(因为包含完整 ...
- 【Android音视频开发】音频编码原理
文章变更表 文章版本号 变更内容 变更日期 备注 0.0.1 创建 2022/9/29 初版 0.0.2 补充编码原理和音频格式等内容 2022/9/30 1. 前言 在[Android音视频开发] ...
- 音视频的同步原理——老文章,比较清晰
http://blog.csdn.net/beyond_cn/article/details/20310177 1. 音视频同步的原理 2. 音视频同步的较正方法 3. 音视频同步时遇到的问题 ...
- 音视频基础:视频的编码
本文主要参考<图像通信技术与应用>作者陈柘 陈川 记录了数字图像的模型.图像变换的数学原理.图像编码的基本思想.H.26x等视频标准.以及视频的传输模型等概念,只介绍思想,无数学推导,无代 ...
- FFmpeg入门详解之20:视频编码原理简介
视频为何需要压缩? 原因:未经压缩的数字视频的数据量巨大 ● 存储困难 ○ 一G只能存储几秒钟的未压缩数字视频. ● 传输困难 ○ 1兆的带宽传输一秒的数字电视视频需要大约4分钟. 主要压缩了什么东西 ...
- 解析视频编码原理——从孙艺珍的电影说起(一)
更多博文,请看音视频系统学习的浪漫马车之总目录 视频理论基础: 视频基础知识扫盲 音视频开发基础知识之YUV颜色编码 解析视频编码原理--从孙艺珍的电影说起(一) 解析视频编码原理--从孙艺珍的电影说 ...
- LiveVideoStackCon 2018技术培训 — 从FFmpeg视频编码到抖音式视频特效实现
LiveVideoStackCon 2018技术培训,"从FFmpeg视频编码到抖音式视频特效实现".我们拒绝"纸上谈兵",坚持技术讲解与实战训练相结合.门票火 ...
- 视频【编码】原理(H.264 librtmp推流),图像编码中sps ,pps ,nalu ,frame ,silce ect
视频编码格式:H264, VC-1, MPEG-2, MPEG4-ASP (Divx/Xvid), VP8, MJPEG 等. 音频编码格式:AAC, AC3, DTS(-HD), TrueHD, ...
- 音视频编解码原理基础
1.音视频播放器原理 音视频技术主要包含以下几点:封装技术,视频压缩编码技术和音频编码压缩技术. 如果解码本地视频,则不需要解协议:解封装->解码音视频->音视频同步: 解协议的作用:将流 ...
最新文章
- Java垃圾回收调优
- asp2.0缓存概述
- html5实现贪吃蛇,分享一个用html5实现的贪吃蛇特效代码
- [云炬python3玩转机器学习]6-3线性回归中的梯度下降法
- 基因分子生物学~tRNA,mRNA,蛋白质合成
- for vue 一行2列_JAVA基础练习试题(2)蓝桥杯 附源代码
- 第十三节、SURF特征提取算法
- oracle 读取表结构和注释,生成数据库结构文档
- cinder与ceph的区别_配置cinder-volume服务使用ceph作为后端存储
- 程序员是如何做到随时随地编程的?
- 回忆一次面试Android研发的问题
- python数字转换成中文大写_Python转换数字到中文大写格式
- PMP-7. 项目经理及其影响力
- AD中生成交互式BOM,方便手工焊接及贴片
- oracle start with connect by order siblings by用法
- Mac 搭建一个本地JRebel破解服务器
- win10锁屏幻灯片放映不能播放幻灯片问题的一种解决办法
- iPhone尺寸大全(包含iPhone14系列)
- hive时间AM PM格式转化为24小时制 按小时分morning,noon 思路+演示
- 50欧姆线设计 高频pcb_50欧阻抗天线设计
热门文章
- 面阵相机靶面详解and镜头选择andFA镜头视野计算
- 在 VMware vSphere 中构建 Kubernetes 存储环境
- css实现长英文字母自动换行
- Uniapp——使用安卓原生插件
- 简介ResNet18并用其对CIFAR-10数据集进行分类
- 学渣的刷题之旅 leetcode刷题 88. 合并两个有序数组
- LeetCode 325. Maximum Size Subarray Sum Equals k
- 2、Docker安装
- 淘宝开店历程-致广大新开淘宝店主
- GISer从零开始学习ArcGIS API for JavaScriptArcGIS Online教程(三)免费注册和使用ArcGIS Online