ffmpeg之pcm音频参数笔记

一、概述

ffmpeg之pcm音频参数笔记_第1张图片

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

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

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

ffmpeg之pcm音频参数笔记_第2张图片

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

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

AVSampleFormat枚举 数据类型 存储方式 name 占用bit位
AV_SAMPLE_FMT_U8 unsigned 8 bits packed u8 8bit
AV_SAMPLE_FMT_S16 signed 16 bits packed s16 16bit
AV_SAMPLE_FMT_S32 signed 32 bits packed s32 32bit
AV_SAMPLE_FMT_FLT float packed flt 32bit
AV_SAMPLE_FMT_DBL double packed dbl 64bit
AV_SAMPLE_FMT_U8P unsigned 8 bits planar u8p 8bit
AV_SAMPLE_FMT_S16P signed 16 bits planar s16p 16bit
AV_SAMPLE_FMT_S32P signed 32 bits planar s32p 32bit
AV_SAMPLE_FMT_FLTP float planar fltp 32bit
AV_SAMPLE_FMT_DBLP double  planar dblp 64bit
AV_SAMPLE_FMT_S64 signed 64 bits packed s64 64bit
AV_SAMPLE_FMT_S64P signed 64 bits  planar s64p 64bit

 备注:

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函数:

ffmpeg之pcm音频参数笔记_第3张图片

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