[音視頻] 音視頻基礎知識


一、視頻播放器原理圖

從圖中可以看到,我們拿到一個視頻文件(例如MP4)后,需要經過一下幾個步驟,才能將其播放出來:

1)解封裝,即將MP4容器解開,拿出其中的視頻碼流(碼流一般指編碼后的數據)、音頻碼流、字幕、元數據信息等。

2)分別對音頻碼流和視頻碼流進行解碼,解碼需要響應的解碼器,例如H.264的解碼器對H.264碼流進行解碼。

3)視頻碼流解碼后我們一般得到YUV數據,這種數據可以直接由顯示器進行顯示。音頻碼流解碼后我們一般得到PCM數據。

4)在拿到YUV數據和PCM數據后,就可以交給顯示器和音響進行輸出了,輸出的同時要進行音視頻的同步,確保畫面和聲音的同步性。

二、封裝容器

容器,即音視頻文件的封裝格式,例如我們常見的MP4、RMVB、TS、FLV、AVI、MKV等。

他是用於將編碼好的視頻碼流、音頻碼流、字幕和一些信息封裝成一個文件,這個文件就是我們平時播放的視頻文件。

一般來說,我們看到的文件后綴,例如*.mp4、*.mkv就表示這個文件是用什么格式封裝的。要打開這個文件,則需要對應的解封裝器。

容器中包含的內容如下圖所示:

目前使用比較多的容器主要是MP4、AVI、MKV等。MP4是目前應用最多的封裝格式,可支持多碼流封裝。而AVI由於只支持一個視頻碼流和一個音頻碼流,是一種比較老的封裝技術,目前逐漸被淘汰。MKV也是一種比較好的封裝格式,一般用在高清電影中。

二、編碼和解碼

1.視頻

視頻編碼:將采集到的視頻數據使用壓縮算法處理成碼流。例如YUV--->H.264等。

視頻解碼:將碼流解碼為原始圖像數據YUV或RGB。例如H.264--->YUV等。

編碼和解碼是一一對應的關系,使用什么編碼器進行編碼,就要采用對應的解碼器進行解碼。

 

常見的一些視頻編碼格式:

名稱 推出機構 推出時間 一般使用領域
HEVC(H.265) MPEG/ITU-T 2013 研發推廣中
H.264 MPEG/ITU-T 2003 各個領域,很常用
MPEG4 MPEG 2001 不溫不火
MPEG2 MPEG 1994 數字電視
VP9 Google 2013 研發中
VP8 Google 2008 不普及
VC-1 Microsoft Inc. 2006 微軟平台

目前在學習中主要使用h.264作為編碼案例。

2.音頻

音頻編碼:將采集到的音頻數據使用壓縮算法處理成碼流。例如PCM--->MP3等。

音頻解碼:將碼流解碼為原始音頻數據PCM。例如AC-3--->PCM等。

常見音頻編碼格式:

名稱 推出機構 推出時間 一般使用領域
AAC MEPG 1997 各個領域(新)
AC-3 Dolby Inc. 1992 電影
MP3 MPEG 1993 各個領域(舊)
WMA Microsoft Inc. 1999 微軟平台

 

三、視頻像素數據

1.概念

視頻像素數據:視頻碼流經過解碼后可以得到視頻像素數據,保存了屏幕上每個像素點的像素值。

常見的像素數據格式有RGB24、RGB32、YUV420P、YUV422P,YUV444P等,壓縮編碼中,一般使用的是YUV格式的像素數據,最為常見的格式為YUV420P

YUV是由RGB轉換成的一種格式。

RGB保存的是紅、綠、藍三個顏色通道,數值大小代表該顏色的亮度。

YUV格式的Y保存的只是亮度,而UV保存的是顏色和飽和度。

后面的420、444、422表示取樣方式,444表示完全取樣,422表示水平2:1取樣,垂直完全采樣,420表示水平和垂直都2:1采樣。目前大部分使用的是YUV420,在后面的學習過程中也主要使用420采樣方式。

特點:視頻像素數據體積很大,一般情況下1小時高清(1080P)視頻的RGB24格式的數據體積為,3600秒*25幀/秒*1920*1080*3=559.9GByte。

播放器:YUV也是可有用專門的播放器來進行播放的,例如YUV player。

