自适应网站ui做几套,怎样给自己的店做网站,wordpress画廊插件,深圳西丽网站建设目录PCM-脉冲编码调制录音的原理记录声音-音频数字化音频数字化-PCM采样采样采样率采样定理量化位深度编码声道#xff08;Channel#xff09;比特率信噪比编码#xff08;Encode#xff09;解码#xff08;Decode#xff09;常见的音频编码和文件格式无损Monkeys AudioF…
目录PCM-脉冲编码调制录音的原理记录声音-音频数字化音频数字化-PCM采样采样采样率采样定理量化位深度编码声道Channel比特率信噪比编码Encode解码Decode常见的音频编码和文件格式无损Monkeys AudioFLACALAC有损MP3WMAAACSpeexOpus文件格式OggWAVAIFF有损和无损声波音调响度音色噪音像素RGB颜色模型位深度24bit颜色的表示形式颜色数量其他位深度不同位深度的对比格式动画YUV体积更小组成兼容性RGB和YUV转换公式1公式2公式3色度二次采样原理概念采样格式4:4:44:2:24:2:0H.264编码编码器解码器编码过程与原理划分帧类型GOP的长度GOP的类型帧内/帧间编码划分宏块帧内编码帧间编码变换与量化规格PCM-脉冲编码调制
录音的原理
可以简单理解为把声源的振动记录下来需要时再让某个物体按照记录下来的振动规律去振动就会产生与原来一样的声音。
记录声音-音频数字化
如何把声音声源的振动记录下来呢声音属于模拟信号但更便于计算机处理和存储的是数字信号二进制编码所以需要将模拟信号Analog Signal转成数字信号Digital Signal后进行存储。这一过程我们可以称之为音频数字化。
音频数字化-PCM
将音频数字化的常见技术方案是脉冲编码调制PCMPulse Code Modulation主要过程是采样 → 量化 → 编码。 采样
模拟信号的波形是无限光滑的可以看成由无数个点组成由于存储空间是相对有限的数字编码过程中必须要对波形的点进行采样。
采样
采样Sampling每隔一段时间采集一次模拟信号的样本是一个在时间上将模拟信号离散化把连续信号转换成离散信号的过程。
采样率
每秒采集的样本数量称为采样率采样频率采样速率Sampling Rate。比如采样率44.1kHz表示1秒钟采集44100个样本。
采样定理
根据采样定理奈奎斯特–香农采样定理Nyquist-Shannon sampling theorem得知只有当采样率高于声音信号最高频率的2倍时才能把采集的声音信号唯一地还原成原来的声音。
人耳能够感觉到的最高声音频率为20000Hz因此为了满足人耳的听觉要求需要至少每秒进行40000次采样40kHz采样率。
这就是为什么常见的CD的采样率为44.1kHz。
电话、无线对讲机、无线麦克风等的采样率是8kHZ。
人耳听觉 20HZ–20KHZ 敏感 1KHz–4KHz 最敏感 3.4KHz再往上容易产生听觉疲劳
人嗓音 男 80Hz–500Hz 女100Hz–1KHz
电话 200/300–3KHZ
电视 100HZ
20–250 LOW (LF) 250–2KHz MID (MF) 2kHz–4KHz MH 4KHz–20KHz High (HF)
根据采样定律要保证信号传输中不失真采样频率最起码是最高频率的两倍也就是说采样频率6800hz以上都可以,至于为什么是8000hz可以认为是一种约定而已。
量化
量化Quantization将每一个采样点的样本值数字化。
位深度
位深度采样精度采样大小Bit Depth使用多少个二进制位来存储一个采样点的样本值。位深度越高表示的振幅越精确。常见的CD采用16bit的位深度能表示65536216个不同的值。DVD使用24bit的位深度大多数电话设备使用8bit的位深度。
就相当于下图纵坐标的间距 位深度越大 纵坐标刻度越密集表示的振幅越精确。
下图的横坐标间距越小 表示采样率越高 编码
编码将采样和量化后的数字数据转成二进制码流。
声道Channel
单声道产生一组声波数据双声道立体声产生两组声波数据。
采样率44.1kHZ、位深度16bit的1分钟立体声PCM数据有多大
采样率 * 位深度 * 声道数 * 时间44100 * 16 * 2 * 60 / 8 ≈ 10.34MB
1分钟10.34MB这对于大部分用户来说是不能接受的。
要想在不改变音频时长的前提下降低音频数据的大小只有2种方法
降低采样指标、压缩。
降低采样指标是不可取的会导致音频质量下降用户体验变差因此专家们研发了各种压缩方案。
举个例子
现在有个需求在局域网内实现实时语音传输层协议使用UDP协议如果直接使用AudioRecord进行录制音频流并发送到另一端进行播放音质会非常差而且断断续续原因如下
采样频率 fm 44.1KHz
量化位数16bit
声道配置2(双声道)
那么码率 V 44.1K * 16 *2 1411.2 Kbps 176.4KBps即每秒传输速率大概176.4KB
若音频帧时间为20ms每个音频数据包大小为 size 176.4KBps * 0.02s 3.528KB
一般情况下我们每次读取一个音频帧的数据可以取整为3600Byte
所以 每秒大概发送 176.4/3.649 个数据包每个数据包大小为3.6KB。
如果再考虑到数据报头实测每秒发送约45个数据包每秒传输速率大概180KB。
由于一般都是使用手机连接Wifi这就要求网络质量和硬件设备必须很好而且信道干扰较弱并且链接的设备不能过多。只要稍微信号不好就会导致丢包率特别高而且延时十分大根本无法满足通信的需要。在这种情况下我们就需要进行语音压缩、降噪等处理。
比特率
比特率Bit Rate指单位时间内传输或处理的比特数量单位是比特每秒bit/s或bps还有千比特每秒Kbit/s或Kbps、兆比特每秒Mbit/s或Mbps、吉比特每秒Gbit/s或Gbps、太比特每秒Tbit/s或Tbps。
采样率44.1kHZ、位深度16bit的立体声PCM数据的比特率是多少
采样率 * 位深度 * 声道数44100 * 16 * 2 1411.2Kbps
通常采样率、位深度越高数字化音频的质量就越好。从比特率的计算公式可以看得出来比特率越高数字化音频的质量就越好。
信噪比
信噪比Signal-to-noise ratioSNRS/N讯噪比指信号与噪声的比例用于比较所需信号的强度与背景噪声的强度以分贝dB为单位。
位深度限制了信噪比的最大值它们的关系如下表所示。
位深度信噪比424.08848.161166.221272.241696.3318108.3720120.4124144.4932192.6648288.9964385.32
关于信噪比的意义
图像的信噪比和图像的清晰度一样都是衡量图像质量高低的重要指标。图像的信噪比是指视频信号的大小与噪波信号大小的比值其公式为
S/N信噪比 20 log (信号/噪声)dB
信噪比大图像画面就干净看不到什么噪波干扰表现为“颗粒”和“雪花”看起来很舒服若信噪比小则在画面上可能满是雪花严重影响图像画面。信噪比与图像质量之间具有如下对应关系
S/N为60dB(比率为10001)时图像质量优良不出现噪声
S/N为50dB(比率为3161)时图像有少量噪声但图像质量算好
S/N为40dB(比率为1001)时图像有一定的精细颗粒或雪花图像的精细结构受到一定的损失
S/N为30dB(比率为321)图像将是有大量噪声的劣质图像
S/N为20dB(比率为101)图像就不能使用。
影响信噪比的因素很多例如电源的干扰电子元器件过热产生的干扰光敏元件上的小电压放大成07V视频信号时因放大而产生的噪声光照度降低时放大器增益提高噪声也将增加等等。
一般摄像机的信噪比在50-60dB之间录像机在40-50dB之间。
编码Encode
PCM数据可以理解为是未经压缩的原始音频数据体积比较大为了更便于存储和传输一般都会使用某种音频编码对它进行编码压缩然后再存成某种音频文件格式。
压缩分为无损压缩和有损压缩。
无损压缩 解压后可以完全还原出原始数据压缩比小体积大 有损压缩 解压后不能完全还原出原始数据会丢失一部分信息压缩比大体积小压缩比越大丢失的信息就越多还原后的信号失真就会越大一般是通过舍弃原始数据中对人类听觉不重要的部分达成压缩成较小文件的目的 压缩比 未压缩大小 / 压缩后大小
解码Decode
当需要播放音频时得先解码解压缩出PCM数据然后再进行播放。
常见的音频编码和文件格式
需要注意的是音频文件格式并不等于音频编码。比如
WAV只是一种文件格式并不是一种编码FLAC既是一种文件格式又是一种编码
下面对常见的音频编码和文件格式做一个简介。
名称无损压缩文件扩展名Monkey’s Audio✔️.apeFLACFree Lossless Audio Codec✔️.flacALACApple Lossless Audio Codec✔️.m4a/.cafMP3MPEG Audio Layer III❌.mp3WMAWindows Media Audio❌.wmaAACAdvanced Audio Coding❌.acc/.mp4/.m4aVorbis❌.oggSpeex❌.spxOpus❌.opusOgg.oggWAVWaveform Audio File Format.wavAIFFAudio Interchange File Format.aiff、.aif
无损
Monkey’s Audio
Monkey’s Audio是一种无损的音频编码和文件格式文件扩展名为.ape压缩率一般在55%左右。
FLAC
FLACFree Lossless Audio Codec是一种无损的音频编码和文件格式文件扩展名为.flac。虽然压缩率稍有不及Monkey’s Audio但FLAC技术更先进占用资源更低有更多的平台及硬件产品支持FLAC。
ALAC
ALACApple Lossless Audio Codec是由Apple开发的一种无损的音频编码文件扩展名为.m4a、.caf。
有损
MP3
MP3MPEG Audio Layer III是非常流行的一种有损音频编码和文件格式文件扩展名为.mp3。
第1版是MPEG-1 Audio Layer III属于国际标准ISO/IEC 11172-3 第2版是MPEG-2 Audio Layer III属于国际标准ISO/IEC 13818-3 第3版是MPEG-2.5 Audio Layer III并不是由MPEG官方开发的不是公认的标准
WMA
WMAWindows Media Audio是由Microsoft开发的音频编码和文件格式文件扩展名为.wma。包括4种类型
WMA原始的WMA编解码器作为MP3的竞争者属于有损音频编码 WMA Pro支持更多声道和更高质量的音频属于有损音频编码 WMA Lossless属于无损音频编码 WMA Voice属于有损音频编码
AAC
AACAdvanced Audio Coding是由Fraunhofer IIS、杜比实验室、ATT、Sony、Nokia等公司共同开发的有损音频编码和文件格式压缩比通常为18:1。
AAC被设计为MP3格式的后继产品通常在相同的比特率下可以获得比MP3更高的声音质量是iPhone、iPod、iPad、iTunes的标准音频格式。
AAC编码的文件扩展名主要有3种
.acc传统的AAC编码使用MPEG-2 Audio Transport StreamADTS容器 .mp4使用了MPEG-4 Part 14的简化版即3GPP Media Release 6 Basic3gp6进行封装的AAC编码 .m4a为了区别纯音频MP4文件和包含视频的MP4文件而由Apple公司使用的扩展名 Apple iTunes对纯音频MP4文件采用了.m4a文件扩展名 M4A的本质和音频MP4相同故音频MP4文件可以直接更改文件扩展名为.m4a Vorbis Vorbis是由Xiph.Org基金会开发的一种有损音频编码。通常以Ogg作为容器格式所以常合称为Ogg Vorbis文件扩展名为.ogg。
Speex
Speex是由Xiph.Org基金会开发的一种有损音频编码和文件格式文件扩展名为.spx。
Opus
Opus是由Xiph.Org基金会开发的一种有损音频编码和文件格式文件扩展名为.opus。用以取代Vorbis和Speedx。经过多次盲听测试在任何给定的比特率下都比其他标准音频格式具有更高的质量包括MP3、AAC。
文件格式
Ogg
Ogg是一种多媒体文件格式由Xiph.Org基金会所维护可以纳入各式各样的音视频编码音频、视频都可以文件扩展名常为.ogg。
Ogg常用的音频编码有
有损压缩Speex、Vorbis、Opus 无损压缩FLAC 未压缩PCM
WAV
WAVWaveform Audio File Format是由IBM和Microsoft开发的音频文件格式扩展名是.wav通常采用PCM编码常用于Windows系统中。
AIFF
AIFFAudio Interchange File Format由Apple开发的音频文件格式扩展名是.aiff、.aif。跟WAV一样通常采用PCM编码常用于Mac系统中。
有损和无损
根据采样率和位深度可以得知相对于自然界的信号音频编码最多只能做到无限接近任何数字音频编码方案都是有损的因为无法完全还原。目前能够达到最高保真水平的就是PCM编码因此PCM约定俗成叫做无损音频编码被广泛用于素材保存及音乐欣赏CD、DVD以及常见的WAV文件中均有应用。
但并不意味着PCM就能够确保信号绝对保真PCM也只能做到最大程度的无限接近。我们习惯性的把MP3列入有损音频编码范畴是相对于PCM编码的。要做到真正的无损是困难的就像用数字去表达圆周率不管精度多高也只是无限接近而不是真正等于圆周率的值。
声波
以扬声器为例子扬声器发声时是振膜在振动。
振膜的振动会导致振膜旁边的空气振动然后导致更大范围的空气跟着一起振动最后耳朵旁边的空气也开始振动。
空气的振动带来了动能Kinetic Energy能量传入了耳朵中最后就听到了声音。
所以扬声器可以通过空气来传播能量而不是传播空气本身。
声音与波有着相同的关键特征可以通过介质传播能量而不是传播介质本身。
因此我们也把声音称为声波声音的传播介质可以是气体、液体、固体比如2个人面对面交流时声音是通过空气传播到对方耳中
为什么自己录下来的声音和平时说话的声音听起来会不太一样
当自己说话的时候实际上自己听到了2个声音分别来自2种不同的传播介质 声波 → 空气 → 耳朵声波 → 血肉、骨骼等介质 → 耳朵 录制声音时 声波 → 空气 → 录音设备 当听自己录下来的声音时自己只听到了1个声音 声波 → 空气 → 耳朵 所以平时别人耳中听到的你说话的声音就是你录音中的声音
人耳又是如何听到声音的呢
大概过程是声源 → 耳廓收集声波 → 外耳道传递声波 → 鼓膜将声波转换成振动 → 听小骨放大振动 → 耳蜗将振动转换成电信号 → 听觉神经传递电信号 → 大脑形成听觉
如果只关注单个空气分子可以发现它来回振动的轨迹就是一个正弦或余弦函数的曲线图
横轴代表时间。
纵轴代表空气分子来回振动时产生的位移。
平衡位置该空气分子的未受振动干扰时的位置
从平衡位置到最大位移位置之间的距离叫做振幅Amplitude。
空气分子完全来回振动一次所花费的时间叫做周期Period单位是秒s。
物体每秒来回振动的次数叫做频率Frequency也就是周期分之一。
单位是秒分之一1/s也称为赫兹Hz比如440Hz代表物体每秒来回振动440次因此频率用来表示物体振动的快慢
理论上人类的发声频率是85Hz ~ 1100Hz人类只能听见20Hz ~ 20000Hz之间的声音。
低于20Hz的称为次声波Infrasound高于20000Hz的称为超声波Ultrasound
音调
频率越高音调就越高。
频率越低音调就越低。
通常女生讲话时声带振动的频率就比较高因此我们听到的音调就高而男生讲话时声带振动的频率就比较低因此我们听到的音调就低。
响度
当提高声音的响度音量大小时振动的幅度会变大。
我们常用dB分贝来描述声音的响度。
分贝情景0刚能听到的声音15以下感觉安静30耳语的音量大小40冰箱的嗡嗡声60正常交谈的声音70相当于走在闹市区85汽车穿梭的马路上95摩托车启动声音100装修电钻的声音110卡拉OK、大声播放MP3的声音120飞机起飞时的声音150燃放烟花爆竹的声音
音色
音色Timbre是指声音的特色。
不同的声源由于其材料、结构不同则发出声音的音色也不同我们之所以能够根据声音区分出不同的乐器、不同的人都是因为它们的音色不同不同音色的声音即使在同一响度和同一音调的情况下也能让人区分开来
原理
通常声源的振动产生的并不是单一频率的声波而是由基音和不同频率的泛音组成的复合声音。
当声源的主体振动时会发出一个基音基本频率基频Fundamental Frequency同时其余各部分也有复合的声源这些声源组合产生泛音泛音Overtone其实就是物理学上的谐波Harmonic
音调是由基音决定的而音色主要取决于泛音。
音色不同波形也就不同。
声音的最终波形是由多个不同的波形组合而成的。
噪音
声源作无规则振动时发出的声音
长期的噪音可以影响人的身心健康。
噪音可能导致各种不同程度的听力丧失 长时间处于85分贝以上的噪音可以影响人的听力响于120分贝的噪音可以使人耳聋
研究表明
让人讨厌的噪音和婴儿啼哭及人类尖叫的声音有着相同的频率人耳对2000Hz ~ 4000Hz范围内的声音是难以接受的而指甲刮黑板声音的特殊之处就在于它的频率正好处于2000Hz ~ 4000Hz频段内
大脑中的杏仁核Amygdala在听到指甲刮黑板的声音时会异常兴奋于是霸道地接管了大脑听觉的任务向听觉皮层Auditory Cortex发出痛苦的信息。听觉皮层是属于大脑皮层大脑皮质Cerebral Cortex的一部分。
像素
一个图的分辨率是60x50用Photoshop放大图片上百倍后可以清晰地看到图片由若干个方形的色块组成每一个方形的色块被称为像素Pixel。这张图片的每一行都有60个像素共50行总共60*503000个像素。
总结一下
每张图片都是由N个像素组成的N≥1如果一张图片的分辨率是WxH那么 每一行都有W个像素共H行总共W*H个像素宽度是W像素高度是H像素
每个像素都有自己独立的颜色若干个像素就组成了一张色彩缤纷的完整图片。
RGB颜色模型
实验发现太阳光通过三棱镜折射后会被折射分散成红、橙、黄、绿、蓝、靛、紫7种单色光。其中的红、绿、蓝被称为是色光三原色。
接下来再看一个很重要的概念RGB颜色模型RGB color model又称为三原色光模式。
将红Red、绿Green、蓝Blue三原色的色光以不同的含量相叠加可以合成产生各种色彩光
每个像素的颜色可以通过红色、绿色、蓝色以不同的含量混合而成。比如
红色Red、绿色Green可以合成黄色Yellow红色Red、蓝色Blue可以合成洋红色Magenta绿色Green、蓝色Blue可以合成青色Cyan红色Red、绿色Green、蓝色Blue可以合成白色White
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YPGOyZWN-1634558631089)(C:\Users\jym\Desktop\497279-20210301182807299-1567553861.png)]
位深度
每一个像素的颜色信息是如何存储的呢
取决于图片的位深度Bit Depth也称为色彩深度Color Depth简称色深如果一张图片的位深度为n那么它的每一个像素都会使用n个二进制位来存储颜色信息
位深度是24它的具体含义是
每一个像素都会使用24个二进制位来存储颜色信息每一个像素的颜色都是由红Red、绿Green、蓝Blue3个颜色通道合成的每个颜色通道都用8bit来表示其“含量”值取值范围是 二进制00000000~11111111十进制0~255十六进制00~FF 举例01000000 11100000 11010000共24bit表示绿宝石色Turquoise 红色的值二进制01000000十进制64十六进制40绿色的值二进制11100000十进制224十六进制E0蓝色的值二进制11010000十进制208十六进制D064的红色 224的绿色 208的蓝色 绿宝石色
24bit颜色的表示形式
我们常用2种形式来表示24bit颜色比如刚才提到的绿宝石色
十进制rgb(64, 224, 208)十六进制#40E0D0
常见的24bit颜色
红色rgb(255, 0, 0)#FF0000绿色rgb(0, 255, 0)#00FF00蓝色rgb(0, 0, 255)#0000FF黄色rgb(255, 255, 0)#FFFF00洋红色rgb(255, 0, 255)#FF00FF青色rgb(0, 255, 255)#00FFFF白色rgb(255, 255, 255)#FFFFFF黑色rgb(0, 0, 0)#000000 当红绿蓝全为0时就是黑色这个其实很容易理解没有任何光自然是一片漆黑所以说黑色是世界上最纯洁的颜色因为它啥也没有(づ◕ᴗᴗ◕)づ相反白色是世界上最不纯洁的颜色因为它啥都有而且都是满色全是255 更多颜色可以参考颜色对照表红绿蓝的比例不同合成的颜色也就不同
颜色数量
如果位深度为n那么每一个像素能显示2n种颜色。
所以位深度为24时每一个像素能显示224种颜色也就是16777216种颜色约1678万24bit颜色也被称为是真彩色True Color也就是常说的24位真彩
其他位深度
除了24bit常见的位深度还有
1bit2种颜色黑白两色3bit8种颜色用于大部分早期的电脑显示器红绿蓝各占1位8bit256种颜色用于最早期的彩色Unix工作站红色占3位、绿色占3位、蓝色占2位16bit红色占5位、蓝色占5位、绿色占6位32bit基于24位增加8个位的透明通道 可以表示带有透明度的颜色比如CSS中的rgba(255, 0, 0, 0.5)表示50%透明度的红色
不同位深度的对比
位深度越大能表示的颜色数量就越多图片也就越鲜艳颜色过渡就会越平滑。
格式
一说到图片马上能想到拓展名为jpg、png、gif的图片文件。
每张图片都有自己的大小一张图片的大小是如何计算出来的为什么dragon01.jpg的大小是288KB
要想知道一张图片的大小是多少首先得知道每个像素的大小是多少。如果位深度是n那么每个像素的大小就是n个二进制位
分辨率是60x50位深度是24所以
每个像素的大小是24bit3字节1字节8bit图片的理论大小是(6050)(24/8)9000B≈8.79KB
但实际上会发现在相同分辨率、相同位深度的前提下把这张图片存成2种不同的格式jpg、png它们的大小是不同的而且都小于理论上的8.79KB。
其实jpg、png都是经过压缩后的图片具体的压缩算法和原理就不在此讨论了大家可以到网上自行搜索所以它们的大小会比理论值偏小。
图片的压缩类型可以分为2种
无损压缩 不损失图片质量压缩比小体积大解压显示后能够还原出完整的原始图片数据不会损失任何图片信息 有损压缩 会损失图片质量压缩比大体积小解压显示后无法还原出完整的原始图片数据会损失掉一些图片信息 压缩比 未压缩大小 / 压缩后大小
压缩类型位深度JPGJPEG有损压缩24bitPNG无损压缩8bit、24bit、32bitGIF无损压缩8bit
众所周知gif是一种支持动画的图片所以一般也叫作gif动态图微信的动态表情包就是基于gif动态图。
gif动画的实现原理类似手翻书。gif的动画原理是
gif内部存储了很多帧张静态图片在短时间内连续按顺序地呈现每一帧静态图片就形成了动画的效果
动画
不管是gif动态图还是手翻书它们的动画原理其实都基于视觉暂留Persistence of vision现象。
当人眼所看到的影像消失后人眼仍能继续保留其影像约0.1~0.4秒左右这种现象被称为视觉暂留现象人眼观看物体时成像于视网膜上并由视神经输入人脑感觉到物体的像但当物体移去时视神经对物体的印象不会立即消失而要延续0.1~0.4秒的时间人眼的这种性质被称为“眼睛的视觉暂留”我们日常使用的日光灯每秒大约熄灭100余次但我们基本感觉不到日光灯的闪动这都是因为视觉暂留的作用在一帧图片消失在大脑中之前呈现下一帧图片反复如此就可以形成连贯的动画效果 电影的帧率是24fpsfps每秒的帧数Frames Per Second
YUV
YUV是一种颜色编码方法跟RGB是同一个级别的概念广泛应用于多媒体领域中。
也就是说图像中每1个像素的颜色信息除了可以用RGB的方式表示也可以用YUV的方式表示。
对比RGBYUV有哪些不同和优势呢
体积更小
如果使用RGB 比如RGB888R、G、B每个分量都是8bit1个像素占用24bit3字节 如果使用YUV 1个像素可以减小至平均只占用12bit1.5字节体积为RGB888的一半
组成
RGB数据由R、G、B三个分量组成。
YUV数据由Y、U、V三个分量组成现在通常说的YUV指的是YCbCr。
Y表示亮度Luminance、Luma占8bit1字节Cb、Cr表示色度Chrominance、Chroma CbU蓝色色度分量占8bit1字节CrV红色色度分量占8bit1字节
兼容性
Y分量对呈现出清晰的图像有着很大的贡献Cb、Cr分量的内容不太容易识别清楚
Y分量的内容其实以前黑白电视的画面就是这样子。
YUV的发明处在彩色电视与黑白电视的过渡时期。
YUV将亮度信息Y与色度信息UV分离没有UV信息一样可以显示完整的图像只不过是黑白的这样的设计很好地解决了彩色电视与黑白电视的兼容性问题使黑白电视也能够接收彩色电视信号只不过它只显示了Y分量彩色电视有Y、U、V分量如果去掉UV分量剩下的Y分量和黑白电视相同
RGB和YUV转换
公式1
Y 0.257R 0.504G 0.098B 16
U -0.148R - 0.291G 0.439B 128
V 0.439R - 0.368G - 0.071B 128R 1.164(Y - 16) 2.018(U - 128)
G 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)
B 1.164(Y - 16) 1.596(V - 128)RGB的取值范围是[0,255]Y的取值范围是[16,235]UV的取值范围是[16,239]
公式2
Y 0.299R 0.587G 0.114B
U 0.564(B - Y) -0.169R - 0.331G 0.500B
V 0.713(R - Y) 0.500R - 0.419G - 0.081BR Y 1.403V
G Y - 0.344U - 0.714V
B Y 1.770URGB的取值范围是[0, 1]Y的取值范围是[0, 1]UV的取值范围是[-0.5, 0.5]
公式3
Y 0.299R 0.587G 0.114B
U -0.169R - 0.331G 0.500B 128
V 0.500R - 0.419G - 0.081B 128R Y 1.403(V - 128)
G Y - 0.343(U - 128) - 0.714(V - 128)
B Y 1.770(U - 128)RGB的取值范围是[0, 255]YUV的取值范围是[0, 255]
色度二次采样
原理
人眼的视网膜上分布着两种感光细胞视杆细胞和视锥细胞。
视杆细胞 感知光线的强弱没有色彩识别功能负责夜间非彩色视觉 视锥细胞 感知颜色负责白天彩色视觉如果你的视锥细胞发育不正常数量太少那感知颜色就会受阻可能会导致你色弱
人眼中有上亿个感光细胞其中视杆细胞占了95%而视锥细胞仅占5%。
因此人眼对亮度的敏感程度要高于对色度的敏感程度人眼对于亮度的分辨要比对颜色的分辨精细一些。
如果把图像的色度分量减少一些人眼也丝毫感觉不到变化和差异。
概念
如果在色度分量上进行相对亮度分量较低分辨率的采样也就是存储较多的亮度细节、较少的色度细节这样就可以在不明显降低画面质量的同时减小图像的体积。上述过程称为色度二次采样Chroma Subsampling。
采样格式
采样格式通常用A:B:C的形式来表示比如4:4:4、4:2:2、4:2:0等其中我们最需要关注的是4:2:0。
A一块A*2个像素的概念区域一般都是4B第1行的色度采样数目C第2行的色度采样数目 C的值一般要么等于B要么等于0
下图可以看出最上面的图像颜色是下面两个图像颜色叠加。 下图可以看出 左右两个图像颜色叠加产生第三列的图像颜色 上图中不管是哪种采样格式Y分量都是全水平、全垂直分辨率采样的每一个像素都有自己独立的Y分量。
4:4:4
第1行采集4组CbCr分量第2行采集4组CbCr分量每1个像素都有自己独立的1组CbCr分量 Y分量与CbCr分量的水平方向比例是1:1每1列都有1组CbCr分量Y分量与CbCr分量的垂直方向比例是1:1每1行都有1组CbCr分量Y分量与CbCr分量的总比例是1:1 1个像素占用24bit3字节跟RGB888的体积一样 24bppbits per pixel 这种格式是没有进行色度二次采样的
4:2:2
第1行采集2组CbCr分量第2行采集2组CbCr分量水平方向相邻的2个像素1行2列共用1组CbCr分量 Y分量与CbCr分量的水平方向比例是2:1每2列就有1组CbCr分量Y分量与CbCr分量的垂直方向比例是1:1每1行都有1组CbCr分量Y分量与CbCr分量的总比例是2:1 1个像素平均占用16bit2字节 16bpp因为2个像素共占用32bit4字节 2个Y分量 1个Cb分量 1个Cr分量
4:2:0
第1行采集2组CbCr分量第2行共享第1行的CbCr分量相邻的4个像素2行2列共用1组CbCr分量 Y分量与CbCr分量的水平方向比例是2:1每2列就有1组CbCr分量Y分量与CbCr分量的垂直方向比例是2:1每2行就有1组CbCr分量Y分量与CbCr分量的总比例是4:1 1个像素平均占用12bit1.5字节 12bpp因为4个像素共占用48bit6字节 4个Y分量 1个Cb分量 1个Cr分量
H.264编码
计算一下10秒钟1080p1920x1080、30fps的YUV420P原始视频需要占用多大的存储空间
(10 * 30) * (1920 * 1080) * 1.5 933120000字节 ≈ 889.89MB可以看得出来原始视频的体积是非常巨大的
由于网络带宽和硬盘存储空间都是非常有限的因此需要先使用视频编码技术比如H.264编码对原始视频进行压缩然后再进行存储和分发。H.264编码的压缩比可以达到至少是100:1。
H.264又称为MPEG-4 Part 10Advanced Video Coding。
译为MPEG-4第10部分高级视频编码简称MPEG-4 AVC
H.264是迄今为止视频录制、压缩和分发的最常用格式。截至2019年9月已有91的视频开发人员使用了该格式。H.264提供了明显优于以前任何标准的压缩性能。H.264因其是蓝光盘的其中一种编解码标准而著名所有蓝光盘播放器都必须能解码H.264。
编码器
H.264标准允许制造厂商自由地开发具有竞争力的创新产品它并没有定义一个编码器而是定义了编码器应该产生的输出码流。
x264是一款免费的高性能的H.264开源编码器。x264编码器在FFmpeg中的名称是libx264。
解码器
H.264标准中定义了一个解码方法但是制造厂商可以自由地开发可选的具有竞争力的、新的解码器前提是他们能够获得与标准中采用的方法同样的结果。
FFmpeg默认已经内置了一个H.264的解码器名称是h264。
编码过程与原理
大体可以归纳为以下几个主要步骤
划分帧类型帧内/帧间编码变换 量化滤波熵编码
划分帧类型
有统计结果表明在连续的几帧图像中一般只有10%以内的像素有差别亮度的差值变化不超过2%而色度的差值变化只在1%以内。
于是可以将一串连续的相似的帧归到一个图像群组Group Of PicturesGOP。
GOP中的帧可以分为3种类型
I帧I Picture、I Frame、Intra Coded Picture译为帧内编码图像也叫做关键帧Keyframe 是视频的第一帧也是GOP的第一帧一个GOP只有一个I帧编码 对整帧图像数据进行编码 解码 仅用当前I帧的编码数据就可以解码出完整的图像 是一种自带全部信息的独立帧无需参考其他图像便可独立进行解码可以简单理解为一张静态图像 P帧P Picture、P Frame、Predictive Coded Picture译为预测编码图像 编码 并不会对整帧图像数据进行编码以前面的I帧或P帧作为参考帧只编码当前P帧与参考帧的差异数据 解码 需要先解码出前面的参考帧再结合差异数据解码出当前P帧完整的图像 B帧B Picture、B Frame、Bipredictive Coded Picture译为前后预测编码图像 编码 并不会对整帧图像数据进行编码同时以前面、后面的I帧或P帧作为参考帧只编码当前B帧与前后参考帧的差异数据因为可参考的帧变多了所以只需要存储更少的差异数据 解码 需要先解码出前后的参考帧再结合差异数据解码出当前B帧完整的图像
不难看出编码后的数据大小I帧 P帧 B帧。
GOP的长度
GOP的长度表示GOP的帧数。GOP的长度需要控制在合理范围以平衡视频质量、视频大小网络带宽和seek效果拖动、快进的响应速度等。
加大GOP长度有利于减小视频文件大小但也不宜设置过大太大则会导致GOP后部帧的画面失真影响视频质量由于P、B帧的复杂度大于I帧GOP值过大过多的P、B帧会影响编码效率使编码效率降低如果设置过小的GOP值视频文件会比较大则需要提高视频的输出码率以确保画面质量不会降低故会增加网络带宽GOP长度也是影响视频seek响应速度的关键因素seek时播放器需要定位到离指定位置最近的前一个I帧如果GOP太大意味着距离指定位置可能越远需要解码的参考帧就越多、seek响应的时间缓冲时间也越长
GOP的类型
GOP又可以分为开放Open、封闭Closed两种。
Open 前一个GOP的B帧可以参考下一个GOP的I帧 Closed 前一个GOP的B帧不能参考下一个GOP的I帧GOP不能以B帧结尾
需要注意的是
由于P帧、B帧都对前面的参考帧P帧、I帧有依赖性因此一旦前面的参考帧出现数据错误就会导致后面的P帧、B帧也出现数据错误而且这种错误还会继续向后传播对于普通的I帧其后的P帧和B帧可以参考该普通I帧之前的其他I帧
在Closed GOP中有一种特殊的I帧叫做IDR帧Instantaneous Decoder Refresh译为即时解码刷新。
当遇到IDR帧时会清空参考帧队列如果前一个序列出现重大错误在这里可以获得重新同步的机会使错误不会继续往下传播一个IDR帧之后的所有帧永远都不会参考该IDR帧之前的帧视频播放时播放器一般都支持随机seek拖动到指定位置而播放器直接选择到指定位置附近的IDR帧进行播放最为便捷因为可以明确知道该IDR帧之后的所有帧都不会参考其之前的其他I帧从而避免较为复杂的反向解析
帧内/帧间编码
I帧采用的是帧内Intra Frame编码处理的是空间冗余。 P帧、B帧采用的是帧间Inter Frame编码处理的是时间冗余。
划分宏块
在进行编码之前首先要将一张完整的帧切割成多个宏块MacroblockH.264中的宏块大小通常是16x16。
宏块可以进一步拆分为多个更小的变换块Transform blocks、预测块Prediction blocks。
变换块的尺寸有16x16、8x8、4x4预测块的尺寸有16×16、16×8、8×16、8×8、8×4、4×8、4×4
帧内编码
帧内编码也称帧内预测。以4x4的预测块为例共有9种可选的预测模式。
利用帧内预测技术可以得到预测帧最终只需要保留预测模式信息、以及预测帧与原始帧的残差值。
编码器会选取最佳预测模式使预测帧更加接近原始帧减少相互间的差异提高编码的压缩效率。
帧间编码
帧间编码也称帧间预测用到了运动补偿Motion compensation技术。
编码器利用块匹配算法尝试在先前已编码的帧称为参考帧上搜索与正在编码的块相似的块。如果编码器搜索成功则可以使用称为运动矢量的向量对块进行编码该向量指向匹配块在参考帧处的位置。
在大多数情况下编码器将成功执行但是找到的块可能与它正在编码的块不完全匹配。这就是编码器将计算它们之间差异的原因。这些残差值称为预测误差需要进行变换并将其发送给解码器。
综上所述如果编码器在参考帧上成功找到匹配块它将获得指向匹配块的运动矢量和预测误差。使用这两个元素解码器将能够恢复该块的原始像素。
如果一切顺利该算法将能够找到一个几乎没有预测误差的匹配块因此一旦进行变换运动矢量加上预测误差的总大小将小于原始编码的大小。
如果块匹配算法未能找到合适的匹配则预测误差将是可观的。因此运动矢量的总大小加上预测误差将大于原始编码。在这种情况下编码器将产生异常并为该特定块发送原始编码。
变换与量化
接下来对残差值进行DCT变换Discrete Cosine Transform译为离散余弦变换。
规格
H.264的主要规格有
Baseline ProfileBP 支持I/P帧只支持无交错Progressive和CAVLC一般用于低阶或需要额外容错的应用比如视频通话、手机视频等即时通信领域 Extended ProfileXP 在Baseline的基础上增加了额外的功能支持流之间的切换改进误码性能支持I/P/B/SP/SI帧只支持无交错Progressive和CAVLC适合于视频流在网络上的传输场合比如视频点播 Main ProfileMP 提供I/P/B帧支持无交错Progressive和交错Interlaced支持CAVLC和CABAC用于主流消费类电子产品规格如低解码相对而言的MP4、便携的视频播放器、PSP和iPod等 High ProfileHiP 最常用的规格在Main的基础上增加了8x8内部预测、自定义量化、无损视频编码和更多的YUV格式如4:4:4 High 4:2:2 ProfileHi422PHigh 4:4:4 Predictive ProfileHi444PPHigh 4:2:2 Intra ProfileHigh 4:4:4 Intra Profile 用于广播及视频碟片存储蓝光影片高清电视的应用
部分内容来自网络以及参考https://www.cnblogs.com/mjios/p/14810630.html