你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

ffmpeg之pcm音频参数笔记

2021/12/31 17:55:08

一、概述

ffmpeg音频参数主要有如下四个:

1、声道数(nb_channels):常见的有单声道,双声道,5.1环绕立体声道。

2、采样频率(nb_samples):每秒钟取得声音样本的次数。如下图所示,把音频文件放大,实际上都是一个一个的点,一秒钟有多少个横坐标的点,就是该音频的采样频率。

 3、采样深度 (sample_fmt):比特深度决定了文件的动态分辨率,类似照片分辨率。每个样本所含的比特越多,代表着动态范围越大。这并不意味,比特深度越高,音量越大;而是更高的比特深度听起来会更加真实,因为它们可以尽量减少音频失真度。如上图所示,每个点的纵坐标的刻度到底有多细。纵坐标越粗,音频失真越大。反之越细,音频失真越少。

目前ffmpeg支持的sample_fmt类型如下:

AVSampleFormat枚举数据类型存储方式name占用bit位
AV_SAMPLE_FMT_U8unsigned 8 bitspackedu88bit
AV_SAMPLE_FMT_S16signed 16 bitspackeds1616bit
AV_SAMPLE_FMT_S32signed 32 bitspackeds3232bit
AV_SAMPLE_FMT_FLTfloatpackedflt32bit
AV_SAMPLE_FMT_DBLdoublepackeddbl64bit
AV_SAMPLE_FMT_U8Punsigned 8 bitsplanaru8p8bit
AV_SAMPLE_FMT_S16Psigned 16 bitsplanars16p16bit
AV_SAMPLE_FMT_S32Psigned 32 bitsplanars32p32bit
AV_SAMPLE_FMT_FLTPfloatplanarfltp32bit
AV_SAMPLE_FMT_DBLPdouble planardblp64bit
AV_SAMPLE_FMT_S64signed 64 bitspackeds6464bit
AV_SAMPLE_FMT_S64Psigned 64 bits planars64p64bit

 备注:

1、该数据是参考ffmpeg代码中的static const SampleFmtInfo sample_fmt_info表格。

2、packed和planar含义:

  • packed:多个声道数据交错存放,所有声道的数据交错排放在frame.data[0],数据长度为linesize[0](单位:字节)
  • planar:每个声道数据单独存放,声道0的起始地址为 frame.data[0],声道1的起始地址为 frame.data[1],以此类推。每个声道的数据长度都为linesize[0](单位:字节)

二、帧率计算

根据上述描述,一帧PCM音频长度计算公式如下:

framesize=通道数*采样频率*采样深度占用bit数。

可参考ffmpeg的av_samples_get_buffer_size函数: