视频编码解码基本知识
最近在做摄像头视频的数据处理,得到了网络相机的.h264格式的数据,需要做解码处理,由于对视频的编码解码原理不太了解,因此查找资料总结一下
为什么要进行视频编码?
视频编码又称为视频压缩,伴随着用户对高清视频的需求量的增加,视频多媒体的视频数据量也在不断加大。如果未经压缩,这些视频很难应用于实际的存储和传输。而视频中是有很多冗余信息的,以记录数字视频的YUV分量格式为例,YUV分别代表亮度与两个色差信号。例如对于现有的PAL制电视系统,其亮度信号采样频率为13.5MHz;色度信号的频带通常为亮度信号的一半或更少,为6.75MHz或3.375MHz。以4:2:2的采样频率为例,Y信号采用13.5MHz,色度信号U和V采用6.75MHz采样,采样信号以8bit量化,则可以计算出数字视频的码率为:13.5*8 + 6.75*8 + 6.75*8= 216Mbit/s。如此大的数据量如果直接进行存储或传输将会遇到很大困难,因此必须采用压缩技术以减少码率。数字化后的视频信号能进行压缩主要依据两个基本条件:
- 数据冗余。例如如空间冗余、时间冗余、结构冗余、信息熵冗余等,即图像的各像素之间存在着很强的相关性。消除这些冗余并不会导致信息损失,属于无损压缩。
- 视觉冗余。人眼的一些特性比如亮度辨别阈值,视觉阈值,对亮度和色度的敏感度不同,使得在编码的时候引入适量的误差,也不会被察觉出来。可以利用人眼的视觉特性,以一定的客观失真换取数据压缩。这种压缩属于有损压缩。
数字视频信号的压缩正是基于上述两种条件,有效地去除视频数据中冗余信息,实现视频数据在互联网中快速传输和离线的存储。使得视频数据量得以极大的压缩,有利于传输和存储。
主流的编解码标准的压缩对象都是YUV图像
常见的编码格式
在过去的几十年中,一系列的视频编码标准被广泛的应用。目前已有的视频压缩标准有很多种,包括国际标准化组织(International Organization for Standardization, ISO)/国际电工技术委员会(International Electrotechnical Commission, IEC)制定的MPEG-1、MPEG-2、MPEG-4标准;国际电信联盟电信标准化部门(International Telecommunication Union-Telecom, ITU-T)制定的H.261、H.263。
2003年3月,ITU-T和ISO/IEC 正式公布了H.264/MPEG-4 AVC视频压缩标准。H.264作为目前应用最为广泛的视频编码标准,在提高编码效率和灵活性方面取得了巨大成功,使得数字视频有效地应用在各种各样的网络类型和工程领域。为了在关键技术上不受国外牵制,同时也不用交大量的专利费用,中国也制定了AVS系列标准,可以提供与H.264/AVC相当的编码效率。
近年来随着用户体验的不断升级,高清(1920x1080)和超高清(3840x2160)视频的应用越来越广泛。相对于标清视频,高清视频分辨率更大也更清晰,但是相应的数据量也随之增加。在存储空间和网络带宽有限的情况下,现有的视频压缩技术已经不能满足现实的应用需求。为了解决高清及超高清视频急剧增长的数据率给网络传输和数据存储带来的冲击,ITU-T和ISO/IEC联合制定了具有更高压缩效率的新一代视频压缩标准HEVC(High Efficiency Video Coding)。
视频文件生成方式
一个完整的视频文件是由音频和视频2 部分组成的。常见的AVI、RMVB、MKV、ASF、WMV、MP4、3GP、FLV等文件其实只能算是一种封装标准。
H264、Xvid等就是视频编码格式,MP3、AAC等就是音频编码格式。例如:将一个Xvid视频编码文件和一个MP3视频编码文件按AVI封装标准封装以后,就得到一个AVI后缀的视频文件,这个就是我们常见的AVI视频文件了。由于很多种视频编码文件、音频编码文件都符合AVI封装要求,则意味着即使是AVI后缀,也可能里面的具体编码格式不同。因此出现在一些设备上,同是AVI后缀文件,一些能正常播放,还有一些就无法播放。
同样的情况也存在于其他容器格式。即使RMVB、WMV等也不例外。部分技术先进的容器还可以同时封装多个视频、音频编码文件,甚至同时封装进字幕,如MKV封装格式。MKV文件可以做到一个文件包括多语种发音、多语种字幕,适合不同人的需要。例如:MKV文件只要制作的时候同时加入国语和粤语发音的音轨和对应的简体、繁体字幕,播放的时候,你可以独立选择国语或粤语发音,并根据自己需要选择简体或繁体字幕,也可以选择不显示字幕。相当方便。
因此,视频转换需要设置的本质就是:A设置需要的视频编码、B设置需要的音频编码、C选择需要的容器封装。一个完整的视频转换设置都至少包括了上面3个步骤。常见的组合方式如表所示
常见的组合方式 |
||
封装容器 |
视频流编码格式 |
音频流编码格式 |
AVI |
Xvid |
MP3 |
AVI |
Divx |
MP3 |
Matroska(后缀就是MKV) |
Xvid |
MP3 |
Matroska(后缀就是MKV) |
Xvid |
AAC |
Matroska(后缀就是MKV) |
H264 |
AAC |
MP4 |
Xvid |
MP3 |
MP4 |
H264 |
AAC |
3GP |
H.263 |
AAC |
视频编解码关键技术
MPEG-4/H.264等编解码算法的工作机制基本都是混合编码,主要处理模块包括:预测、变换、量化和熵编码等。工作原理大同小异,图像帧的编码模式主要有帧内和帧间两种方式。帧内包括预测、变换、量化和熵编码等,帧间编码包括运动估计、运动补偿、变换、量化和熵编码等。
- 预测:通过帧内预测和帧间预测降低视频图像的空间冗余和时间冗余。
- 变换:通过从时域到频域的变换,去除相邻数据之间的相关性,即去除空间冗余。
- 量化:通过用更粗糙的数据表示精细的数据来降低编码的数据量,或者通过去除人眼不敏感的信息来降低编码数据量。
- 扫描:将二维变换量化数据重新组织成一维的数据序列。
- 熵编码:根据待编码数据的概率特性减少编码冗余。
视频编码知识
在做视频开发时,涉及到视频的编码输出,本质上视频的码率就等于网络的带宽
视频码率是视频数据(视频色彩量、亮度量、像素量)每秒输出的位数
码率越高,数据量越大,视频质量越好,码率越小,数据量越小,视频质量越差。但是,码率大到一定阈值之后,码率的提升带来的视频质量改善就会变得微不足道,所以这个码率阈值就显得非常重要。
有篇文章测试了 H264 编码时,不同分辨率的码率设置情况,可以参考
文章链接:Video Encoding Settings for H.264 Excellence
视频编码解码基本知识相关推荐
- Vulkan Video实现GPU加速视频编码/解码
正文字数:929 阅读时长:2分钟 Vulkan是一套跨平台的图形API,由Khronos组织牵头进行制定,普遍被看作是OpenGL的后继者,目前版本已经来到1.2.175,仍然在不停地进行更新,其 ...
- 音视频编解码基础知识(1)- 音视频编解码过程
在学习音视频编解码知识时,首先要对整个过程有一个直观的认识,对一些知识点也要有明确的认识. 知识点: 1. YUV/RGB/RAW,这是三种视频采集的数据格式 2. 视频编码格式:H.264(在MPE ...
- 使用FFMPEG——4.2.2版本实现提取视频编码解码文件,ffmpeg基础学习。
FFMPEG基础学习 视频解码,并且输出到文件. 我通过雷霄骅的博客学习FFMPEG,在学习过程中发现"雷神"的代码由于版本的问题,很多代码已经无法在FFMPEG--4.2.2版本 ...
- 音视频开发基础知识(2)——最通俗易懂的视频编解码理论知识
更多音视频知识请关注公众号:进击的代码家 音视频学习项目:LearnVideo AndroidMediaCodecDemo 视频基础概念 像素 **像素是图像的基本单元,一个个像素就组成了图像.你可以 ...
- ---WebCam网络摄像头12 ---图像编码解码,视频编码解码
1.图像格式与图像编码,图像显示 图像被拍摄后,一般都会按照某种编码方式被压缩,使得占用更少的空间来存放(或传输).然后再播放的时候又会使用想用的解码方式将图像还原成源图像(指显示器认可的图像格式,一 ...
- 音视频开发 视频编解码理论知识
像素 像素是图像的基本单元,一个个像素就组成了图像.你可以认为像素就是图像中的一个点.在下面这张图中,你可以看到一个个方块,这些方块就是像素. 分辨率 图像(或视频)的分辨率是指图像的大小或尺寸.我们 ...
- 音视频编解码基础知识笔记
欢迎关注勤于奋.每天12点准时更新国外LEAD相关技术 我的理解,音视频是一种视频的播放格式,但是这种格式已经通过压缩,封装,最后给我们的就是市面上能够播放的格式,这样如果自己写播放器,就需要去解封装 ...
- 硬件视频编解码基本知识
所有的平板手机电视应用处理器芯片,介绍性能都是关注cpu,gpu的性能,但是除了这些之外,芯片里边还有很多其他模块,对整体性能的影响也很大,任何一处成为瓶颈,都会让整机应用卡壳. 这里就讲一下一个整机 ...
- Intel和AMD的最新视频编码/解码基准测试
鉴于英特尔可扩展视频技术(SVT)开源视频编码器以及其他开源视频编码器/解码器的最新更新,以下是AMD 霄龙 7742 双路服务器在与英特尔竞争的情况下与之抗衡的最新表现,同时让我看看AMD在企业级服 ...
最新文章
- 编译安装samba4.89遇到的错误
- 多少个没收到会收敛_做多少个俯卧撑算是合格?坚持做俯卧撑,会有什么变化?...
- linux 内存管理 page fault带来的性能问题
- 17.2?Replication Implementation 复制实施:
- Ubuntu login as root automatically
- 自动化测试8大元素定位之xpath语法
- python 计算时间重叠_Python基于时间信息(即时、间隔)计算项目之间的相似性...
- Java Enterprise软件与应有的内容
- 站在面试官角度,看求职与内卷
- 常用计算机维修方法有哪些,计算机常见硬件故障的诊断及其处理分析
- while在Java用法_Java中while循环用法
- Google Analytics中的基本度量四 “页面停留时间和网站停留时间
- 听了让人心静的纯音乐
- 希尔顿逸林品牌聚焦亚太市场,推进全球扩张式发展
- 移动端登录页面-vue
- Java 扫描识别条形码图片
- RecyclerView添加下划线
- 你的电脑里还在装着360杀毒软件吗?最好用的,免费的都在这里,给你的电脑换个好的杀软~!...
- 如何用波士顿矩阵法来分析产品的生命周期?
- easyPOI基本用法
热门文章
- 从选品到营销,2023年五一国际劳动节跨境电商全攻略
- 学生信息管理系统模块问题篇
- itoa+java数组_itoa实施崩溃?
- 京东物流CEO王振辉:供应链数字化是产业互联网发展的最佳入口
- 2021-04-18 读书笔记-白鹿原
- html的文本框选中样式,HTML实用文本框样式(示例代码)
- Jove:@houyr 那你也可以用totalcmd发。下个curl.然后配有个tc的命令。。。。。
- 流计算框架——Storm
- 2019 ICPC Malaysia National J.Kitchen Plates
- 简单易懂的单纯形法理解