音视频工程师(初步)(一)音视频的基本概念
1. 前言
本文是音視頻工程師系列的第一篇文章。
學習音視頻的過程中發現,網絡上高質量的音視頻技術博客不是很多。具有代表性的是
- 雷神的 雷霄驊的CSDN博客
因為筆者是一名普通的軟件開發人員,一向不喜歡高高在上或者晦澀難懂的理論,我們向來喜歡通俗易懂的東西。我認為知識的本身也應該是通俗易懂的東西。知識用晦澀難懂的東西描述出來,是對人類進步的阻礙,是知識壟斷。
音視頻的很多標準都是國外制定的,而且很多音視頻開發基礎庫也是國外的,國內外技術差距是存在的。
筆者希望此系列教程能夠以工程實現為出發點和落腳點,簡化理論知識,化繁為簡地解析音視頻技術,為音視頻技術的發展,為各位讀者成長為音視頻工程師貢獻一點微不足道的力量。
2. 音視頻數據內容信息分類
音視頻數據內容從本質上講,分為兩種:
3. 格式
封裝格式(容器)
音視頻內容包含了音視頻數據和音視頻參數兩種信息,這兩種信息打包放在一個文件中采用的格式,就叫做封裝格式,也叫容器。個人覺得叫封裝格式更容易理解。
目前,人們已經發明了很多種視頻文件格式。當然發明這些格式并不是一拍大腿想起來的,而是在特定的使用場景下,對應的視頻格式,可以更高效地存儲和處理音視頻數據。
由于封裝格式在開發中基本上都是由庫來處理,不需要我們自己封裝和解析,所以可以先不做細致了解。在初學階段的首要任務是把握音視頻的整體工作框架,某些技術細節可以先放一放,后面再研究。這也是筆者建議的學習方法:學習精力分配要遵循二八定律,大部分領域中,只有大約20%的知識最重要,在這20%上面我們要花80%的時間,剩下80%不是那么重要的,只需要花20%的時間即可。
編碼格式(壓縮)
不經過壓縮的音視頻數據是很大的。例如:
1920x1080的RGB24圖像,1秒25幀,不壓縮,1小時的視頻總大小約為 1920 * 1080 * 3 * 25 * 60 * 60 = 521G。
這種情況下,500G的電腦硬盤,最多只能存1個小時的電影;刷小視頻會變得很卡;百度網盤128KB/s的速度下載一部電影需要一兩個月…
所以,音視頻 必須被壓縮后存儲或者傳輸。
采用某種編碼格式(即壓縮格式)對音視頻數據進行壓縮,壓縮后的音視頻數據和音視頻參數一起按照某種封裝格式,被打包放入到音視頻文件中,這樣就生成了視頻文件。
4. 音視頻數據基本單位
4.1 采樣/抽樣
首先要明白采樣/抽樣的概念。
視頻采樣是指:以某一速度對物體連續拍照,不斷記錄物體在某一瞬間的畫面。
音頻采樣是指:以某一速度連續記錄聲音在某一瞬間的震動幅度。
采樣是對原事物的一種反映手段。對于采樣后的音視頻數據,計算機可以進行播放和加工處理。
4.2 視頻幀
每一個時刻拍的那張照片,就叫視頻幀,它是視頻的基本數據單位。
4.3 PCM音頻采樣點
每一個時刻獲取到的聲音振幅,就叫PCM采樣點,它是音頻的基本數據單位。
了解這些基本夠用了,不需要深入地去研究過多的細節。最主要的是要了解,通過采樣可以將現實世界的事物反映到計算機中,變成可處理的數據。
5. 音視頻參數
既然音視頻數據是經過采樣得到的,那么我們想要播放音視頻數據,就必須用到采樣過程中使用到的一些參數,這樣音視頻數據才能正確的反應原事物的狀態。
5.1 音頻參數
5.1.1 基本參數
音頻有三個基本參數:
-
采樣位數:表示每個采樣使用多少個比特位來保存,一般為4、8、16、32位(bit)。采樣位數為8 bit時,每個采樣點可以表示256個不同的采樣值,而采樣位數為16 bit時,每個采樣點可以表示65536個不同的采樣值。采樣位數的大小影響聲音的質量,采樣位數越多,量化后的波形越接近原始聲音,聲音的質量越高,但是需要的存儲空間也越多;位數越少,聲音的質量越低,需要的存儲空間越少。通常,CD音質的采樣位數是16 bit,移動通信是8 bit。
-
采樣頻率(Sampling Rate):表示一秒鐘采樣多少次,常用的采樣頻率有44100=44.1k,以及44800=44.8k。采樣頻率必須至少是人可以聽到的頻率的2倍,這是由奈奎斯特采樣定理得到的,采樣頻率再低的話,原聲音中的頻率就會丟失。奈奎斯特采樣定理是信號與系統這門課中的,不懂的話沒關系,不需要做過多了解。
-
聲道數:聲道數是指有多少個錄音麥克風放在音源的周圍錄音。聲道間是獨立、同時進行采樣的。大部分音樂是雙聲道的,播放時用耳機聽,會有一定的立體感。
上面三個是最基本的三個參數,只要知道了這三個參數,就可以將聲音記錄下來,而且可以播放出來。
這三個參數怎么記憶呢?按照從小到大、從少到多的邏輯記憶即可:
- 先從單個采樣點開始,存儲一個點所用位數叫采樣位數;
- 一秒鐘采樣得到的采樣點的個數叫采樣頻率;
- 同時進行的采樣任務的個數叫聲道數。
5.1.2 網絡參數
為什么要說網絡參數呢,由于互聯網的發展,音視頻成為一種服務,逐漸出現在互聯網上。在線看電影,刷短視頻,上網課等等都已經成為了一種新的生活方式。把音視頻搬到網絡上,必然會有一些和網絡相關的技術參數,來實現對音視頻服務的控制。有如下幾種:
- 碼率:單位是 比特每秒,英文是bps(bit per second)。此參數表示播放某音頻需要占用多少網絡帶寬。因為碼率是網絡環境下的參數,所以要結合網絡來理解。網絡帶寬就是網絡速度,單位是bps。咱們家里辦的寬帶,一般都是百兆千兆的帶寬,聽著似乎很快,但是由于它的單位是bps,實際上轉換成字節(Byte),要除以8,百兆不過12.5MB/s,千兆不過125MB/s每秒。因為文件是以字節為單位衡量的,所以這個速度實際上并不是像聽起來那么快。所以,碼率是衡量音頻在網絡上傳輸時,對網絡帶寬占用量的一個參數。當網絡帶寬比較小時,可以選擇降低音視頻碼率,這可以通過降低音頻質量來實現;當網絡帶寬比較大時,可以選擇提高音頻碼率,傳輸更高質量的音視頻。
5.2 視頻參數
5.2.1 基本參數
視頻有三個基本參數:
- 像素格式:像素用來保存某一點的顏色,這個顏色可以采用不同的格式存儲。常見的有RGB、YUV、HSV等。學習這些格式需要一定的數學運算,我們后面將單獨寫一篇文章講解,并計劃寫一個工具來實現他們之間的轉換。
- 畫面分辨率:分辨率是指一幀畫面的長寬各有多少像素,一般的寫法是寬 * 高,如1920 * 1080。分辨率越高,畫面越細膩。
- 幀率:幀率是指1秒鐘播放的幀的個數,幀率越高,畫面越流暢,幀率越低,畫面越卡頓。
對視頻基本參數,也可以采用從小到大的邏輯記憶:
- 先從最基本的像素開始,存儲某顏色的格式叫像素格式。
- n個像素構成一幀畫面,幀的長寬叫做分辨率。
- n個幀連續播放才能形成視頻,幀率是指1秒中播放的幀的個數。
5.2.2 網絡參數
視頻的網絡參數和音頻類似,主要有:
- 碼率:解釋同音頻的碼率。需要提及的是,視頻的碼率等級比音頻多一些,因為視頻的數據相對于音頻數據,大了不止一點點,所以視頻碼率等級分的也更多。
結語
本文主要是梳理了一下音視頻中的必須了解的基本知識。筆者本系列文章的定位是既要精簡又要通俗易懂。現代社會每個人都很忙,盡量降低學習成本,才是一個優秀的教程應該做的事情,而不是把簡單的東西用一些專業術語和公式把它復雜化。后面的文章會陸續在公眾號及網站更新,希望大家多多關注。
附錄及參考鏈接
- 雷神博客鏈接:視音頻數據處理入門:PCM音頻采樣數據處理
- PCM百度百科:https://baike.baidu.com/item/PCM/1568054
- 音頻基礎知識—PCM淺析:cloud.tencent.com/developer/article/1802685
本文原創發布于微信公眾號Qt未來工程師。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的音视频工程师(初步)(一)音视频的基本概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 终于确定了,车险综合改革本月落地,这些保
- 下一篇: 又是双第一!不是所有主板都叫华硕