音視頻知識(shí)圖譜 2022.04

前些時(shí)間,我在知識(shí)星球上創(chuàng)建了一個(gè)音視頻技術(shù)社群:關(guān)鍵幀的音視頻開(kāi)發(fā)圈,在這里群友們會(huì)一起做一些打卡任務(wù)。比如:周期性地整理音視頻相關(guān)的面試題,匯集一份音視頻面試題集錦,你可以看看《音視頻面試題集錦 2022.04》。再比如:循序漸進(jìn)地歸納總結(jié)音視頻技術(shù)知識(shí),繪制一幅音視頻知識(shí)圖譜。

下面是 2022.04 月知識(shí)圖譜新增的內(nèi)容節(jié)選:

1)圖譜路徑:**采集/音頻采集/聲音三要素/響度******

  • 主觀計(jì)量
    • 響度,反映人耳感受到的聲音強(qiáng)弱。
    • 響度級(jí),兩個(gè)聲音在聽(tīng)覺(jué)上認(rèn)為是相同的響度時(shí),就可以把 1000 Hz 純音的這個(gè)聲壓級(jí)規(guī)定為該頻率純音的「響度級(jí)」。單位:方(Phon)。
  • 客觀計(jì)量
    • 聲能,聲音在介質(zhì)中傳播時(shí),使媒介附加的能量。質(zhì)點(diǎn)振動(dòng)動(dòng)能和質(zhì)點(diǎn)偏離平衡位置所具有的勢(shì)能的總和。單位:瓦。
    • 聲強(qiáng),單位時(shí)間內(nèi)通過(guò)垂直于聲波傳播方向的單位面積的平均聲能。單位:瓦/平方米。
    • 聲強(qiáng)級(jí),人耳允許的聲強(qiáng)范圍太大;心理物理學(xué)的研究表明,人對(duì)聲音強(qiáng)弱的感覺(jué)并不是與聲強(qiáng)成正比,而是與其對(duì)數(shù)成正比。因此引入「聲強(qiáng)級(jí)」。
    • 聲壓,聲波通過(guò)媒質(zhì)時(shí),由振動(dòng)所產(chǎn)生的壓強(qiáng)改變量。單位:牛頓/平方米、帕斯卡。實(shí)際中更多使用聲壓來(lái)代表聲波的振幅表現(xiàn):人耳表現(xiàn)為壓力敏感組織;壓力或壓強(qiáng)具有相對(duì)容易進(jìn)行實(shí)地測(cè)量。
    • 聲壓級(jí),人耳允許的聲壓范圍太大;人對(duì)聲音的強(qiáng)弱的感覺(jué)是與聲壓的對(duì)數(shù)成正比。因此引入「聲壓級(jí)」。通常我們說(shuō)聲音大小有多少分貝,說(shuō)的就是「聲壓級(jí)」。

2)圖譜路徑:**采集/音頻采集/聲音三要素/音調(diào)******

  • 主觀計(jì)量
    • 音調(diào),人耳對(duì)聲音高低的主觀感受。單位:美(mel)。取頻率 1000Hz、聲壓級(jí)為 40 分貝的純音的音調(diào)作標(biāo)準(zhǔn),稱為 1000 美。另一些純音,聽(tīng)起來(lái)調(diào)子高一倍的稱為 2000 美,調(diào)子低一倍的稱為 500 美,依此類推,可建立起整個(gè)可聽(tīng)頻率內(nèi)的音調(diào)標(biāo)度。
    • 科學(xué)音調(diào)記號(hào)法,兩個(gè)音符之間若頻率相差整數(shù)倍,則聽(tīng)起來(lái)非常相似。因此,我們將這些音放在同一個(gè)「音調(diào)集合」中。兩個(gè)音符間若相差一倍的頻率,則我們稱兩者之間相差一個(gè)八度。
  • 客觀計(jì)量
    • 頻率,聲音振動(dòng)的快慢。單位:赫茲。

