ffmpeg系列--音频格式介绍

本系列文章会陆续更新与ffmpeg相关的知识点。

一、环境信息

1、ffmpeg版本:4.4

2、linux

二、通过libavutil/samplefmt.h中查看该版本中支持以下音频格式。

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、位深:单次音频采样的bit数,一般有8、16、32;

2、存储方式:目前ffmpeg的音频和视频支持两种存储方式,一种为packed(打包方式),另一种为(planner);

a、packed: 即不同声道的数据时交织在一起的,如某个audio有2个声道,采用packed方式时,先取第一个通道的一个位深(8、16、32),再取第二个通道的一个位深(8、16、32),如此交织在一起行成一帧音频数据。

b、planar:即不同的声道是像平面一样展开,仍然以2通道的声音举例,即一帧数据采用先存储第一个通道的所有数据,然后紧接着存储第二个通道的所有数据,如此形成一帧音频数据。

3、有无符号:单次采样值是有符号还是无符号整数或者float。

4、整数、浮点数、双精度:与第三点类似。

上述信息我们可以通过上述枚举的类型命名中洞察一二,如US分别代表无符号、有符号;

FLT、DBL代表float和双精度数值,也同时隐含说明了该采用值的位深,如同命名中的8、16、32;后续的P代表planar模式,默认不带p的为packed模式,如S32P、FLTP中最后的字母“P”就代表了planar模式。

【注意】:由于是一边学习,一边总结,难免有错漏之处,也请各位专家不吝指教,感谢。

上一篇:unsupported option ‘--noexecstack‘


下一篇:梳理FFmpeg基础知识