音频和视频的基础知识
目錄
- PCM-脈沖編碼調(diào)制
- 錄音的原理
- 記錄聲音-音頻數(shù)字化
- 音頻數(shù)字化-PCM
- 采樣
- 采樣
- 采樣率
- 采樣定理
- 量化
- 位深度
- 編碼
- 聲道(Channel)
- 比特率
- 信噪比
- 編碼(Encode)
- 解碼(Decode)
- 常見的音頻編碼和文件格式
- 無損
- Monkey's Audio
- FLAC
- ALAC
- 有損
- MP3
- WMA
- AAC
- Speex
- Opus
- 文件格式
- Ogg
- WAV
- AIFF
- 有損和無損
- 聲波
- 音調(diào)
- 響度
- 音色
- 噪音
- 像素
- RGB顏色模型
- 位深度
- 24bit顏色的表示形式
- 顏色數(shù)量
- 其他位深度
- 不同位深度的對(duì)比
- 格式
- 動(dòng)畫
- YUV
- 體積更小
- 組成
- 兼容性
- RGB和YUV轉(zhuǎn)換
- 公式1
- 公式2
- 公式3
- 色度二次采樣
- 原理
- 概念
- 采樣格式
- 4:4:4
- 4:2:2
- 4:2:0
- H.264編碼
- 編碼器
- 解碼器
- 編碼過程與原理
- 劃分幀類型
- GOP的長度
- GOP的類型
- 幀內(nèi)/幀間編碼
- 劃分宏塊
- 幀內(nèi)編碼
- 幀間編碼
- 變換與量化
- 規(guī)格
PCM-脈沖編碼調(diào)制
錄音的原理
可以簡單理解為:把聲源的振動(dòng)記錄下來,需要時(shí)再讓某個(gè)物體按照記錄下來的振動(dòng)規(guī)律去振動(dòng),就會(huì)產(chǎn)生與原來一樣的聲音。
記錄聲音-音頻數(shù)字化
如何把聲音(聲源的振動(dòng))記錄下來呢?聲音屬于模擬信號(hào),但更便于計(jì)算機(jī)處理和存儲(chǔ)的是數(shù)字信號(hào)(二進(jìn)制編碼),所以需要將模擬信號(hào)(Analog Signal)轉(zhuǎn)成數(shù)字信號(hào)(Digital Signal)后進(jìn)行存儲(chǔ)。這一過程,我們可以稱之為:音頻數(shù)字化。
音頻數(shù)字化-PCM
將音頻數(shù)字化的常見技術(shù)方案是脈沖編碼調(diào)制(PCM,Pulse Code Modulation),主要過程是:采樣 → 量化 → 編碼。
采樣
模擬信號(hào)的波形是無限光滑的,可以看成由無數(shù)個(gè)點(diǎn)組成,由于存儲(chǔ)空間是相對(duì)有限的,數(shù)字編碼過程中,必須要對(duì)波形的點(diǎn)進(jìn)行采樣。
采樣
采樣(Sampling):每隔一段時(shí)間采集一次模擬信號(hào)的樣本,是一個(gè)在時(shí)間上將模擬信號(hào)離散化(把連續(xù)信號(hào)轉(zhuǎn)換成離散信號(hào))的過程。
采樣率
每秒采集的樣本數(shù)量,稱為采樣率(采樣頻率,采樣速率,Sampling Rate)。比如,采樣率44.1kHz表示1秒鐘采集44100個(gè)樣本。
采樣定理
根據(jù)采樣定理(奈奎斯特–香農(nóng)采樣定理,Nyquist-Shannon sampling theorem)得知:只有當(dāng)采樣率高于聲音信號(hào)最高頻率的2倍時(shí),才能把采集的聲音信號(hào)唯一地還原成原來的聲音。
人耳能夠感覺到的最高聲音頻率為20000Hz,因此為了滿足人耳的聽覺要求,需要至少每秒進(jìn)行40000次采樣(40kHz采樣率)。
這就是為什么常見的CD的采樣率為44.1kHz。
電話、無線對(duì)講機(jī)、無線麥克風(fēng)等的采樣率是8kHZ。
人耳聽覺 20HZ–20KHZ 敏感 1KHz–4KHz 最敏感 3.4KHz(再往上容易產(chǎn)生聽覺疲勞)
人嗓音 男 80Hz–500Hz 女100Hz–1KHz
電話 200/300–3KHZ
電視 100HZ
20–250 LOW (LF) 250–2KHz MID (MF) 2kHz–4KHz MH 4KHz–20KHz High (HF)
根據(jù)采樣定律,要保證信號(hào)傳輸中不失真,采樣頻率最起碼是最高頻率的兩倍,也就是說采樣頻率6800hz以上都可以,至于為什么是8000hz,可以認(rèn)為是一種約定而已。
量化
量化(Quantization):將每一個(gè)采樣點(diǎn)的樣本值數(shù)字化。
位深度
位深度(采樣精度,采樣大小,Bit Depth):使用多少個(gè)二進(jìn)制位來存儲(chǔ)一個(gè)采樣點(diǎn)的樣本值。位深度越高,表示的振幅越精確。常見的CD采用16bit的位深度,能表示65536(216)個(gè)不同的值。DVD使用24bit的位深度,大多數(shù)電話設(shè)備使用8bit的位深度。
就相當(dāng)于下圖縱坐標(biāo)的間距 位深度越大 縱坐標(biāo)刻度越密集,表示的振幅越精確。
下圖的橫坐標(biāo)間距越小 表示采樣率越高
編碼
編碼:將采樣和量化后的數(shù)字?jǐn)?shù)據(jù)轉(zhuǎn)成二進(jìn)制碼流。
聲道(Channel)
單聲道產(chǎn)生一組聲波數(shù)據(jù),雙聲道(立體聲)產(chǎn)生兩組聲波數(shù)據(jù)。
采樣率44.1kHZ、位深度16bit的1分鐘立體聲PCM數(shù)據(jù)有多大?
- 采樣率 * 位深度 * 聲道數(shù) * 時(shí)間
- 44100 * 16 * 2 * 60 / 8 ≈ 10.34MB
1分鐘10.34MB,這對(duì)于大部分用戶來說是不能接受的。
要想在不改變音頻時(shí)長的前提下,降低音頻數(shù)據(jù)的大小,只有2種方法:
降低采樣指標(biāo)、壓縮。
降低采樣指標(biāo)是不可取的,會(huì)導(dǎo)致音頻質(zhì)量下降,用戶體驗(yàn)變差,因此專家們研發(fā)了各種壓縮方案。
舉個(gè)例子:
現(xiàn)在有個(gè)需求,在局域網(wǎng)內(nèi)實(shí)現(xiàn)實(shí)時(shí)語音,傳輸層協(xié)議使用UDP協(xié)議,如果直接使用AudioRecord進(jìn)行錄制音頻流并發(fā)送到另一端進(jìn)行播放,音質(zhì)會(huì)非常差,而且斷斷續(xù)續(xù),原因如下:
采樣頻率: fm = 44.1KHz
量化位數(shù):16bit
聲道配置:2(雙聲道)
那么,碼率 V = 44.1K * 16 *2 = 1411.2 Kbps = 176.4KBps,即每秒傳輸速率大概176.4KB,
若音頻幀時(shí)間為20ms,每個(gè)音頻數(shù)據(jù)包大小為 size = 176.4KBps * 0.02s = 3.528KB,
一般情況下,我們每次讀取一個(gè)音頻幀的數(shù)據(jù),可以取整為3600Byte,
所以 每秒大概發(fā)送 176.4/3.6=49 個(gè)數(shù)據(jù)包,每個(gè)數(shù)據(jù)包大小為3.6KB。
如果再考慮到數(shù)據(jù)報(bào)頭,實(shí)測每秒發(fā)送約45個(gè)數(shù)據(jù)包,每秒傳輸速率大概180KB。
由于一般都是使用手機(jī)連接Wifi,這就要求網(wǎng)絡(luò)質(zhì)量和硬件設(shè)備必須很好,而且信道干擾較弱,并且鏈接的設(shè)備不能過多。只要稍微信號(hào)不好,就會(huì)導(dǎo)致丟包率特別高,而且延時(shí)十分大,根本無法滿足通信的需要。在這種情況下,我們就需要進(jìn)行語音壓縮、降噪等處理。
比特率
比特率(Bit Rate),指單位時(shí)間內(nèi)傳輸或處理的比特?cái)?shù)量,單位是:比特每秒(bit/s或bps),還有:千比特每秒(Kbit/s或Kbps)、兆比特每秒(Mbit/s或Mbps)、吉比特每秒(Gbit/s或Gbps)、太比特每秒(Tbit/s或Tbps)。
采樣率44.1kHZ、位深度16bit的立體聲PCM數(shù)據(jù)的比特率是多少?
- 采樣率 * 位深度 * 聲道數(shù)
- 44100 * 16 * 2 = 1411.2Kbps
通常,采樣率、位深度越高,數(shù)字化音頻的質(zhì)量就越好。從比特率的計(jì)算公式可以看得出來:比特率越高,數(shù)字化音頻的質(zhì)量就越好。
信噪比
信噪比(Signal-to-noise ratio,SNR,S/N,訊噪比),指信號(hào)與噪聲的比例,用于比較所需信號(hào)的強(qiáng)度與背景噪聲的強(qiáng)度,以分貝(dB)為單位。
位深度限制了信噪比的最大值,它們的關(guān)系如下表所示。
| 4 | 24.08 |
| 8 | 48.16 |
| 11 | 66.22 |
| 12 | 72.24 |
| 16 | 96.33 |
| 18 | 108.37 |
| 20 | 120.41 |
| 24 | 144.49 |
| 32 | 192.66 |
| 48 | 288.99 |
| 64 | 385.32 |
關(guān)于信噪比的意義:
圖像的信噪比和圖像的清晰度一樣,都是衡量圖像質(zhì)量高低的重要指標(biāo)。圖像的信噪比是指視頻信號(hào)的大小與噪波信號(hào)大小的比值,其公式為:
S/N(信噪比)= 20 log (信號(hào)/噪聲)dB
信噪比大,圖像畫面就干凈,看不到什么噪波干擾(表現(xiàn)為“顆粒”和“雪花”),看起來很舒服;若信噪比小,則在畫面上,可能滿是雪花,嚴(yán)重影響圖像畫面。信噪比與圖像質(zhì)量之間具有如下對(duì)應(yīng)關(guān)系:
S/N為60dB(比率為1000:1)時(shí),圖像質(zhì)量優(yōu)良,不出現(xiàn)噪聲;
S/N為50dB(比率為316:1)時(shí),圖像有少量噪聲,但圖像質(zhì)量算好;
S/N為40dB(比率為100:1)時(shí),圖像有一定的精細(xì)顆粒或雪花,圖像的精細(xì)結(jié)構(gòu)受到一定的損失;
S/N為30dB(比率為32:1),圖像將是有大量噪聲的劣質(zhì)圖像;
S/N為20dB(比率為10:1),圖像就不能使用。
影響信噪比的因素很多,例如電源的干擾,電子元器件過熱產(chǎn)生的干擾,光敏元件上的小電壓放大成0.7V視頻信號(hào)時(shí),因放大而產(chǎn)生的噪聲,光照度降低時(shí),放大器增益提高,噪聲也將增加等等。
一般攝像機(jī)的信噪比在50-60dB之間,錄像機(jī)在40-50dB之間。
編碼(Encode)
PCM數(shù)據(jù)可以理解為是:未經(jīng)壓縮的原始音頻數(shù)據(jù),體積比較大,為了更便于存儲(chǔ)和傳輸,一般都會(huì)使用某種音頻編碼對(duì)它進(jìn)行編碼壓縮,然后再存成某種音頻文件格式。
壓縮分為無損壓縮和有損壓縮。
- 無損壓縮
- 解壓后可以完全還原出原始數(shù)據(jù)
- 壓縮比小,體積大
- 有損壓縮
- 解壓后不能完全還原出原始數(shù)據(jù),會(huì)丟失一部分信息
- 壓縮比大,體積小
- 壓縮比越大,丟失的信息就越多,還原后的信號(hào)失真就會(huì)越大
- 一般是通過舍棄原始數(shù)據(jù)中對(duì)人類聽覺不重要的部分,達(dá)成壓縮成較小文件的目的
- 壓縮比 = 未壓縮大小 / 壓縮后大小
解碼(Decode)
當(dāng)需要播放音頻時(shí),得先解碼(解壓縮)出PCM數(shù)據(jù),然后再進(jìn)行播放。
常見的音頻編碼和文件格式
需要注意的是:音頻文件格式并不等于音頻編碼。比如:
- WAV只是一種文件格式,并不是一種編碼
- FLAC既是一種文件格式,又是一種編碼
下面對(duì)常見的音頻編碼和文件格式做一個(gè)簡介。
| Monkey’s Audio | ?? | .ape |
| FLAC(Free Lossless Audio Codec) | ?? | .flac |
| ALAC(Apple Lossless Audio Codec) | ?? | .m4a/.caf |
| MP3(MPEG Audio Layer III) | ? | .mp3 |
| WMA(Windows Media Audio) | ? | .wma |
| AAC(Advanced Audio Coding) | ? | .acc/.mp4/.m4a |
| Vorbis | ? | .ogg |
| Speex | ? | .spx |
| Opus | ? | .opus |
| Ogg | .ogg | |
| WAV(Waveform Audio File Format) | .wav | |
| AIFF(Audio Interchange File Format) | .aiff、.aif |
無損
Monkey’s Audio
Monkey’s Audio,是一種無損的音頻編碼和文件格式,文件擴(kuò)展名為.ape,壓縮率一般在55%左右。
FLAC
FLAC(Free Lossless Audio Codec),是一種無損的音頻編碼和文件格式,文件擴(kuò)展名為.flac。雖然壓縮率稍有不及Monkey’s Audio,但FLAC技術(shù)更先進(jìn),占用資源更低,有更多的平臺(tái)及硬件產(chǎn)品支持FLAC。
ALAC
ALAC(Apple Lossless Audio Codec),是由Apple開發(fā)的一種無損的音頻編碼,文件擴(kuò)展名為.m4a、.caf。
有損
MP3
MP3(MPEG Audio Layer III),是非常流行的一種有損音頻編碼和文件格式,文件擴(kuò)展名為.mp3。
第1版是:MPEG-1 Audio Layer III,屬于國際標(biāo)準(zhǔn)ISO/IEC 11172-3
第2版是:MPEG-2 Audio Layer III,屬于國際標(biāo)準(zhǔn)ISO/IEC 13818-3
第3版是:MPEG-2.5 Audio Layer III,并不是由MPEG官方開發(fā)的,不是公認(rèn)的標(biāo)準(zhǔn)
WMA
WMA(Windows Media Audio),是由Microsoft開發(fā)的音頻編碼和文件格式,文件擴(kuò)展名為.wma。包括4種類型:
WMA:原始的WMA編解碼器,作為MP3的競爭者,屬于有損音頻編碼
WMA Pro:支持更多聲道和更高質(zhì)量的音頻,屬于有損音頻編碼
WMA Lossless:屬于無損音頻編碼
WMA Voice:屬于有損音頻編碼
AAC
AAC(Advanced Audio Coding),是由Fraunhofer IIS、杜比實(shí)驗(yàn)室、AT&T、Sony、Nokia等公司共同開發(fā)的有損音頻編碼和文件格式,壓縮比通常為18:1。
AAC被設(shè)計(jì)為MP3格式的后繼產(chǎn)品,通常在相同的比特率下可以獲得比MP3更高的聲音質(zhì)量,是iPhone、iPod、iPad、iTunes的標(biāo)準(zhǔn)音頻格式。
AAC編碼的文件擴(kuò)展名主要有3種:
.acc:傳統(tǒng)的AAC編碼,使用MPEG-2 Audio Transport Stream(ADTS)容器
.mp4:使用了MPEG-4 Part 14的簡化版即3GPP Media Release 6 Basic(3gp6)進(jìn)行封裝的AAC編碼
.m4a:為了區(qū)別純音頻MP4文件和包含視頻的MP4文件而由Apple公司使用的擴(kuò)展名
Apple iTunes對(duì)純音頻MP4文件采用了.m4a文件擴(kuò)展名
M4A的本質(zhì)和音頻MP4相同,故音頻MP4文件可以直接更改文件擴(kuò)展名為.m4a
Vorbis
Vorbis,是由Xiph.Org基金會(huì)開發(fā)的一種有損音頻編碼。通常以O(shè)gg作為容器格式,所以常合稱為Ogg Vorbis,文件擴(kuò)展名為.ogg。
Speex
Speex,是由Xiph.Org基金會(huì)開發(fā)的一種有損音頻編碼和文件格式,文件擴(kuò)展名為.spx。
Opus
Opus,是由Xiph.Org基金會(huì)開發(fā)的一種有損音頻編碼和文件格式,文件擴(kuò)展名為.opus。用以取代Vorbis和Speedx。經(jīng)過多次盲聽測試,在任何給定的比特率下都比其他標(biāo)準(zhǔn)音頻格式具有更高的質(zhì)量,包括MP3、AAC。
文件格式
Ogg
Ogg是一種多媒體文件格式,由Xiph.Org基金會(huì)所維護(hù),可以納入各式各樣的音視頻編碼(音頻、視頻都可以),文件擴(kuò)展名常為.ogg。
Ogg常用的音頻編碼有:
有損壓縮:Speex、Vorbis、Opus
無損壓縮:FLAC
未壓縮:PCM
WAV
WAV(Waveform Audio File Format),是由IBM和Microsoft開發(fā)的音頻文件格式,擴(kuò)展名是.wav,通常采用PCM編碼,常用于Windows系統(tǒng)中。
AIFF
AIFF(Audio Interchange File Format),由Apple開發(fā)的音頻文件格式,擴(kuò)展名是.aiff、.aif。跟WAV一樣,通常采用PCM編碼,常用于Mac系統(tǒng)中。
有損和無損
根據(jù)采樣率和位深度可以得知:相對(duì)于自然界的信號(hào),音頻編碼最多只能做到無限接近,任何數(shù)字音頻編碼方案都是有損的,因?yàn)闊o法完全還原。目前能夠達(dá)到最高保真水平的就是PCM編碼,因此,PCM約定俗成叫做無損音頻編碼,被廣泛用于素材保存及音樂欣賞,CD、DVD以及常見的WAV文件中均有應(yīng)用。
但并不意味著PCM就能夠確保信號(hào)絕對(duì)保真,PCM也只能做到最大程度的無限接近。我們習(xí)慣性的把MP3列入有損音頻編碼范疇,是相對(duì)于PCM編碼的。要做到真正的無損是困難的,就像用數(shù)字去表達(dá)圓周率,不管精度多高,也只是無限接近,而不是真正等于圓周率的值。
聲波
以揚(yáng)聲器為例子,揚(yáng)聲器發(fā)聲時(shí)是振膜在振動(dòng)。
振膜的振動(dòng)會(huì)導(dǎo)致振膜旁邊的空氣振動(dòng),然后導(dǎo)致更大范圍的空氣跟著一起振動(dòng),最后耳朵旁邊的空氣也開始振動(dòng)。
空氣的振動(dòng)帶來了動(dòng)能(Kinetic Energy),能量傳入了耳朵中,最后就聽到了聲音。
所以,揚(yáng)聲器可以通過空氣來傳播能量,而不是傳播空氣本身。
聲音與波有著相同的關(guān)鍵特征:可以通過介質(zhì)傳播能量,而不是傳播介質(zhì)本身。
- 因此,我們也把聲音稱為聲波
- 聲音的傳播介質(zhì)可以是氣體、液體、固體,比如:2個(gè)人面對(duì)面交流時(shí),聲音是通過空氣傳播到對(duì)方耳中
為什么自己錄下來的聲音和平時(shí)說話的聲音,聽起來會(huì)不太一樣?
- 當(dāng)自己說話的時(shí)候,實(shí)際上自己聽到了2個(gè)聲音,分別來自2種不同的傳播介質(zhì)
- 聲波 → 空氣 → 耳朵
- 聲波 → 血肉、骨骼等介質(zhì) → 耳朵
- 錄制聲音時(shí)
- 聲波 → 空氣 → 錄音設(shè)備
- 當(dāng)聽自己錄下來的聲音時(shí),自己只聽到了1個(gè)聲音
- 聲波 → 空氣 → 耳朵
- 所以,平時(shí)別人耳中聽到的你說話的聲音,就是你錄音中的聲音
人耳又是如何聽到聲音的呢?
大概過程是:聲源 → 耳廓(收集聲波) → 外耳道(傳遞聲波) → 鼓膜(將聲波轉(zhuǎn)換成振動(dòng)) → 聽小骨(放大振動(dòng)) → 耳蝸(將振動(dòng)轉(zhuǎn)換成電信號(hào)) → 聽覺神經(jīng)(傳遞電信號(hào)) → 大腦(形成聽覺)
如果只關(guān)注單個(gè)空氣分子,可以發(fā)現(xiàn):它來回振動(dòng)的軌跡,就是一個(gè)正弦或余弦函數(shù)的曲線圖
橫軸:代表時(shí)間。
縱軸:代表空氣分子來回振動(dòng)時(shí)產(chǎn)生的位移。
平衡位置:該空氣分子的未受振動(dòng)干擾時(shí)的位置
從平衡位置到最大位移位置之間的距離,叫做振幅(Amplitude)。
空氣分子完全來回振動(dòng)一次所花費(fèi)的時(shí)間,叫做周期(Period),單位是秒(s)。
物體每秒來回振動(dòng)的次數(shù),叫做頻率(Frequency),也就是周期分之一。
- 單位是秒分之一(1/s),也稱為赫茲(Hz)
- 比如440Hz代表物體每秒來回振動(dòng)440次
- 因此,頻率用來表示物體振動(dòng)的快慢
理論上,人類的發(fā)聲頻率是85Hz ~ 1100Hz,人類只能聽見20Hz ~ 20000Hz之間的聲音。
- 低于20Hz的稱為:次聲波(Infrasound)
- 高于20000Hz的稱為:超聲波(Ultrasound)
音調(diào)
頻率越高,音調(diào)就越高。
頻率越低,音調(diào)就越低。
通常女生講話時(shí),聲帶振動(dòng)的頻率就比較高,因此我們聽到的音調(diào)就高,而男生講話時(shí),聲帶振動(dòng)的頻率就比較低,因此我們聽到的音調(diào)就低。
響度
當(dāng)提高聲音的響度(音量,大小)時(shí),振動(dòng)的幅度會(huì)變大。
我們常用dB(分貝)來描述聲音的響度。
| 0 | 剛能聽到的聲音 |
| 15以下 | 感覺安靜 |
| 30 | 耳語的音量大小 |
| 40 | 冰箱的嗡嗡聲 |
| 60 | 正常交談的聲音 |
| 70 | 相當(dāng)于走在鬧市區(qū) |
| 85 | 汽車穿梭的馬路上 |
| 95 | 摩托車啟動(dòng)聲音 |
| 100 | 裝修電鉆的聲音 |
| 110 | 卡拉OK、大聲播放MP3的聲音 |
| 120 | 飛機(jī)起飛時(shí)的聲音 |
| 150 | 燃放煙花爆竹的聲音 |
音色
音色(Timbre)是指聲音的特色。
- 不同的聲源由于其材料、結(jié)構(gòu)不同,則發(fā)出聲音的音色也不同
- 我們之所以能夠根據(jù)聲音區(qū)分出不同的樂器、不同的人,都是因?yàn)樗鼈兊囊羯煌?/li>
- 不同音色的聲音,即使在同一響度和同一音調(diào)的情況下,也能讓人區(qū)分開來
原理
通常聲源的振動(dòng)產(chǎn)生的并不是單一頻率的聲波,而是由基音和不同頻率的泛音組成的復(fù)合聲音。
- 當(dāng)聲源的主體振動(dòng)時(shí)會(huì)發(fā)出一個(gè)基音(基本頻率,基頻,Fundamental Frequency)
- 同時(shí)其余各部分也有復(fù)合的聲源,這些聲源組合產(chǎn)生泛音
- 泛音(Overtone)其實(shí)就是物理學(xué)上的諧波(Harmonic)
音調(diào)是由基音決定的,而音色主要取決于泛音。
音色不同,波形也就不同。
聲音的最終波形是由多個(gè)不同的波形組合而成的。
噪音
聲源作無規(guī)則振動(dòng)時(shí)發(fā)出的聲音
長期的噪音可以影響人的身心健康。
- 噪音可能導(dǎo)致各種不同程度的聽力喪失
- 長時(shí)間處于85分貝以上的噪音可以影響人的聽力
- 響于120分貝的噪音可以使人耳聾
研究表明:
- 讓人討厭的噪音和嬰兒啼哭及人類尖叫的聲音有著相同的頻率
- 人耳對(duì)2000Hz ~ 4000Hz范圍內(nèi)的聲音是難以接受的
- 而指甲刮黑板聲音的特殊之處,就在于它的頻率,正好處于2000Hz ~ 4000Hz頻段內(nèi)
大腦中的杏仁核(Amygdala)在聽到指甲刮黑板的聲音時(shí),會(huì)異常興奮,于是霸道地接管了大腦聽覺的任務(wù),向聽覺皮層(Auditory Cortex)發(fā)出痛苦的信息。聽覺皮層是屬于大腦皮層(大腦皮質(zhì),Cerebral Cortex)的一部分。
像素
一個(gè)圖的分辨率是60x50,用Photoshop放大圖片上百倍后,可以清晰地看到圖片由若干個(gè)方形的色塊組成,每一個(gè)方形的色塊被稱為:像素(Pixel)。這張圖片的每一行都有60個(gè)像素,共50行,總共60*50=3000個(gè)像素。
總結(jié)一下:
- 每張圖片都是由N個(gè)像素組成的(N≥1)
- 如果一張圖片的分辨率是WxH,那么:
- 每一行都有W個(gè)像素,共H行,總共W*H個(gè)像素
- 寬度是W像素,高度是H像素
每個(gè)像素都有自己獨(dú)立的顏色,若干個(gè)像素就組成了一張色彩繽紛的完整圖片。
RGB顏色模型
實(shí)驗(yàn)發(fā)現(xiàn):太陽光通過三棱鏡折射后,會(huì)被折射分散成紅、橙、黃、綠、藍(lán)、靛、紫7種單色光。其中的紅、綠、藍(lán)被稱為是色光三原色。
接下來,再看一個(gè)很重要的概念:RGB顏色模型(RGB color model),又稱為三原色光模式。
- 將紅(Red)、綠(Green)、藍(lán)(Blue)三原色的色光以不同的含量相疊加,可以合成產(chǎn)生各種色彩光
每個(gè)像素的顏色,可以通過紅色、綠色、藍(lán)色以不同的含量混合而成。比如:
- 紅色(Red)、綠色(Green)可以合成:黃色(Yellow)
- 紅色(Red)、藍(lán)色(Blue)可以合成:洋紅色(Magenta)
- 綠色(Green)、藍(lán)色(Blue)可以合成:青色(Cyan)
- 紅色(Red)、綠色(Green)、藍(lán)色(Blue)可以合成:白色(White)
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-YPGOyZWN-1634558631089)(C:\Users\jym\Desktop\497279-20210301182807299-1567553861.png)]
位深度
每一個(gè)像素的顏色信息是如何存儲(chǔ)的呢?
- 取決于圖片的位深度(Bit Depth),也稱為:色彩深度(Color Depth,簡稱:色深)
- 如果一張圖片的位深度為n,那么它的每一個(gè)像素都會(huì)使用n個(gè)二進(jìn)制位來存儲(chǔ)顏色信息
位深度是24,它的具體含義是:
- 每一個(gè)像素都會(huì)使用24個(gè)二進(jìn)制位來存儲(chǔ)顏色信息
- 每一個(gè)像素的顏色都是由紅(Red)、綠(Green)、藍(lán)(Blue)3個(gè)顏色通道合成的
- 每個(gè)顏色通道都用8bit來表示其“含量”(值),取值范圍是:
- 二進(jìn)制:00000000~11111111
- 十進(jìn)制:0~255
- 十六進(jìn)制:00~FF
- 舉例:01000000 11100000 11010000(共24bit)表示綠寶石色(Turquoise)
- 紅色的值:二進(jìn)制01000000,十進(jìn)制64,十六進(jìn)制40
- 綠色的值:二進(jìn)制11100000,十進(jìn)制224,十六進(jìn)制E0
- 藍(lán)色的值:二進(jìn)制11010000,十進(jìn)制208,十六進(jìn)制D0
- 64的紅色 + 224的綠色 + 208的藍(lán)色 = 綠寶石色
24bit顏色的表示形式
我們常用2種形式來表示24bit顏色,比如剛才提到的綠寶石色
- 十進(jìn)制:rgb(64, 224, 208)
- 十六進(jìn)制:#40E0D0
常見的24bit顏色:
- 紅色:rgb(255, 0, 0),#FF0000
- 綠色:rgb(0, 255, 0),#00FF00
- 藍(lán)色: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
- 當(dāng)紅綠藍(lán)全為0時(shí),就是黑色
- 這個(gè)其實(shí)很容易理解:沒有任何光,自然是一片漆黑
- 所以說:黑色是世界上最純潔的顏色,因?yàn)樗兑矝]有,(づ。????。)づ
- 相反,白色是世界上最不純潔的顏色,因?yàn)樗抖加?#xff0c;而且都是滿色(全是255)
- 更多顏色,可以參考顏色對(duì)照表,紅綠藍(lán)的比例不同,合成的顏色也就不同
顏色數(shù)量
如果位深度為n,那么每一個(gè)像素能顯示2n種顏色。
- 所以,位深度為24時(shí),每一個(gè)像素能顯示224種顏色,也就是16777216種顏色(約1678萬)
- 24bit顏色,也被稱為是:真彩色(True Color),也就是常說的24位真彩
其他位深度
除了24bit,常見的位深度還有:
- 1bit:2種顏色,黑白兩色
- 3bit:8種顏色,用于大部分早期的電腦顯示器,紅綠藍(lán)各占1位
- 8bit:256種顏色,用于最早期的彩色Unix工作站,紅色占3位、綠色占3位、藍(lán)色占2位
- 16bit:紅色占5位、藍(lán)色占5位、綠色占6位
- 32bit:基于24位,增加8個(gè)位的透明通道
- 可以表示帶有透明度的顏色
- 比如CSS中的rgba(255, 0, 0, 0.5)表示50%透明度的紅色
不同位深度的對(duì)比
位深度越大,能表示的顏色數(shù)量就越多,圖片也就越鮮艷,顏色過渡就會(huì)越平滑。
格式
一說到圖片,馬上能想到拓展名為jpg、png、gif的圖片文件。
每張圖片都有自己的大小,一張圖片的大小是如何計(jì)算出來的?為什么dragon01.jpg的大小是288KB?
- 要想知道一張圖片的大小是多少?首先得知道每個(gè)像素的大小是多少。
- 如果位深度是n,那么每個(gè)像素的大小就是n個(gè)二進(jìn)制位
分辨率是60x50,位深度是24,所以:
- 每個(gè)像素的大小是:24bit(3字節(jié),1字節(jié)=8bit)
- 圖片的理論大小是:(6050)(24/8)=9000B≈8.79KB
但實(shí)際上會(huì)發(fā)現(xiàn):在相同分辨率、相同位深度的前提下,把這張圖片存成2種不同的格式(jpg、png),它們的大小是不同的,而且都小于理論上的8.79KB。
其實(shí)jpg、png都是經(jīng)過壓縮后的圖片(具體的壓縮算法和原理,就不在此討論了,大家可以到網(wǎng)上自行搜索),所以它們的大小會(huì)比理論值偏小。
圖片的壓縮類型可以分為2種:
- 無損壓縮
- 不損失圖片質(zhì)量
- 壓縮比小,體積大
- 解壓(顯示)后能夠還原出完整的原始圖片數(shù)據(jù),不會(huì)損失任何圖片信息
- 有損壓縮
- 會(huì)損失圖片質(zhì)量
- 壓縮比大,體積小
- 解壓(顯示)后無法還原出完整的原始圖片數(shù)據(jù),會(huì)損失掉一些圖片信息
- 壓縮比 = 未壓縮大小 / 壓縮后大小
| JPG(JPEG) | 有損壓縮 | 24bit |
| PNG | 無損壓縮 | 8bit、24bit、32bit |
| GIF | 無損壓縮 | 8bit |
眾所周知,gif是一種支持動(dòng)畫的圖片,所以一般也叫作gif動(dòng)態(tài)圖,微信的動(dòng)態(tài)表情包就是基于gif動(dòng)態(tài)圖。
gif動(dòng)畫的實(shí)現(xiàn)原理類似手翻書。gif的動(dòng)畫原理是:
- gif內(nèi)部存儲(chǔ)了很多幀(張)靜態(tài)圖片
- 在短時(shí)間內(nèi),連續(xù)按順序地呈現(xiàn)每一幀靜態(tài)圖片,就形成了動(dòng)畫的效果
動(dòng)畫
不管是gif動(dòng)態(tài)圖,還是手翻書,它們的動(dòng)畫原理其實(shí)都基于:視覺暫留(Persistence of vision)現(xiàn)象。
- 當(dāng)人眼所看到的影像消失后,人眼仍能繼續(xù)保留其影像約0.1~0.4秒左右,這種現(xiàn)象被稱為視覺暫留現(xiàn)象
- 人眼觀看物體時(shí),成像于視網(wǎng)膜上,并由視神經(jīng)輸入人腦,感覺到物體的像,但當(dāng)物體移去時(shí),視神經(jīng)對(duì)物體的印象不會(huì)立即消失,而要延續(xù)0.1~0.4秒的時(shí)間,人眼的這種性質(zhì)被稱為“眼睛的視覺暫留”
- 我們?nèi)粘J褂玫娜展鉄裘棵氪蠹s熄滅100余次,但我們基本感覺不到日光燈的閃動(dòng),這都是因?yàn)橐曈X暫留的作用
- 在一幀圖片消失在大腦中之前呈現(xiàn)下一幀圖片,反復(fù)如此,就可以形成連貫的動(dòng)畫效果
- 電影的幀率是24fps
- fps:每秒的幀數(shù),Frames Per Second
YUV
YUV,是一種顏色編碼方法,跟RGB是同一個(gè)級(jí)別的概念,廣泛應(yīng)用于多媒體領(lǐng)域中。
也就是說,圖像中每1個(gè)像素的顏色信息,除了可以用RGB的方式表示,也可以用YUV的方式表示。
對(duì)比RGB,YUV有哪些不同和優(yōu)勢呢?
體積更小
- 如果使用RGB
- 比如RGB888(R、G、B每個(gè)分量都是8bit)
- 1個(gè)像素占用24bit(3字節(jié))
- 如果使用YUV
- 1個(gè)像素可以減小至平均只占用12bit(1.5字節(jié))
- 體積為RGB888的一半
組成
RGB數(shù)據(jù)由R、G、B三個(gè)分量組成。
YUV數(shù)據(jù)由Y、U、V三個(gè)分量組成,現(xiàn)在通常說的YUV指的是YCbCr。
- Y:表示亮度(Luminance、Luma),占8bit(1字節(jié))
- Cb、Cr:表示色度(Chrominance、Chroma)
- Cb(U):藍(lán)色色度分量,占8bit(1字節(jié))
- Cr(V):紅色色度分量,占8bit(1字節(jié))
兼容性
- Y分量對(duì)呈現(xiàn)出清晰的圖像有著很大的貢獻(xiàn)
- Cb、Cr分量的內(nèi)容不太容易識(shí)別清楚
Y分量的內(nèi)容:其實(shí)以前黑白電視的畫面就是這樣子。
YUV的發(fā)明處在彩色電視與黑白電視的過渡時(shí)期。
- YUV將亮度信息(Y)與色度信息(UV)分離,沒有UV信息一樣可以顯示完整的圖像,只不過是黑白的
- 這樣的設(shè)計(jì)很好地解決了彩色電視與黑白電視的兼容性問題,使黑白電視也能夠接收彩色電視信號(hào),只不過它只顯示了Y分量
- 彩色電視有Y、U、V分量,如果去掉UV分量,剩下的Y分量和黑白電視相同
RGB和YUV轉(zhuǎn)換
公式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.770U- RGB的取值范圍是[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]
色度二次采樣
原理
人眼的視網(wǎng)膜上,分布著兩種感光細(xì)胞:視桿細(xì)胞和視錐細(xì)胞。
- 視桿細(xì)胞
- 感知光線的強(qiáng)弱
- 沒有色彩識(shí)別功能
- 負(fù)責(zé)夜間非彩色視覺
- 視錐細(xì)胞
- 感知顏色
- 負(fù)責(zé)白天彩色視覺
- 如果你的視錐細(xì)胞發(fā)育不正常,數(shù)量太少,那感知顏色就會(huì)受阻,可能會(huì)導(dǎo)致你色弱
人眼中有上億個(gè)感光細(xì)胞,其中視桿細(xì)胞占了95%,而視錐細(xì)胞僅占5%。
因此,人眼對(duì)亮度的敏感程度要高于對(duì)色度的敏感程度,人眼對(duì)于亮度的分辨要比對(duì)顏色的分辨精細(xì)一些。
如果把圖像的色度分量減少一些,人眼也絲毫感覺不到變化和差異。
概念
如果在色度分量上進(jìn)行(相對(duì)亮度分量)較低分辨率的采樣,也就是存儲(chǔ)較多的亮度細(xì)節(jié)、較少的色度細(xì)節(jié),這樣就可以在不明顯降低畫面質(zhì)量的同時(shí)減小圖像的體積。上述過程稱為:色度二次采樣(Chroma Subsampling)。
采樣格式
采樣格式通常用A:B:C的形式來表示,比如4:4:4、4:2:2、4:2:0等,其中我們最需要關(guān)注的是4:2:0。
- A:一塊A*2個(gè)像素的概念區(qū)域,一般都是4
- B:第1行的色度采樣數(shù)目
- C:第2行的色度采樣數(shù)目
- C的值一般要么等于B,要么等于0
下圖可以看出:最上面的圖像顏色是下面兩個(gè)圖像顏色疊加。
下圖可以看出 左右兩個(gè)圖像顏色疊加產(chǎn)生第三列的圖像顏色
上圖中,不管是哪種采樣格式,Y分量都是全水平、全垂直分辨率采樣的,每一個(gè)像素都有自己獨(dú)立的Y分量。
4:4:4
- 第1行采集4組CbCr分量,第2行采集4組CbCr分量
- 每1個(gè)像素都有自己獨(dú)立的1組CbCr分量
- Y分量與CbCr分量的水平方向比例是1:1(每1列都有1組CbCr分量)
- Y分量與CbCr分量的垂直方向比例是1:1(每1行都有1組CbCr分量)
- Y分量與CbCr分量的總比例是1:1
- 1個(gè)像素占用24bit(3字節(jié)),跟RGB888的體積一樣
- 24bpp(bits per pixel)
- 這種格式是沒有進(jìn)行色度二次采樣的
4:2:2
- 第1行采集2組CbCr分量,第2行采集2組CbCr分量
- 水平方向相鄰的2個(gè)像素(1行2列)共用1組CbCr分量
- Y分量與CbCr分量的水平方向比例是2:1(每2列就有1組CbCr分量)
- Y分量與CbCr分量的垂直方向比例是1:1(每1行都有1組CbCr分量)
- Y分量與CbCr分量的總比例是2:1
- 1個(gè)像素平均占用16bit(2字節(jié))
- 16bpp
- 因?yàn)?個(gè)像素共占用32bit(4字節(jié) = 2個(gè)Y分量 + 1個(gè)Cb分量 + 1個(gè)Cr分量)
4:2:0
- 第1行采集2組CbCr分量,第2行共享第1行的CbCr分量
- 相鄰的4個(gè)像素(2行2列)共用1組CbCr分量
- Y分量與CbCr分量的水平方向比例是2:1(每2列就有1組CbCr分量)
- Y分量與CbCr分量的垂直方向比例是2:1(每2行就有1組CbCr分量)
- Y分量與CbCr分量的總比例是4:1
- 1個(gè)像素平均占用12bit(1.5字節(jié))
- 12bpp
- 因?yàn)?個(gè)像素共占用48bit(6字節(jié) = 4個(gè)Y分量 + 1個(gè)Cb分量 + 1個(gè)Cr分量)
H.264編碼
計(jì)算一下:10秒鐘1080p(1920x1080)、30fps的YUV420P原始視頻,需要占用多大的存儲(chǔ)空間?
- (10 * 30) * (1920 * 1080) * 1.5 = 933120000字節(jié) ≈ 889.89MB
- 可以看得出來,原始視頻的體積是非常巨大的
由于網(wǎng)絡(luò)帶寬和硬盤存儲(chǔ)空間都是非常有限的,因此,需要先使用視頻編碼技術(shù)(比如H.264編碼)對(duì)原始視頻進(jìn)行壓縮,然后再進(jìn)行存儲(chǔ)和分發(fā)。H.264編碼的壓縮比可以達(dá)到至少是100:1。
H.264,又稱為MPEG-4 Part 10,Advanced Video Coding。
- 譯為:MPEG-4第10部分,高級(jí)視頻編碼
- 簡稱:MPEG-4 AVC
H.264是迄今為止視頻錄制、壓縮和分發(fā)的最常用格式。截至2019年9月,已有91%的視頻開發(fā)人員使用了該格式。H.264提供了明顯優(yōu)于以前任何標(biāo)準(zhǔn)的壓縮性能。H.264因其是藍(lán)光盤的其中一種編解碼標(biāo)準(zhǔn)而著名,所有藍(lán)光盤播放器都必須能解碼H.264。
編碼器
H.264標(biāo)準(zhǔn)允許制造廠商自由地開發(fā)具有競爭力的創(chuàng)新產(chǎn)品,它并沒有定義一個(gè)編碼器,而是定義了編碼器應(yīng)該產(chǎn)生的輸出碼流。
x264是一款免費(fèi)的高性能的H.264開源編碼器。x264編碼器在FFmpeg中的名稱是libx264。
解碼器
H.264標(biāo)準(zhǔn)中定義了一個(gè)解碼方法,但是制造廠商可以自由地開發(fā)可選的具有競爭力的、新的解碼器,前提是他們能夠獲得與標(biāo)準(zhǔn)中采用的方法同樣的結(jié)果。
FFmpeg默認(rèn)已經(jīng)內(nèi)置了一個(gè)H.264的解碼器,名稱是h264。
編碼過程與原理
大體可以歸納為以下幾個(gè)主要步驟:
- 劃分幀類型
- 幀內(nèi)/幀間編碼
- 變換 + 量化
- 濾波
- 熵編碼
劃分幀類型
有統(tǒng)計(jì)結(jié)果表明:在連續(xù)的幾幀圖像中,一般只有10%以內(nèi)的像素有差別,亮度的差值變化不超過2%,而色度的差值變化只在1%以內(nèi)。
于是可以將一串連續(xù)的相似的幀歸到一個(gè)圖像群組(Group Of Pictures,GOP)。
GOP中的幀可以分為3種類型:
- I幀(I Picture、I Frame、Intra Coded Picture),譯為:幀內(nèi)編碼圖像,也叫做關(guān)鍵幀(Keyframe)
- 是視頻的第一幀,也是GOP的第一幀,一個(gè)GOP只有一個(gè)I幀
- 編碼
- 對(duì)整幀圖像數(shù)據(jù)進(jìn)行編碼
- 解碼
- 僅用當(dāng)前I幀的編碼數(shù)據(jù)就可以解碼出完整的圖像
- 是一種自帶全部信息的獨(dú)立幀,無需參考其他圖像便可獨(dú)立進(jìn)行解碼,可以簡單理解為一張靜態(tài)圖像
- P幀(P Picture、P Frame、Predictive Coded Picture),譯為:預(yù)測編碼圖像
- 編碼
- 并不會(huì)對(duì)整幀圖像數(shù)據(jù)進(jìn)行編碼
- 以前面的I幀或P幀作為參考幀,只編碼當(dāng)前P幀與參考幀的差異數(shù)據(jù)
- 解碼
- 需要先解碼出前面的參考幀,再結(jié)合差異數(shù)據(jù)解碼出當(dāng)前P幀完整的圖像
- 編碼
- B幀(B Picture、B Frame、Bipredictive Coded Picture),譯為:前后預(yù)測編碼圖像
- 編碼
- 并不會(huì)對(duì)整幀圖像數(shù)據(jù)進(jìn)行編碼
- 同時(shí)以前面、后面的I幀或P幀作為參考幀,只編碼當(dāng)前B幀與前后參考幀的差異數(shù)據(jù)
- 因?yàn)榭蓞⒖嫉膸兌嗔?#xff0c;所以只需要存儲(chǔ)更少的差異數(shù)據(jù)
- 解碼
- 需要先解碼出前后的參考幀,再結(jié)合差異數(shù)據(jù)解碼出當(dāng)前B幀完整的圖像
- 編碼
不難看出,編碼后的數(shù)據(jù)大小:I幀 > P幀 > B幀。
GOP的長度
GOP的長度表示GOP的幀數(shù)。GOP的長度需要控制在合理范圍,以平衡視頻質(zhì)量、視頻大小(網(wǎng)絡(luò)帶寬)和seek效果(拖動(dòng)、快進(jìn)的響應(yīng)速度)等。
- 加大GOP長度有利于減小視頻文件大小,但也不宜設(shè)置過大,太大則會(huì)導(dǎo)致GOP后部幀的畫面失真,影響視頻質(zhì)量
- 由于P、B幀的復(fù)雜度大于I幀,GOP值過大,過多的P、B幀會(huì)影響編碼效率,使編碼效率降低
- 如果設(shè)置過小的GOP值,視頻文件會(huì)比較大,則需要提高視頻的輸出碼率,以確保畫面質(zhì)量不會(huì)降低,故會(huì)增加網(wǎng)絡(luò)帶寬
- GOP長度也是影響視頻seek響應(yīng)速度的關(guān)鍵因素,seek時(shí)播放器需要定位到離指定位置最近的前一個(gè)I幀,如果GOP太大意味著距離指定位置可能越遠(yuǎn)(需要解碼的參考幀就越多)、seek響應(yīng)的時(shí)間(緩沖時(shí)間)也越長
GOP的類型
GOP又可以分為開放(Open)、封閉(Closed)兩種。
- Open
- 前一個(gè)GOP的B幀可以參考下一個(gè)GOP的I幀
- Closed
- 前一個(gè)GOP的B幀不能參考下一個(gè)GOP的I幀
- GOP不能以B幀結(jié)尾
需要注意的是:
- 由于P幀、B幀都對(duì)前面的參考幀(P幀、I幀)有依賴性,因此,一旦前面的參考幀出現(xiàn)數(shù)據(jù)錯(cuò)誤,就會(huì)導(dǎo)致后面的P幀、B幀也出現(xiàn)數(shù)據(jù)錯(cuò)誤,而且這種錯(cuò)誤還會(huì)繼續(xù)向后傳播
- 對(duì)于普通的I幀,其后的P幀和B幀可以參考該普通I幀之前的其他I幀
在Closed GOP中,有一種特殊的I幀,叫做IDR幀(Instantaneous Decoder Refresh,譯為:即時(shí)解碼刷新)。
- 當(dāng)遇到IDR幀時(shí),會(huì)清空參考幀隊(duì)列
- 如果前一個(gè)序列出現(xiàn)重大錯(cuò)誤,在這里可以獲得重新同步的機(jī)會(huì),使錯(cuò)誤不會(huì)繼續(xù)往下傳播
- 一個(gè)IDR幀之后的所有幀,永遠(yuǎn)都不會(huì)參考該IDR幀之前的幀
- 視頻播放時(shí),播放器一般都支持隨機(jī)seek(拖動(dòng))到指定位置,而播放器直接選擇到指定位置附近的IDR幀進(jìn)行播放最為便捷,因?yàn)榭梢悦鞔_知道該IDR幀之后的所有幀都不會(huì)參考其之前的其他I幀,從而避免較為復(fù)雜的反向解析
幀內(nèi)/幀間編碼
I幀采用的是幀內(nèi)(Intra Frame)編碼,處理的是空間冗余。
P幀、B幀采用的是幀間(Inter Frame)編碼,處理的是時(shí)間冗余。
劃分宏塊
在進(jìn)行編碼之前,首先要將一張完整的幀切割成多個(gè)宏塊(Macroblock),H.264中的宏塊大小通常是16x16。
宏塊可以進(jìn)一步拆分為多個(gè)更小的變換塊(Transform blocks)、預(yù)測塊(Prediction blocks)。
- 變換塊的尺寸有:16x16、8x8、4x4
- 預(yù)測塊的尺寸有:16×16、16×8、8×16、8×8、8×4、4×8、4×4
幀內(nèi)編碼
幀內(nèi)編碼,也稱幀內(nèi)預(yù)測。以4x4的預(yù)測塊為例,共有9種可選的預(yù)測模式。
利用幀內(nèi)預(yù)測技術(shù),可以得到預(yù)測幀,最終只需要保留預(yù)測模式信息、以及預(yù)測幀與原始幀的殘差值。
編碼器會(huì)選取最佳預(yù)測模式,使預(yù)測幀更加接近原始幀,減少相互間的差異,提高編碼的壓縮效率。
幀間編碼
幀間編碼,也稱幀間預(yù)測,用到了運(yùn)動(dòng)補(bǔ)償(Motion compensation)技術(shù)。
編碼器利用塊匹配算法,嘗試在先前已編碼的幀(稱為參考幀)上搜索與正在編碼的塊相似的塊。如果編碼器搜索成功,則可以使用稱為運(yùn)動(dòng)矢量的向量對(duì)塊進(jìn)行編碼,該向量指向匹配塊在參考幀處的位置。
在大多數(shù)情況下,編碼器將成功執(zhí)行,但是找到的塊可能與它正在編碼的塊不完全匹配。這就是編碼器將計(jì)算它們之間差異的原因。這些殘差值稱為預(yù)測誤差,需要進(jìn)行變換并將其發(fā)送給解碼器。
綜上所述,如果編碼器在參考幀上成功找到匹配塊,它將獲得指向匹配塊的運(yùn)動(dòng)矢量和預(yù)測誤差。使用這兩個(gè)元素,解碼器將能夠恢復(fù)該塊的原始像素。
如果一切順利,該算法將能夠找到一個(gè)幾乎沒有預(yù)測誤差的匹配塊,因此,一旦進(jìn)行變換,運(yùn)動(dòng)矢量加上預(yù)測誤差的總大小將小于原始編碼的大小。
如果塊匹配算法未能找到合適的匹配,則預(yù)測誤差將是可觀的。因此,運(yùn)動(dòng)矢量的總大小加上預(yù)測誤差將大于原始編碼。在這種情況下,編碼器將產(chǎn)生異常,并為該特定塊發(fā)送原始編碼。
變換與量化
接下來對(duì)殘差值進(jìn)行DCT變換(Discrete Cosine Transform,譯為離散余弦變換)。
規(guī)格
H.264的主要規(guī)格有:
- Baseline Profile(BP)
- 支持I/P幀,只支持無交錯(cuò)(Progressive)和CAVLC
- 一般用于低階或需要額外容錯(cuò)的應(yīng)用,比如視頻通話、手機(jī)視頻等即時(shí)通信領(lǐng)域
- Extended Profile(XP)
- 在Baseline的基礎(chǔ)上增加了額外的功能,支持流之間的切換,改進(jìn)誤碼性能
- 支持I/P/B/SP/SI幀,只支持無交錯(cuò)(Progressive)和CAVLC
- 適合于視頻流在網(wǎng)絡(luò)上的傳輸場合,比如視頻點(diǎn)播
- Main Profile(MP)
- 提供I/P/B幀,支持無交錯(cuò)(Progressive)和交錯(cuò)(Interlaced),支持CAVLC和CABAC
- 用于主流消費(fèi)類電子產(chǎn)品規(guī)格如低解碼(相對(duì)而言)的MP4、便攜的視頻播放器、PSP和iPod等
- High Profile(HiP)
- 最常用的規(guī)格
- 在Main的基礎(chǔ)上增加了8x8內(nèi)部預(yù)測、自定義量化、無損視頻編碼和更多的YUV格式(如4:4:4)
- High 4:2:2 Profile(Hi422P)
- High 4:4:4 Predictive Profile(Hi444PP)
- High 4:2:2 Intra Profile
- High 4:4:4 Intra Profile
- 用于廣播及視頻碟片存儲(chǔ)(藍(lán)光影片),高清電視的應(yīng)用
部分內(nèi)容來自網(wǎng)絡(luò)以及參考https://www.cnblogs.com/mjios/p/14810630.html
總結(jié)
以上是生活随笔為你收集整理的音频和视频的基础知识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何截取视频片段 批量截取片段的方法
- 下一篇: FFmpeg:截取视频片段转成GIF动画