3)圖譜路徑:**采集/音頻采集/聲音數(shù)字化/采樣率******

  • 奈奎斯特采樣定理:一般實(shí)際應(yīng)用中保證采樣頻率為信號(hào)最高頻率的 2.56~4 倍。
  • 人類發(fā)聲在 5kHz 內(nèi),聽(tīng)覺(jué)范圍是 20~20kHz 內(nèi)。數(shù)字音頻的采樣率需要在 40k 以上。
  • 44100Hz 由來(lái):最早的數(shù)字錄音由一臺(tái)錄像機(jī)加上一部 PCM 編碼器制作的,由于當(dāng)時(shí)使用的是 PAL 錄像制式(帕制,與之對(duì)應(yīng)的有 NTSC),場(chǎng)頻 50 Hz,可用掃描線數(shù) 294 條,一條視頻掃描線的磁跡中記錄 3 個(gè)音頻數(shù)據(jù)塊,把它們相乘,就得到了 44100 這個(gè)奇葩數(shù)字。

4)圖譜路徑:**采集/音頻采集/聲音數(shù)字化/量化位深******

  • 對(duì)模擬音頻信號(hào)的幅度軸進(jìn)行數(shù)字化,它決定了模擬信號(hào)數(shù)字化以后的動(dòng)態(tài)范圍。
  • 8 bit 位深對(duì)應(yīng) 48 分貝的動(dòng)態(tài)范圍(最大聲壓級(jí) = 20 * lg(2^8) = 48.16),16 bit 位深對(duì)應(yīng) 96 分貝的動(dòng)態(tài)范圍,24 bit 位深對(duì)應(yīng) 144 分貝的動(dòng)態(tài)范圍。

5)圖譜路徑:**采集/視頻采集/圖像/顏色模型******

  • CIE RGB 顏色模型:基于人眼視覺(jué)感知三原色理論,CIE 通過(guò)大量實(shí)驗(yàn)數(shù)據(jù)建立了 RGB 顏色模型,標(biāo)準(zhǔn)化了 RGB 表示。
  • CIE XYZ 顏色模型:為了解決 RGB 模型中與負(fù)光混合所帶來(lái)的種種問(wèn)題,CIE 從數(shù)學(xué)上定義了三種標(biāo)準(zhǔn)基色 XYZ,形成了 CIE XYZ 顏色模型。
  • NTSC YIQ 顏色模型:在模擬電視時(shí)代,RGB 工業(yè)顯示器要求一幅彩色圖像由分開(kāi)的 R、G、B 信號(hào)組成,而電視顯示器則需要混合信號(hào)輸入,為了實(shí)現(xiàn)對(duì)這兩種標(biāo)準(zhǔn)的兼容,NTSC 基于 XYZ 模型制定了 YIQ 顏色模型,實(shí)現(xiàn)了彩色電視和黑白電視的信號(hào)兼容。
  • PAL YUV 顏色模型:為了解決 NTSC YIQ 的組合模擬視頻信號(hào)中分配給色度信息的帶寬較低而影響了圖像顏色質(zhì)量的問(wèn)題,PAL 引入了 YUV 顏色模型,支持用不同的采樣格式來(lái)調(diào)整傳輸?shù)纳刃畔⒘俊?/li>
  • ITU-R YCbCr 顏色模型:進(jìn)入數(shù)字電視時(shí)代,ITU-R 為數(shù)字視頻轉(zhuǎn)換制定了 YCbCr 顏色模型,成為我們現(xiàn)在最常使用的顏色模型。
  • 伽馬校正:在早年 CRT 顯示器流行的年代,我們遇到了顯示伽馬問(wèn)題,從而引入了伽馬校正過(guò)程并延用至今。

