音頻屬性相關:聲道、采樣率、采樣位數、樣本格式、比特率


不僅限於FFmpeg, 音頻采樣所得的PCM都含有三個要素:聲道(channel)、采樣率(sample rate)、樣本格式(sample rate)。

聲道

當人聽到聲音時,能對聲源進行定位,那么通過在不同的位置設置聲源,就可以造就出更好的聽覺感受,如果配合影像進行音頻位置的調整,則會得到更好的視聽效果。常見的聲道有:

  1. 單聲道,mono
  2. 雙聲道,stereo,最常見的類型,包含左聲道以及右聲道
  3. 2.1聲道,在雙聲道基礎上加入一個低音聲道
  4. 5.1聲道,包含一個正面聲道、左前方聲道、右前方聲道、左環繞聲道、右環繞聲道、一個低音聲道,最早應用於早期的電影院
  5. 7.1聲道,在5.1聲道的基礎上,把左右的環繞聲道拆分為左右環繞聲道以及左右后置聲道,主要應用於BD以及現代的電影院

如下是一個雙聲道的音頻系統

 

采樣率

音頻采樣,是把聲音從模擬信號轉換為數字信號。采樣率,就是每秒對聲音進行采集的次數,同樣也是所得的數字信號的每秒樣本數。在對聲音進行采樣時,常用的采樣率有:

8,000 Hz - 電話所用采樣率, 對於人的說話已經足夠
11,025 Hz - AM調幅廣播所用采樣率
22,050 Hz和24,000 Hz - FM調頻廣播所用采樣率
32,000 Hz - miniDV 數碼視頻 camcorder、DAT (LP mode)所用采樣率
44,100 Hz - 音頻 CD, 也常用於 MPEG-1 音頻(VCD, SVCD, MP3)所用采樣率
47,250 Hz - 商用 PCM 錄音機所用采樣率
48,000 Hz - miniDV、數字電視、DVD、DAT、電影和專業音頻所用的數字聲音所用采樣率
50,000 Hz - 商用數字錄音機所用采樣率
96,000 或者 192,000 Hz - DVD-Audio、一些 LPCM DVD 音軌、BD-ROM(藍光盤)音軌、和 HD-DVD (高清晰度 DVD)音軌所用所用采樣率
2.8224 MHz - Direct Stream Digital 的 1 位 sigma-delta modulation 過程所用采樣率。

采樣越高,聲音的還原就越真實越自然,人對頻率的識別范圍是 20HZ - 20000HZ, 如果每秒鍾能對聲音做 20000 個采樣, 回放時就足可以滿足人耳的需求. 所以 22050 的采樣頻率是常用的, 44100已是CD音質, 超過48000的采樣對人耳已經沒有意義。這和電影的每秒 24 幀圖片的道理差不多。

采樣位數

音頻在經過采樣得到樣本后,還需要對該樣本執行兩個步驟:

1.量化。音頻量化的量化位數常用的有:

   8bit (也就是1字節) 只能記錄 256 個數, 也就是只能將振幅划分成 256 個等級;   

  16bit  (也就是2字節) 可以細到 65536 個數, 這已是 CD 標准了;   

  32bit (也就是4字節) 能把振幅細分到 4294967296 個等級, 實在是沒必要了.

量化位數又叫做采樣位數位深度分辨率, 它是指聲音的連續強度被數字表示后可以分為多少級。N-bit的意思聲音的強度被均分為2^N級。16-bit的話,就是65535級。這是一個很大的數了,人可能也分辨不出六萬五千五百三十五分之一的音強差別。也可以說是聲卡的分辨率,它的數值越大,分辨率也就越高,所發出聲音的能力越強。這里的采樣倍數主要針對的是信號的強度特性,采樣率針對的是信號的時間(頻率)特性這是兩個不一樣的概念。

2.二進制編碼。也就是把量化所得的結果,即單個聲道的樣本,以二進制的碼字進行存放。其中有兩種存放方式:

直接以整形來存放量化結果,即Two's complement code;

以浮點類型來存放量化結果,即Floating point encoding code。

大多數格式的PCM樣本數據使用整形來存放,而在對一些對精度要求高的應用方面,則使用浮點型來表示PCM 樣本數據。

音頻在量化得到二進制的碼字后,需要進行變換,而變換(MDCT)是以塊為單位(block)進行的,一個塊由多個(120或128)樣本組成。而一幀內會包含一個或者多個塊。幀的常見大小有960、1024、2048、4096等。一幀記錄了一個聲音單元,它的長度是樣本長度和聲道數的乘積。FFmpeg中 AVFrame 結構體中的 nb_samples 代表的就是一幀中單個聲道的音頻樣本數量。

 

樣本的組合方式

這個主要是針對雙聲道或多聲道音頻來說的,對於一個雙聲道音頻來說,它的組合方式可能有以下兩種:

  1. 交錯(interleaved)。以stereo為例,一個stereo音頻的樣本是由兩個單聲道的樣本交錯地進行存儲得到的。
  2. 平面(planar)。各個聲道的樣本分開進行存儲。

FFmpeg音頻解碼后的數據是存放在AVFrame結構中的。

