[ffmpeg] 音頻樣本


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

 

聲道

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

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

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

image

 

 

采樣率

音頻采樣,是把聲音從模擬信號轉換為數字信號。采樣率,就是每秒對聲音進行采集的次數,同樣也是所得的數字信號的每秒樣本數。在對聲音進行采樣時,常用的采樣率有8k(電話)、44.1k(CD)、48k(視頻音軌)、96k/192k(Hi-Res)。

image

 

 

樣本格式

單個聲道的樣本的編碼類型

區別於前文所述的樣本,我們這里為其添加了前綴,特指單個聲道中的樣本。音頻在經過采樣得到樣本后,還需要對該樣本執行兩個步驟

  1. 量化。音頻量化的量化位數常用的有8bit、16bit、32bit、64bit。
  2. 二進制編碼。也就是把量化所得的結果,即單個聲道的樣本,以二進制的碼字進行存放。其中有兩種存放方式:直接以整形來存放量化結果,即Two's complement code;以浮點類型來存放量化結果,即Floating point encoding code。兩者有如下關系:
    $\displaystyle{Q_{FLT} = \frac{Q_{INT}}{X_{Range}}}$
    其中$X_{Range}$代表該量化器的量化范圍,$Q_{INT}$量化器所得出的結果,$Q_{FLT}$則是該結果的浮點表示。量化器所得出的量化結果必定在量化范圍之內,因此從上面的式子可以看出,$Q_{FLT}$的絕對值必然小於等於1。

 

幀(frame)

音頻在量化得到二進制的碼字后,需要進行變換,而變換(MDCT)是以塊為單位(block)進行的,一個塊由多個(120或128)樣本組成。而一幀內會包含一個或者多個塊。

幀的常見大小有960、1024、2048、4096等。

image

 

幀當中的樣本的組合方式

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

image

 

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
};

 

可見其中有U8(無符號整型8bit)、S16(整型16bit)、S32(整型32bit)、FLT(單精度浮點類型)、DBL(雙精度浮點類型)、S64(整型64bit),不以P為結尾的都是interleaved結構,以P為結尾的是planar結構。


免責聲明!

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



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