6)圖譜路徑:**采集/視頻采集/紋理/數(shù)據(jù)與紋理轉(zhuǎn)換/紋理轉(zhuǎn)數(shù)據(jù)(GPU → CPU)/Android 方案******

  • glReadPixels
    • OpenGL ES 2.0 和 3.0 均支持,兼容性較好。
    • 會(huì)影響 CPU 時(shí)鐘周期,同時(shí) GPU 會(huì)等待當(dāng)前幀繪制完成,讀取像素完成之后,才開(kāi)始下一幀的計(jì)算,造成渲染管線停滯。
    • 讀取的是當(dāng)前綁定 FBO 的顏色緩沖區(qū)圖像,所以當(dāng)使用多個(gè) FBO(幀緩沖區(qū)對(duì)象)時(shí),需要確定好我們要讀那個(gè) FBO 的顏色緩沖區(qū)。
    • 在大分辨率圖像的讀取時(shí)性能略差。目前通用的優(yōu)化方法是在 shader 中將處理完成的 RGBA 轉(zhuǎn)成 YUV (一般是 YUYV 格式),然后基于 RGBA 的格式讀出 YUV 圖像,這樣傳輸數(shù)據(jù)量會(huì)降低一半,性能提升明顯。
  • PBO(Pixel Buffer Object,像素緩沖區(qū)對(duì)象)
    • OpenGL ES 3.0 才支持,在 Android 上有兼容性問(wèn)題。
    • PBO 類似于 VBO(頂點(diǎn)緩沖區(qū)對(duì)象),開(kāi)辟的也是 GPU 緩存,而存儲(chǔ)的是圖像數(shù)據(jù)。PBO 不連接到紋理,且與 FBO (幀緩沖區(qū)對(duì)象)無(wú)關(guān)。
    • PBO 可以在 GPU 的緩存間快速傳遞像素?cái)?shù)據(jù),不影響 CPU 時(shí)鐘周期,支持異步,主要用于異步像素傳輸。
    • 以空間換時(shí)間,通常需要多個(gè) PBO 交替配合使用來(lái)提升性能。
  • ImageReader
    • ImageReader 是 Android SDK 提供的 Java 層對(duì)象,其內(nèi)部會(huì)創(chuàng)建一個(gè) Surface 對(duì)象。
    • EGL 創(chuàng)建 OpenGL 上下文環(huán)境時(shí),eglCreateWindowSurface 需要傳入 ANativeWindow 對(duì)象,而 ANativeWindow 又基于 Surface 對(duì)象創(chuàng)建的??梢岳?ImageReader 對(duì)象的 Surface 對(duì)象作為 OpenGL 展示渲染結(jié)果的 Window Surface ,每次渲染的結(jié)果可以通過(guò) ImageReader 對(duì)象的回調(diào)獲取。
  • HardwareBuffer
    • 一個(gè)更底層的對(duì)象,代表可由各種硬件單元(GPU、傳感器或上下文集線器或其他輔助處理單元)訪問(wèn)的緩沖區(qū)。Native 層叫 AHardwareBuffer,AHardwareBuffer 讀取顯存(紋理)圖像數(shù)據(jù)時(shí),需要與 GLEXT 和 EGLEXT 配合使用。
    • HardwareBuffer 是 Android 8 API >= 26 提供的用于替換 GraphicBuffer 的接口,在 API <= 25 時(shí)可以使用 GraphicBuffer。兩者在使用步驟上基本一致,均可以用于快速讀取顯存(紋理)圖像數(shù)據(jù),但是 HardwareBuffer 還可以訪問(wèn)其他硬件的存儲(chǔ)器,使用更廣泛。
  • 性能和實(shí)現(xiàn)選擇
    • 大分辨率情況,ImageReader、PBO、HardwareBuffer 明顯優(yōu)于 glReadPixels 方式。一般 HardwareBuffer、ImageReader、PBO 三種方式性能相差不大,HardwareBuffer 理論上性能最優(yōu)。
    • Native 層建議選擇 PBO 方式,超大分辨率建議嘗試 HardwareBuffer 方式,Java 層建議使用 ImageReader 方式。

如果你也對(duì)音視頻技術(shù)感興趣,比如,符合下面的情況:

  • 在校大學(xué)生 → 學(xué)習(xí)音視頻開(kāi)發(fā)
  • iOS/Android 客戶端開(kāi)發(fā) → 轉(zhuǎn)入音視頻領(lǐng)域
  • 直播/短視頻業(yè)務(wù)開(kāi)發(fā) → 深入音視頻底層 SDK 開(kāi)發(fā)
  • 音視頻 SDK 開(kāi)發(fā) → 提升技能,解決優(yōu)化瓶頸

我們創(chuàng)建了一個(gè)音視頻社群,vx 搜索『gjzkeyframe』 關(guān)注『關(guān)鍵幀Keyframe』咨詢,或知識(shí)星球搜『關(guān)鍵幀的音視頻開(kāi)發(fā)圈』,了解一下這個(gè)社群,根據(jù)自己的情況按需加入


下面是 2022.04 月的知識(shí)圖譜新增內(nèi)容快照(圖片被平臺(tái)壓縮不夠清晰,可以加文章后面微信索要清晰原圖):

2022.04 知識(shí)圖譜新增內(nèi)容

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容