Packed格式,frame.data[0]或frame.extended_data[0]包含所有的音頻數據中。
Planar格式,frame.data[i]或者frame.extended_data[i]表示第i個聲道的數據(假設聲道0是第一個), AVFrame.data數組大小固定為8,如果聲道數超過8,需要從frame.extended_data獲取聲道數據。

樣本格式

FFmpeg中的樣本格式主要有:

enum AVSampleFormat {
    AV_SAMPLE_FMT_NONE = -1,
    AV_SAMPLE_FMT_U8,          ///< unsigned 8 bits
    AV_SAMPLE_FMT_S16,         ///< signed 16 bits
    AV_SAMPLE_FMT_S32,         ///< signed 32 bits
    AV_SAMPLE_FMT_FLT,         ///< float
    AV_SAMPLE_FMT_DBL,         ///< double
 
    AV_SAMPLE_FMT_U8P,         ///< unsigned 8 bits, planar
    AV_SAMPLE_FMT_S16P,        ///< signed 16 bits, planar
    AV_SAMPLE_FMT_S32P,        ///< signed 32 bits, planar
    AV_SAMPLE_FMT_FLTP,        ///< float, planar
    AV_SAMPLE_FMT_DBLP,        ///< double, planar
    AV_SAMPLE_FMT_S64,         ///< signed 64 bits
    AV_SAMPLE_FMT_S64P,        ///< signed 64 bits, planar
 
    AV_SAMPLE_FMT_NB           ///< Number of sample formats. DO NOT USE if linking dynamically
};

說明:

1.U8(無符號整型8bit)、S16(整型16bit)、S32(整型32bit)、FLT(單精度浮點類型)、DBL(雙精度浮點類型)、S64(整型64bit),不以P為結尾的都是interleaved結構,以P為結尾的是planar結構。
2.Planar模式是FFmpeg內部存儲模式,我們實際使用的音頻文件都是Packed模式的。
3.FFmpeg解碼不同格式的音頻輸出的音頻采樣格式不是一樣。測試發現,其中AAC解碼輸出的數據為浮點型的  AV_SAMPLE_FMT_FLTP  格式,MP3解碼輸出的數據為  AV_SAMPLE_FMT_S16P  格式(使用的mp3文件為16位深)。具體采樣格式可以查看解碼后的AVFrame中的 format 成員或解碼器的AVCodecContext中的 sample_fmt 成員。

比特率

每秒的傳輸速率(位速, 也叫比特率)。如705.6kbps 或 705600bps, 其中的 b 是 bit, ps 是每秒(per second)的意思,表示每秒705600bit的容量。壓縮的音頻文件常常用倍速來表示,譬如達到CD音質的MP3是128kbps/44100HZ。注意這里的單位是bit而不是Byte,一個Byte等於8個bit(位),bit是最小的單位,一般用於網絡速度的描述和各種通信速度,Byte則用於計算硬盤,內存的大小。

Mbps 即:Milionbit per second(百萬位每秒);
Kbps 即: Kilobit per second(千位每秒);
bps 即:bit per second (位每秒), 相應的換算關系為:

1Milionbit=1000Kilobit=1000000bit;1Mbps = 1000 000bps;  再次強調這里是速度單位,指每秒傳輸的二進制位數,數據傳輸速率的衡量單位K是十進制含義,但數據存儲的K是二進制含義。例如:

通常描述的1M帶寬就是1Mbps = 1000 000 bps =  1000 000 / 8 / 1000 = 125; 所以1M帶寬的下載速率一般不超過125KB/s
100M寬帶也就是100 000 000bps = 100 000 000 / 8 / 1000 / 1000 = 12.5, 所以100M帶寬的下載速率最大可達到12.5MB/s
當然了,以上只是理論速率,實際上最大的下載速率可能還達不到那么多,主要還會受到各種損耗的影響,一般100MB寬帶下載速率能達到10MB就算不錯了。

采樣率、采樣位數、比特率三者之間的關系

例:根據一個文件的大小推算出文件時長

譬如 "Windows XP 啟動.wav" 的文件長度是 424,644 字節, 它是 "22050HZ / 16bit / 立體聲" 格式(這可以從其 "屬性->摘要" 里看到),

那么它的每秒的傳輸速率(位速, 也叫比特率、取樣率)是 22050*16*2 = 705600(bit/s), 換算成字節單位就是 705600/8 = 88200(字節/秒), 
播放時間:424644(總字節數) / 88200(每秒字節數) ≈ 4.8145578(秒)。

但是這還不夠精確, 包裝標准的 PCM 格式的 WAVE 文件(*.wav)中至少帶有 42 個字節的頭信息, 在計算播放時間時應該將其去掉, 
所以就有:(424644-42) / (22050*16*2/8) ≈ 4.8140816(秒). 這樣就比較精確了。也就是:

(文件總大小 - 頭信息)/ (采樣率 * 采樣位數 * 通道數 / 8) [也就是比特率] ≈ 文件時長。

參考鏈接:

1.音頻 屬性詳解(涉及采樣率、通道數、位數、比特率、幀等)

2.PCM數據格式

3.[FFmpeg音頻樣本]

4.PCM音頻數據

 


免責聲明!

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



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