ffmpeg之pcm音频参数笔记

一、概述

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音频长度计算公式如下:若单帧是20ms持续时长

framesize=通道数*20ms对应采样点数*采样深度占用bit数。

同理,码率=通道数*1秒对应采样点数*采样深度占用bit数

例如PCMA数据,通道数为单声道,采样率为8000HZ,采样深度为8bit。当10ms一帧时,

单帧的长度为:通道数1*(采样率8000/1000ms)*10ms*8bit=640bit=80字节

码率为:通道数1*采样率8000*8bit=64kbps

可参考ffmpeg的av_samples_get_buffer_size函数:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值