2.為什么要使用YUV

研究發現人眼對亮度信息比較敏感,而對色度信息不是很敏感,所以將RGB中的色度和亮度信息分離,就形成了YUV。

在壓縮的時候,壓縮算法會對色度進行進行更“狠”的壓縮,更大限度的提高了壓縮率,而又不對視頻效果有較大影響。

YUV在存儲的時候,和RGB不一樣的是,他先存儲整個圖像的Y值,然后存儲U值,再存儲V值。而RGB是像素點的排列順序來存儲的(不利於壓縮)。

四、音頻采樣數據

1.概念

音頻采樣數據:從模擬數據中采樣出來的數字音頻原始數據PCM。我們的聲音數據在一般的電氣設備中都是以模擬信號形式存在的(連續的),而這種方式的數據,在電腦中是不能處理的,所以我們要將其轉換為數字信號(離散的)。每隔一段時間我們在連續波中進行一次采樣,當間隔時間非常小的時候,就可以將模擬信號轉換為幾乎不失真的離散數據。

2.采樣

采樣設計幾個概念:

采樣率:即每秒鍾采樣的次數,一般有44100Hz和48000Hz,也就是44.1KHz和48.0KHz。

采樣精度:每次采樣的數據大小,例如16bit,即一個點2byte(視頻RGB24的一個像素點為24bit,即3byte)。

聲道:聲音可能有多聲道,所以大小要乘以聲道數。存儲方式是按順序存儲采樣點,例如左右左右左右左右......

尺寸計算:例如4分鍾的兩聲道(左右聲道)PCM音頻的大小為 4分鍾*44100Hz*2聲道*2byte=42.3MBytes,可以看到PCM的體積還是很大的,不利於數據的傳輸和存儲。

查看工具:Adobe Audition

從以上的幾個概念,我們可以知道,采樣率、采樣精度越高理論上聲音效果越好,對應文件大小也越大。聲道的數量主要是便於還原聲音的真實場景,聲道越多營造的環境更真實,各個方向或聲源發出的聲音不會全部混雜在一個聲道中,聲音會更有辨析度。

無損:我們常聽說的無損音頻就是指經過壓縮后的音頻在解壓縮后能夠恢復原始PCM,沒有任何數據丟失。而相對的有損壓縮,是為了更大的壓縮比,壓縮的時候會丟失一部分不那么重要的數據,這種壓縮方式解壓縮后,會比原本的PCM數據少。

五、一些常用工具

1.MediaInfo

該工具主要用於查看視頻文件的封包信息,例如容器中包含哪些視頻碼流和音頻碼流等。

2.Elecard Format Analyzer

查看封裝格式詳細信息。

3.Elecard StreamEye

這個工具可以用於查看碼流中幀的詳細信息,例如I、P、B幀,以及直觀的看到壓縮算法是如何來對圖像進行處理的(可以大概了解)。

 

可以從圖中看到,紅色柱狀為I幀,藍色為P幀,綠色為B幀。I幀包含所有的圖像信息,所以體積最大,而P幀只保留了一部分數據,其余數據根據前面的幀來計算,所以大小偏小,B幀是根據前后幀進行計算,所以占用的空間最小。

我們可以看到每一幀對應畫面:

可以看到圖像被分成若干網格,有些網格比較細致,有些要粗一些,並且可以看到每個單元格的類型。這就是壓縮算法會根據圖像各部分的具體復雜度來對數據進行壓縮,在減小體積的同時,能夠盡可能保證圖像不失真。

4.YUV player

用於播放YUV原始視頻文件。

注意,YUV格式的視頻文件是沒有文件頭信息的,也就是說播放器不會知道該文件中的視頻數據的分辨率、采樣格式(420、444等)等基礎信息,我們在播放他時需要手工指定這些信息,如果指定錯誤,則畫面全是亂的。

5.Adobe Audition

用於查看PCM音頻文件。

注意:PCM文件也是沒有文件頭信息的,我們在播放他時需要手工指定采樣率、通道(聲道)、分辨率(采樣精度)等。當指定錯誤的話,聲音會出問題,例如采樣率指定太高,可能聲音播放速度會變快,采樣精度寫錯的話,聲音雜亂不堪。

 

 

===


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM