- 【聲明】課程學習地址:https://ke.qq.com/course/468797
目錄
【音視頻錄製原理】
【音視頻播放原理】
圖像表示-RGB格式
- 紅光(R)
- 綠光(G)
- 藍光(B)
- 每個像素用8bit表示
色彩:256*256*256=16,777,216
- RGB方式
- 對於一幅圖像,一般使用整數表示方法來進行描述,比如計算一張的RGB_888圖像的大小,可採用如下方式:
- 1280×720 * 3 = 2.637 MB,4分鐘就達到了15G的容量。
- 假如是一部90分鐘的電影,每秒25幀,則一部電影爲
- 2.637MB*90分鐘*60秒*25FPS= 347.651GB
圖像表示-YUV格式
- 數字圖像表示 YUV格式
- 用途:
- 主要用於視頻信號的壓縮、傳輸和存儲,和向後相容老式黑白電視。
- 其中“Y”表示明亮度(Luminance或Luma),也稱灰階值;
- “U”和“V”表示的則是色度(Chrominance或Chroma)
- 作用是描述影像色彩及飽和度,用於指定像素的顏色。
圖像表示-YUV格式1
- YUV格式有兩大類:
- planar和packed。
- 對於planar的YUV格式:
- 先連續存儲所有像素點的Y,緊接着存儲所有像素點的U,隨後是所有像素點的V。
- 對於packed的YUV格式:
- 每個像素點的Y,U,V是連續交替存儲的。
- libyuv,Google開源的實現各種YUV與RGB間相互轉換、旋轉、縮放的庫
圖像表示-YUV格式2
- YUV存在多種格式,比如YUV420p,YUV420sp等,不同的YUV格式的數據在存儲時的排列順序是不一樣的,在開發的過程中必須非常注意,否則畫面會顯示不正常。比如花屏,綠屏等現象。
- YUV 4:4:4採樣,每一個Y對應一組UV分量。
- YUV 4:2:2採樣,每兩個Y共用一組UV分量。
- YUV 4:2:0採樣,每四個Y共用一組UV分量。
- 參考:
圖像表示
- 相較於RGB,我們可以計算一幀爲1280×720的視頻幀,用YUV420P的格式來表示,其每個像素點數據量的大小如下:
- (4+2 ) / 4 = 1.5 Byte
- 1280 * 720 * 1 + 1280 * 720 * 0.5 = 1.318MB
- 如果fps(1秒的視頻幀數目)是25,按照一般電影的長度90分鐘來計算,那麼這部電影用YUV420P的數據格式來表示的話,其數據量的大小就是:
- 1.318MB * 25fps * 90min * 60s = 173.76GB
視頻的主要概念
- 視頻碼率:kb/s,是指視頻文件在單位時間內使用的數據流量,也叫碼流率。碼率越大,說明單位時間內取樣率越大,數據流精度就越高。
- 視頻幀率:fps,通常說一個視頻的25幀,指的就是這個視頻幀率,即1秒中會顯示25幀。幀率越高,給人的視覺就越流暢。
- 視頻分辨率:分辨率就是我們常說的640x480分辨率、1920x1080分辨率,分辨率影響視頻圖像的大小。
視頻的主要概念:I P B幀
- I 幀(Intra coded frames):I幀不需要參考其他畫面而生成,解碼時僅靠自己就重構完整圖像;
- I幀圖像採用幀內編碼方式;
- I幀所佔數據的信息量比較大;
- I幀圖像是週期性出現在圖像序列中的,出現頻率可由編碼器選擇;
- I幀是P幀和B幀的參考幀(其質量直接影響到同組中以後各幀的質量);
- I幀是幀組GOP的基礎幀(第一幀),在一組中只有一個I幀;
- I幀不需要考慮運動矢量;
- P 幀(Predicted frames):根據本幀與相鄰的前一幀(I幀或P幀,不能是B幀)的不同點來壓縮本幀數據,同時利用了空間和時間上的相關性。
- P幀屬於前向預測的幀間編碼。
- 它需要參考前面最靠近它的I幀或P幀來解碼。
- B 幀(Bi-directional predicted frames):B 幀圖像採用雙向時間預測,可以大大提高壓縮倍數。
常用視頻壓縮算法
- MPEG2 MPEG陣營
- H264 MPEG陣營
- H265 MPEG陣營
- AVS 中國陣營
- VP8 Google陣營
- VP9 Google陣營
聲音的物理性質
頻率
- 聲音的頻率是週期的倒數,它表示的是聲音在1秒鐘內的週期數,單位是赫茲(Hz)。
- 千赫(kHz),即1000Hz,表示每秒振動1000次。聲音按頻率可作如下劃分:
- 次聲 0~20Hz
- 人耳能聽見的聲音 20Hz~20KHz
- 超聲 20KHz~1GHz
- 特超聲 1GHz~10THz
- 振幅
- 聲音有振幅,振幅的主觀感覺是聲音的大小。
- 聲音的振幅大小取決於空氣壓力波距平均值(也稱平衡態)的最大偏移量。
數字音頻
- 爲了將模擬信號數字化,本節將分爲3個概念:
- 採樣頻率、採樣量化、編碼
- 計算機並不直接使用連續平滑的波形來表示聲音,它是每隔固定的時間對波形的幅值進行採樣,用得到的一系列數字量來表示聲音。右圖 是經過數字採樣的波形示意圖。
- PCM脈衝編碼調製
- PCM(Pulse Code Modulation),脈衝編碼調製。
- 人耳聽到的是模擬信號,PCM是把聲音從模擬信號轉化爲數字信號的技術。
數字音頻-採樣頻率
- 根據Nyguist採樣定律,要從採樣中完全恢復原始信號波形,採樣頻率必須至少是信號中最高頻率的兩倍。
- 前面提到人耳能聽到的頻率範圍是[20H~20kHz],所以採樣頻率一般爲44.1Khz,這樣就能保證聲音到達20Khz也能被數字化,從而使得經過數字化處理之後,人耳聽到的聲音質量不會被降低。
- 採樣頻率:每秒鐘採樣的點的個數。常用的採樣頻率有:
- 22000(22kHz): 無線廣播。
- 44100(44.1kHz): CD音質。
- 48000(48kHz): 數字電視,DVD。
- 96000(96kHz): 藍光,高清DVD。
- 192000(192kHz): 藍光,高清DVD。
- 採樣是在離散的時間點上進行的,而採樣值本身在計算機中也是離散的。
- 採樣值的精度取決於它用多少位來表示,這就是量化。
- 例如8位量化可以表示256個不同值,而CD質量的16位量化可以表示65 536個值,範圍爲[-32768, 32767]。
- 下圖是一個3位量化的示意圖,可以看出3位量化只能表示8個值:0.75,0.5,0.25,0,─0.25,─0.5,─0.75和 ─1,因而量化位數越少,波形就越難辨認,還原後的聲音質量也就越差(可能除了一片嗡嗡聲之外什麼都沒有)
音頻常見名詞
- 採樣頻率:每秒鐘採樣的點的個數。常用的採樣頻率有:
- 22000(22kHz): 無線廣播。
- 44100(44.1kHz):CD音質。
- 48000(48kHz): 數字電視,DVD。
- 96000(96kHz): 藍光,高清DVD。
- 192000(192kHz): 藍光,高清DVD。
- 採樣精度(採樣深度):每個“樣本點”的大小,
- 常用的大小爲8bit, 16bit,24bit。
- 通道數:單聲道,雙聲道,四聲道,5.1聲道。
- 比特率:每秒傳輸的bit數,單位爲:bps(Bit Per Second)
- 間接衡量聲音質量的一個標準。
- 沒有壓縮的音頻數據的比特率 = 採樣頻率 * 採樣精度 * 通道數。
- 碼率: 壓縮後的音頻數據的比特率。常見的碼率:
- 6kbps: FM質量
- 128-160kbps:一般質量音頻。
- 192kbps: CD質量。
- 256-320Kbps:高質量音頻
- 碼率越大,壓縮效率越低,音質越好,壓縮後數據越大。
- 碼率 = 音頻文件大小 / 時長。
- 比如:採樣頻率44100,採樣精度16bit,2通道(聲道),採集4分鐘的數據
- 44100*16*2*4*60= 338688000bit
- 338688000/8/1024/1024 = 40M字節
- 比特率:採樣頻率 * 採樣精度 * 通道數 = 44100*16*2= 1411200bit/s
- 幀:每次編碼的採樣單元數。
- 比如MP3通常是1152個採樣點作爲一個編碼單元,AAC通常是1024個採樣點作爲一個編碼單元。
- 幀長:
- 可以指每幀播放持續的時間:
- 每幀持續時間(秒) = 每幀採樣點數 / 採樣頻率(HZ)
- 比如:MP3 48k, 1152個採樣點,每幀則爲 24毫秒
- 1152/48000= 0.024 秒 = 24毫秒;
- 也可以指壓縮後每幀的數據長度。
- 所以講到幀的時候要注意他適用的場合。
- 交錯模式:數字音頻信號存儲的方式。
- 數據以連續幀的方式存放,即首先記錄幀1的左聲道樣本和右聲道樣本,再開始幀2的記錄...
- 非交錯模式:首先記錄的是一個週期內所有幀的左聲道樣本,再記錄所有右聲道樣本
音頻編碼原理簡介
- 數字音頻信號如果不加壓縮地直接進行傳送,將會佔用極大的帶寬。例如,一套雙聲道數字音頻若取樣頻率爲44.1KHz,每樣值按16bit量化,則其碼率爲:
- 2*44.1kHz*16bit=1.411Mbit/s
- 如此大的帶寬將給信號的傳輸和處理都帶來許多困難和成本(阿里雲服務器帶寬大於5M後,每M價格是100元/月),因此必須採取音頻壓縮技術對音頻數據進行處理,纔能有效地傳輸音頻數據。
- 數字音頻壓縮編碼在保證信號在聽覺方面不產生失真的前提下,對音頻數據信號進行儘可能大的壓縮,降低數據量。
- 數字音頻壓縮編碼採取去除聲音信號中冗餘成分的方法來實現。所謂冗餘成分指的是音頻中不能被人耳感知到的信號,它們對確定聲音的音色,音調等信息沒有任何的幫助。
- 冗餘信號包含人耳聽覺範圍外的音頻信號以及被掩蔽掉的音頻信號等。
- 例如,人耳所能察覺的聲音信號的頻率範圍爲20Hz~20KHz,除此之外的其它頻率人耳無法察覺,都可視爲冗餘信號。
- 此外,根據人耳聽覺的生理和心理聲學現象,當一個強音信號與一個弱音信號同時存在時,弱音信號將被強音信號所掩蔽而聽不見,這樣弱音信號就可以視爲冗餘信號而不用傳送。
- 這就是人耳聽覺的掩蔽效應,主要表現在頻譜掩蔽效應和時域掩蔽效應。
【頻譜掩蔽效應】
- 一個頻率的聲音能量小於某個閾值之後,人耳就會聽不到。
- 當有另外能量較大的聲音出現的時候,該聲音頻率附近的閾值會提高很多,即所謂的掩蔽效應。如圖所示:
- 由圖中我們可以看出人耳對2KHz~5KHz的聲音最敏感,而對頻率太低或太高的聲音信號都很遲鈍,當有一個頻率爲0.2KHz、強度爲60dB的聲音出現時,其附近的閾值提高了很多。
- 由圖中我們可以看出在0.1KHz以下、1KHz以上的部分,由於離0.2KHz強信號較遠,不受0.2KHz強信號影響,閾值不受影響;而在0.1KHz~1KHz範圍,由於0.2KHz強音的出現,閾值有較大的提升,人耳在此範圍所能感覺到的最小聲音強度大幅提升。
- 如果0.1KHz~1KHz範圍內的聲音信號的強度在被提升的閾值曲線之下,由於它被0.2KHz強音信號所掩蔽,那麼此時我們人耳只能聽到0.2KHz的強音信號而根本聽不見其它弱信號,這些與0.2KHz強音信號同時存在的弱音信號就可視爲冗餘信號而不必傳送。
【時域掩蔽效應】
- 當強音信號和弱音信號同時出現時,還存在時域掩蔽效應。即兩者發生時間很接近的時候,也會發生掩蔽效應。時域掩蔽過程曲線如圖所示,分爲前掩蔽、同時掩蔽和後掩蔽三部分。
- 時域掩蔽效應可以分成三種:前掩蔽,同時掩蔽,後掩蔽。
- 前掩蔽是指人耳在聽到強信號之前的短暫時間內,已經存在的弱信號會被掩蔽而聽不到。
- 同時掩蔽是指當強信號與弱信號同時存在時,弱信號會被強信號所掩蔽而聽不到。
- 後掩蔽是指當強信號消失後,需經過較長的一段時間才能重新聽見弱信號,稱爲後掩蔽。
- 這些被掩蔽的弱信號即可視爲冗餘信號。
- 總結:強壓制弱,弱的不編碼。
壓縮編碼方法
- 當前數字音頻編碼領域存在着不同的編碼方案和實現方式, 但基本的編碼思路大同小異, 如圖所示。
- 對每一個音頻聲道中的音頻採樣信號:
- 將它們映射到頻域中,這種時域到頻域的映射可通過子帶濾波器實現。每個聲道中的音頻採樣塊首先要根據心理聲學模型來計算掩蔽門限值;
- 由計算出的掩蔽門限值決定從公共比特池中分配給該聲道的不同頻率域中多少比特數,接着進行量化以及編碼工作;
- 將控制參數及輔助數據加入數據之中,產生編碼後的數據流。
【音頻編解碼器選型】
- OPUS(語音通話)
- MP3(音樂)
- AAC(直播)
- AC3和EAC3 杜比公司的方案
- 參考:https://www.jianshu.com/p/6b4c481f4294
封裝格式的概念
- 封裝格式(也叫容器)就是將已經編碼壓縮好的視頻流、音頻流及字幕按照一定的方案放到一個文件中,便於播放軟件播放。
- 一般來說,視頻文件的後綴名就是它的封裝格式。
- 封裝的格式不一樣,後綴名也就不一樣。
- 比如:同樣的陷可以做成餃子也可以做成包子。對於視頻也是一個道理,同樣的音視頻流可以用不同容器來承載。
【封裝格式示例】
- 這裏的壓縮算法:
- 視頻Video:使用了H264/AVC壓縮算法
- 音頻Audio:使用了AAC壓縮算法
- 封裝則使用MP4封裝格式
【常見的視頻封裝格式】
- AVI、MKV、MPE、MPG、MPEG
- MP4、WMV、MOV、3GP
- M2V、M1V、M4V、OGM
- RM、RMS、RMM、RMVB、IFO
- SWF、FLV、F4V、
- ASF、PMF、XMB、DIVX、PART
- DAT、VOB、M2TS、TS、PS
- H264+AAC封裝爲FLV或MP4是最爲流行的模式。
音視頻同步基礎
【音視頻同步概念】
- DTS(Decoding Time Stamp):即解碼時間戳,這個時間戳的意義在於告訴播放器該在什麼時候解碼這一幀的數據。
- PTS(Presentation Time Stamp):即顯示時間戳,這個時間戳用來告訴播放器該在什麼時候顯示這一幀的數據(音頻數據和視屏數據)。
【音視頻同步方式】
- Audio Master:同步視頻到音頻
- Video Master:同步音頻到視頻
- External Clock Master:同步音頻和視頻到外部時鐘。
- 一般情況下 Audio Master > External Clock Master > Video Master