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 4字节 32 bits
    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
};

这里的数字,8,16(两个字节),32等都是代表音频采样的位深
ffmpeg中支持的音频互相转换的采样格式和声道分布_第1张图片
其中s16le,f32le,s8就是采样位深,le代表大小端,

交错模式和平面模式(Planar)

采样格式最后一个字母如果是P就代表数据格式是平面模式,存储时其左声道和右声道的数据是分开存储的,左声道的数据存储在data[0],右声道的数据存储在data[1],每个声道的所占⽤的字节数为linesize[0]和linesize[1];
LLLLLLRRRRRRLLLLLLRRRRRRLLLLLLRRRRRRL…(每个LLLLLLRRRRRR为一个音频帧)
如果最后一个字母不是P就代表是交错模式,存储时是按照LRLRLR…的格式交替存储在data[0]中,linesize[0]表示总的数据量。
LRLRLRLRLRLRLRLRLRLRLRLRLRLRLRLRLRLRL…(每个LR为一个音频样本)

比如AAC目前编码基本都是一帧有1024个采样点,那么对于2chn的交错模式,就需要一帧1024个LR数据,对于planar模式就是一帧中先有1024个L,再加上1024个R
保存到本地的音频一定要用交错模式

linesize和nb_samples

linesize表示一个平面内总比特数(经过内存对齐), nb_samples表示一帧音频帧的采样点数

采样频率:每秒钟采样的点的个数。常用的采样频率有:
22000(22kHz): 无线广播。
44100(44.1kHz):CD音质。
48000(48kHz): 数字电视,DVD。
96000(96kHz): 蓝光,高清DVD。
192000(192kHz): 蓝光,高清DVD。
采样精度(采样深度):每个“样本点”的大小,
常用的大小为8bit, 16bit,24bit。
通道数:单声道,双声道,四声道,5.1声道。

你可能感兴趣的:(ffmpeg,音视频)