音視頻之所以叫音視頻是因?yàn)樗梢纛l和視頻構(gòu)成,我們平時(shí)看的視頻其實(shí)就是音視頻。本文將記錄筆者在學(xué)習(xí)音視頻遇到的概念,如果你和筆者一樣對(duì)音視頻并沒(méi)有接觸太多,那么下面的筆記將會(huì)幫你認(rèn)識(shí)音視頻。
音頻
聲波
-
頻率:頻率代表音階的高低
- 頻率(Hz)越高,波長(zhǎng)越短
- 頻率越低,波長(zhǎng)越長(zhǎng)
- 波長(zhǎng)越長(zhǎng),聲音更容易繞過(guò)障礙物,傳得越遠(yuǎn)
-
振幅:振幅代表響度,響度就是能量大小的反應(yīng)
- 分貝(dB)是描述響度大小(聲音強(qiáng)度)的單位
-
分貝是無(wú)量綱,指兩個(gè)相同的物理量A1(被量度量)和A0(基準(zhǔn)量或參考量)之比取以10為底的對(duì)數(shù)并乘以10(或20),即
-
波形:波形代表音色
- 音色不同的情況下,在同樣的音調(diào)(頻率)和響度(振幅)下聲音也是不同
-
聲壓:聲波通過(guò)媒質(zhì)時(shí),由振動(dòng)所產(chǎn)生的壓強(qiáng)改變量
- 聲壓的衡量單位是帕斯卡(Pa)
-
聲壓級(jí):指以對(duì)數(shù)尺衡量有效聲壓相對(duì)于一個(gè)基準(zhǔn)值的大小
- 分貝(dB)描述聲壓值與基準(zhǔn)值的關(guān)系,變化范圍大,可以達(dá)到六個(gè)數(shù)量級(jí)以上
- 在聲壓級(jí)較低時(shí),聽覺(jué)的頻率特性會(huì)很不均勻
- 在聲壓級(jí)較高時(shí),聽覺(jué)的頻率特性會(huì)變得較為均勻
人耳
- 能聽到的頻率范圍:20Hz ~ 20kHz
- 較敏感頻率范圍:3 ~ 4kHz
- 頻率較寬的音樂(lè)聲壓:80 ~ 90dB 為最佳,超過(guò) 90dB 將會(huì)損害人耳
- 人耳極限:105dB
- 兩種聲音傳到我們耳朵的時(shí)差小于80ms,我們就無(wú)法區(qū)分兩種聲音
數(shù)字音頻
為了將音頻信號(hào)數(shù)字化,需要進(jìn)行采樣、量化和編碼三個(gè)步驟。
-
采樣:采樣是在時(shí)間軸上對(duì)信號(hào)進(jìn)行數(shù)字化。根據(jù)奈奎斯特定理(也稱采樣定理),按比聲音最高頻率2倍以上的頻率對(duì)聲音進(jìn)行采樣(也稱為AD轉(zhuǎn)換)
- 采樣頻率(采樣率):表示一秒中采樣的次數(shù),采樣率一般為44.1kHz
- 量化:量化是指在幅度軸上對(duì)信號(hào)進(jìn)行數(shù)字化,比如用 16 比特的二進(jìn)制信號(hào)來(lái)表示聲音的一個(gè)采集,而16 比特(一個(gè)short)所表示的范圍是[-32768, 32767],共有 65536 個(gè)可能取值,因此最終的音頻信號(hào)在幅度上也分為 65535 層
- 編碼:按照一定的格式記錄采樣和量化的數(shù)字?jǐn)?shù)據(jù)
描述概念
-
量化格式(sampleFormat):也叫位深度,是音頻采樣一次所需要的容量
- 單位:bit、byte
-
采樣率(sampleRate):
- 單位:Hz、kHz
- 聲道數(shù)(channel)
-
比特率(碼率)(bit rate):1秒時(shí)間內(nèi)的比特?cái)?shù)目,用于衡量音頻數(shù)據(jù)單位時(shí)間內(nèi)的容量大小。比特率越高,存儲(chǔ)越大,聲音細(xì)節(jié)越精確
- 單位:bps、kbps
- 低碼率(
)
- 中碼率(
)
- 高碼率(
)
音質(zhì) | 量化格式(位深) | 采樣率 | 聲道數(shù) | 比特率 | 存儲(chǔ)空間(1分鐘) |
---|---|---|---|---|---|
CD 音質(zhì) | 16比特(2 字節(jié)) | 44100Hz | 2 | 1378.125kbps | 10.09MB |
音頻編碼
PCM 即音頻裸數(shù)據(jù)量大,存在本地稍微可以接受,但是要在網(wǎng)絡(luò)中實(shí)時(shí)在線傳播的話就太大了,因此就有了音頻壓縮編碼的存在。壓縮編碼實(shí)際上就是壓縮冗余信號(hào),冗余信號(hào)指的是人耳聽不到的音頻信號(hào)(20Hz ~ 20kHz范圍以外)。
常見概念
- 壓縮比:通常小于1
- 無(wú)損壓縮:解壓后數(shù)據(jù)可以完全復(fù)原
- 有損壓縮:解壓后數(shù)據(jù)不能完全復(fù)原,壓縮比越小,丟失信息越多,信號(hào)還原后的失真就會(huì)越大
PCM 編碼
PCM(Pulse Code Modulation,脈沖編碼調(diào)制)是無(wú)損編碼,也是音頻裸數(shù)據(jù),能夠達(dá)到最大程度的高保真。
優(yōu)點(diǎn):音源信息保存完整,音質(zhì)好
缺點(diǎn):信息量大,體積大,冗余度過(guò)大
適用場(chǎng)合:廣泛用于素材保存及音樂(lè)欣賞
WAV 編碼
WAV(Waveform Audio File Format)是一種不會(huì)進(jìn)行壓縮操作的編碼,他在 PCM 數(shù)據(jù)格式的前面加上了44字節(jié),分別用來(lái)描述 PCM 的采樣率、聲道數(shù)、數(shù)據(jù)格式等信息。
優(yōu)點(diǎn):音質(zhì)非常好,大量軟件都支持
缺點(diǎn):信息量大,體積大,冗余度過(guò)大
適用場(chǎng)合:多媒體開發(fā)的中間文件、保存音樂(lè)和音效素材
MP3 編碼
MP3 具有不錯(cuò)的壓縮比,使用 LAME 編碼的中高碼率的 MP3 文件,聽感上非常接近 WAV 文件。
優(yōu)點(diǎn):音質(zhì)在 128 Kbps 以上表現(xiàn)還不錯(cuò),壓縮比比較高,兼容性高
缺點(diǎn):在 128 Kbps 及以下時(shí),會(huì)出現(xiàn)明顯的高頻丟失
適用場(chǎng)合:高比特率下對(duì)兼容性有要求的音樂(lè)欣賞
AAC 編碼
AAC 是新一代的音頻有損壓縮技術(shù),它通過(guò)一些附加的編碼技術(shù)(比如PS、SBR等),衍生出了 LC-AAC、HE-AAC、HE-AAC v2 三種主要的編碼格式:
-
LC-AAC:主要應(yīng)用于中高碼率場(chǎng)景的編碼(
)
-
HE-AAC:(相當(dāng)于AAC+SBR)主要應(yīng)用于中低碼率場(chǎng)景的編碼(
)
-
HE-AAC v2:(相當(dāng)于AAC+SBR+PS)主要應(yīng)用于低碼率場(chǎng)景的編碼(
)
- 事實(shí)上大部分編碼器都設(shè)置
自動(dòng)啟動(dòng) PS 技術(shù),而
則不加 PS ,相當(dāng)于普通的 HE-AAC
- 事實(shí)上大部分編碼器都設(shè)置
優(yōu)點(diǎn):在小于 128 Kbps 的碼率下表現(xiàn)優(yōu)異,支持多種音頻聲道組合,提供優(yōu)質(zhì)的音質(zhì)
適用場(chǎng)合:128 Kbps 以下的音頻編碼,多用于視頻中的音頻軌的編碼
SBR:一種音頻編碼增強(qiáng)算法,可在中低碼率下增加音頻的帶寬或改善編碼效率,但是在高碼率中沒(méi)什么作用。
Ogg 編碼
Ogg 在各種碼率下大豆油比較優(yōu)秀的表現(xiàn),尤其在中低碼率場(chǎng)景下。可以用更小的碼率達(dá)到更好的音質(zhì),128 Kbps 的 Ogg 比 192 Kbps 甚至更高碼率的 MP3 還要出色。但是它的兼容性不是很好,因此和 MP3 無(wú)法相提并論。
優(yōu)點(diǎn):可用比 MP3 個(gè)更小的碼率實(shí)現(xiàn)比 MP3 更好的音質(zhì),高低中碼率下均有良好的表現(xiàn)
缺點(diǎn):軟件硬件的兼容性不好
使用場(chǎng)合:語(yǔ)音聊天的音頻消息場(chǎng)景
圖像
一幅幅圖像是由一個(gè)個(gè)像素點(diǎn)組成的,每個(gè)像素點(diǎn)都由3個(gè)子像素點(diǎn)組成。
分辨率
像素點(diǎn)的數(shù)量就是分辨率,比如一個(gè)屏幕的分辨率是1280 x 720
,那么說(shuō)明水平方向有 720 個(gè)像素點(diǎn),垂直方向有 1280 個(gè)像素點(diǎn),因此整個(gè)屏幕就有1280 x 720
個(gè)像素點(diǎn)(注:這是不算子像素點(diǎn)的說(shuō)法)。
位圖(Bitmap)
- 位圖,又稱柵格圖(Raster graphics)或點(diǎn)陣圖,是使用像素陣列(Pixel-array/Dot-matrix點(diǎn)陣)來(lái)表示的圖像。
- 位圖也可指一種數(shù)據(jù)結(jié)構(gòu),代表了有限域中的稠集(dense set),每一個(gè)元素至少出現(xiàn)一次,沒(méi)有其他的數(shù)據(jù)和元素相關(guān)聯(lián)。
位圖的像素都分配有特定的位置和顏色值。每個(gè)像素的顏色信息由 RGB 組合或者灰度值表示。根據(jù)位深度,可將位圖分為1、4、8、16、24及32位圖像等。每個(gè)像素使用的信息位數(shù)越多,可用的顏色就越多,顏色表現(xiàn)就越逼真,相應(yīng)的數(shù)據(jù)量越大。
位深度:表示一個(gè)位圖所使用的二進(jìn)制數(shù)目,即
32 位圖像
能表示種顏色的彩色圖,
1 位圖像
就能表示種顏色的黑白圖。
RGB 表示方式
一個(gè)圖像可以由 RGB 組成,這些子像素點(diǎn)的常用表示方式如下:
- 浮點(diǎn)表示:取值范圍為 0.0 ~ 1.0,比如 OpenGL ES 中的子像素表示。
-
整數(shù)表示:取值范圍為 0 ~ 255 或者 00 ~ FF,8 bits表示一個(gè)子像素,32 bits 即 4 bytes 就表示一個(gè)像素。
- RGBA_8888:R、G、B、A 各用 8 bits,一共 32 bits。
- RGB_565:R 用 6 bits,G 用 6 bits,B 用 5 bits,一共 16 bits 即 2 bytes
那么一張1280 x 720
的RGBA_8888
圖像的大小就是:
YUV 表示方式
YUV 主要應(yīng)用于優(yōu)化彩色視頻信號(hào)的傳輸,使其向后兼容老實(shí)黑白電視。與 RGB 視頻型號(hào)傳輸相比,最大的優(yōu)點(diǎn)是占用極少的頻寬
- Y:亮度信號(hào)表示明亮度(Luminance 或 Luma),也稱灰階值
-
U、V:色度信號(hào)表示色度(Chrominance 或 Chroma),作用是描述影像的色彩及飽和度,用于指定像素的顏色(YUV也叫YCbCr)
-
色調(diào):用
Cr
表示,反映了 RGB 輸入信號(hào)紅色部分與 RGB 信號(hào)亮度值之間的差異 -
飽和度:用
Cb
表示,反映了 RGB 輸入信號(hào)藍(lán)色部分與 RGB 信號(hào)亮度值之間的差異
-
色調(diào):用
表示方式:YUV 的每個(gè)分量都使用一個(gè)字節(jié)(8位)來(lái)表示,所以取值范圍是 0 ~ 255。
存儲(chǔ)格式:
- planar 平面格式:指先連續(xù)存儲(chǔ)所有像素點(diǎn)的 Y 分量,然后存儲(chǔ) U 分量,最后是 V 分量。
- packed 打包模式:指每個(gè)像素點(diǎn)的 Y、U、V 分量是連續(xù)交替存儲(chǔ)的。
采樣范式:YUV 圖像的主流采樣方式有如下三種:
YUV 4:4:4 采樣
YUV 4:4:4 采樣,意味著 Y、U、V 三個(gè)分量的采樣比例相同,因此在生成的圖像里,每個(gè)像素的三個(gè)分量信息完整,都是 8 bits,也就是一個(gè)字節(jié)。
如下圖所示(Y 分量用叉表示,UV 分量用圓圈表示):
例子:
圖像像素:[Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]
采樣的碼流:Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3
映射出的像素點(diǎn): [Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]
這種采樣方式的圖像和 RGB 顏色模型的圖像大小是一樣,并沒(méi)有達(dá)到節(jié)省帶寬的目的,當(dāng)將 RGB 圖像轉(zhuǎn)換為 YUV 圖像時(shí),也是先轉(zhuǎn)換為 YUV 4:4:4 采樣的圖像。
YUV 4:2:2 采樣
YUV 4:2:2 采樣,意味著 UV 分量是 Y 分量采樣的一半,Y 分量和 UV 分量按照 2 : 1 的比例采樣。每采樣過(guò)一個(gè)像素點(diǎn),都會(huì)采樣其 Y 分量,而 U、V 分量就會(huì)間隔一個(gè)采集一個(gè)。如下圖所示(Y 分量用叉表示,UV 分量用圓圈表示):
例子:
圖像像素:[Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]
采樣的碼流:Y0 U0 Y1 V1 Y2 U2 Y3 V3
映射出的像素點(diǎn): [Y0 U0 V1]、[Y1 U0 V1]、[Y2 U2 V3]、[Y3 U2 V3]
兩個(gè)圖像共用一個(gè) U、V 分量,因此YUV 4:2:2 采樣的圖像比 RGB 模型圖像節(jié)省了三分之一的存儲(chǔ)空間,在傳輸時(shí)占用的帶寬也會(huì)隨之減少。
YUV 4:2:0 采樣
YUV 4:2:0 采樣,并不是指只采樣 U 分量而不采樣 V 分量。而是指,在每一行掃描時(shí),只掃描一種色度分量(U 或者 V),和 Y 分量按照 2:1 的方式采樣。每采樣過(guò)一個(gè)像素點(diǎn),都會(huì)采樣其 Y 分量,而 U、V 分量就會(huì)間隔一行按照 2 : 1 進(jìn)行采樣。對(duì)于每個(gè)色度分量來(lái)說(shuō),它的水平方向和豎直方向的采樣和 Y 分量相比都是 2:1 。如下圖所示(Y 分量用叉表示,UV 分量用圓圈表示):
圖像像素:
[Y0 U0 V0]、[Y1 U1 V1]、 [Y2 U2 V2]、 [Y3 U3 V3]
[Y5 U5 V5]、[Y6 U6 V6]、 [Y7 U7 V7] 、[Y8 U8 V8]
采樣的碼流:Y0 U0 Y1 Y2 U2 Y3 Y5 V5 Y6 Y7 V7 Y8
映射出的像素點(diǎn):
[Y0 U0 V5]、[Y1 U0 V5]、[Y2 U2 V7]、[Y3 U2 V7]
[Y5 U0 V5]、[Y6 U0 V6]、[Y7 U2 V7]、[Y8 U2 V8]
四個(gè)圖像共用一個(gè) U、V 分量,因此YUV 4:2:0 采樣的圖像比 RGB 模型圖像節(jié)省了一半的存儲(chǔ)空間,因此它也是比較主流的采樣方式。
RGB 和 YUV 的轉(zhuǎn)化
RGB 到 YUV 的轉(zhuǎn)換,就是將圖像所有像素點(diǎn)的 R、G、B 分量轉(zhuǎn)換到 Y、U、V 分量。對(duì)于顯示器來(lái)說(shuō),它是通過(guò) RGB 模型來(lái)顯示圖像的,而在傳輸圖像數(shù)據(jù)時(shí)又是使用 YUV 模型(可節(jié)省帶寬),因此就有:
- 采集圖像時(shí):將 RGB 模型轉(zhuǎn)換到 YUV 模型
- 顯示圖像時(shí):將 YUV 模型轉(zhuǎn)換為 RGB 模型
標(biāo)清電視使用標(biāo)準(zhǔn) BT.601:
高清電視使用標(biāo)準(zhǔn) BT.709:
圖片壓縮格式
-
JPEG:JPEG(
Joint Photographic Experts Group
) 是一種有損壓縮格式,在提供良好的壓縮性能的同時(shí),具有較好的重建質(zhì)量。一般提供壓縮比的選項(xiàng),壓縮比越小,圖片體積就越小,質(zhì)量越也差,編碼時(shí)間也越短,但解碼時(shí)間并沒(méi)有很大的差距。 -
PNG:PNG(
Portable Network Graphics
) 是無(wú)損壓縮格式,其并不能提供壓縮比的選項(xiàng),其壓縮比是有上限的。 -
BPG:BPG(
Better Portable Graphics
) 是一個(gè)優(yōu)秀的有損壓縮格式,它能在相同質(zhì)量下比 JPEG 減少 50% 的體積。
視頻
視頻中的每幀都代表著一幅靜止的圖像
視頻編碼
相較于音頻數(shù)據(jù),視屏數(shù)據(jù)有極強(qiáng)的相關(guān)性,也就是說(shuō)有大量的冗余信息,包括空間上的冗余信息和時(shí)間上的冗余信息。
幀間編碼技術(shù) -> 去除時(shí)間上的冗余信息
- 運(yùn)動(dòng)補(bǔ)償:運(yùn)動(dòng)補(bǔ)償是通過(guò)先前的局部圖像來(lái)預(yù)測(cè)、補(bǔ)償當(dāng)前的局部圖像,他是減少幀序列冗余的有效方法。
- 運(yùn)動(dòng)表示:不同區(qū)域的圖像需要使用不同的運(yùn)動(dòng)矢量來(lái)描述運(yùn)動(dòng)信息。
- 運(yùn)動(dòng)估計(jì):運(yùn)動(dòng)估計(jì)是從視頻序列中抽取運(yùn)動(dòng)信息的一整套技術(shù)。
幀內(nèi)編碼技術(shù) -> 去除空間上的冗余信息
MPEG
MPEG 算法是適用于動(dòng)態(tài)視頻的壓縮算法,它除了對(duì)單幅圖像進(jìn)行編碼外,還利用圖像序列中的相關(guān)原則去除冗余,大大提高了視頻的壓縮比。
版本:Mpeg1(?于 VCD)、Mpeg2(?于 DVD)、Mpeg4 AVC(流媒體使?最多)
H.264
ITU-T 制定的 H.261、H.262、H.263、H.264?系列視頻編碼標(biāo)準(zhǔn)是?套單獨(dú)的體系。其中,H.264 集中了以往標(biāo)準(zhǔn)的所有優(yōu)點(diǎn),并吸取了以往標(biāo)準(zhǔn)的經(jīng)驗(yàn),采?的是簡(jiǎn)潔設(shè)計(jì),這使得它? Mpeg4 更容易推?。現(xiàn)在使?最多的就是 H.264 標(biāo)準(zhǔn),H.264 創(chuàng)造了多參考幀、多塊類型、整數(shù)變換、幀內(nèi)預(yù)測(cè)等新的壓縮技術(shù),使?了更精細(xì)的分像素運(yùn)動(dòng)?量(1/4、1/8)和新?代的環(huán)路濾波器,這使得壓縮性能得到??提?,系統(tǒng)也變得更加完善。
編碼概念
IPB 幀
-
I幀:幀內(nèi)編碼幀(
intra picture
),直接表示完整圖像的一幀。通常為每個(gè)GOP(MPEG所使用的一種視頻壓縮技術(shù))的第一個(gè)幀。- 編碼:通過(guò)視頻壓縮算法保存的完整一幀
- 解碼:通過(guò)視頻壓縮算法解壓成完整的畫面
- 用途:作為隨機(jī)訪問(wèn)的參考點(diǎn)
- 意義:去除空間冗余信息
-
P幀:前向預(yù)測(cè)編碼幀(
predictive-frame
),即預(yù)測(cè)幀,通過(guò)前面的圖像編碼特征來(lái)確定當(dāng)前的圖像幀。- 編碼:通過(guò)將圖像序列中前面已編碼幀的時(shí)間冗余信息充分去除來(lái)壓縮傳輸數(shù)據(jù)量的編碼圖像。
- 解碼:需要參考其前面的一個(gè)I幀或者P幀來(lái)解碼成一張完整的視頻畫面
- 意義:去除時(shí)間冗余信息
-
B幀:雙向預(yù)測(cè)內(nèi)插編碼幀(
bi-directional interpolated prediction frame
),即雙向預(yù)測(cè)幀,需要通過(guò)前后的圖像編碼來(lái)確定當(dāng)前幀。- 編碼:既考慮源圖像序列前面的已編碼幀,又顧及源圖像序列后面的已編碼幀之間的時(shí)間冗余信息,來(lái)壓縮傳輸數(shù)據(jù)量的編碼圖像
- 解碼:需要參考其前一個(gè)I幀或者P幀及其后面的一個(gè)P幀來(lái)生成一張完整的視頻畫面
- 意義:去除時(shí)間冗余信息
IDR幀:(
instantaneous decoding refresh picture
)是一個(gè)特殊的I幀,這一幀之后的所有參考幀都只會(huì)參考到這個(gè)IDR幀,而不會(huì)再參考前面的幀。
GOP
GOP(Group Of Picture
),表示一組圖片,兩個(gè)I幀之間就形成的一組圖片。通常在為編碼器設(shè)置參數(shù)的時(shí)候,必須要設(shè)置gop_size
的值,其代表的是兩個(gè)I幀之間的幀數(shù)目。
PS:提高視頻質(zhì)量技巧:
gop_size
越大,整個(gè)畫面的質(zhì)量就會(huì)越好- 多使用B幀(I的壓縮率是7,P是20,B可以達(dá)到50)可節(jié)省更多的空間保存I幀。這樣就能在相同的碼率下提供更好的畫質(zhì)。
PTS 與 DTS
- DTS:(
Decoding Time Stamp
)決定解碼的順序,主要用于視頻的解碼 - PTS:(
Presentation Time Stamp
)決定圖像什么時(shí)候顯示給用戶,主要用于在解碼階段進(jìn)行視頻的同步和輸出
PS:在沒(méi)有B幀的情況下,DTS 和 PTS 的輸出順序是一樣的。因?yàn)锽幀打亂了解碼和顯示的順序,所以一旦存在B幀,PTS與DTS勢(shì)必就會(huì)不同。因此需要 DTS 和 PTS 兩種不同的時(shí)間戳。