音视频入门基础:PCM专题(1)——使用FFmpeg命令生成PCM音频文件并播放

=================================================================

音视频入门基础:PCM专题系列文章:

音视频入门基础:PCM专题(1)——使用FFmpeg命令生成PCM音频文件并播放

音视频入门基础:PCM专题(2)——使用Qt播放PCM音频文件

音视频入门基础:PCM专题(3)——使用Audacity工具分析PCM音频文件

=================================================================

一、PCM的定义

    PCM(Pulse Code Modulation / 脉冲编码调制)是一种音频编码方式,一种将模拟音频信号经模数转换(A/D变换)形成二进制序列的方式,也是一种用数字表示采样模拟信号的方法。

    简单地来讲,PCM就是一种无压缩的原始音频格式。我们熟知的MP3、AAC等格式的音频是有压缩的(因为无压缩导致的结果就是占用空间会很大,会极大地增加存贮和传输的成本,所以存贮在电脑上的一般是MP3、AAC等格式的文件)。播放器要想播放MP3,AAC,APE,FLAC等格式的音频文件,首先得把它们解码成PCM音频数据(解码出来后一般是FLT的格式,还要通过重采样转为声卡支持的S16格式),然后才能播放。

    通过FFmpeg命令可以生成PCM音频格式的文件,该文件没有附加的文件头和文件结束标志,仅包含原始的无压缩的PCM音频数据。Windows的Convert工具能够把PCM音频格式的文件转换成Microsoft的WAV格式的文件。

二、通过FFmpeg命令生成PCM文件

  如下图所示,工程目录下有audio1.mp3这个MP3文件,下面介绍把它转为PCM文件的方法:

在命令提示符cmd.exe中进入当前工程所在目录(ffmpeg.exe和audio1.mp3所在目录),然后输入命令:

ffmpeg -i audio1.mp3 -ar 44100 -ac 2 -f s16le audio1.pcm

该命令的作用是把所在路径下的audio1.mp3文件转换为采样频率44100Hz,双通道立体声,采样位数s16(声卡支持该格式)、小端格式的PCM文件:audio1.pcm。

注:

-i参数:设定输入流
-ar参数:设置输出文件的音频采样率
-ac参数:设置输出文件的音频通道数
-f参数:设置输出文件的音频采样位数

采样位数,或者说采样格式有如下选择:

s16             0            ..F.A...... signed 16-bit
s32             1            ..F.A...... signed 32-bit
f32             2            ..F.A...... floating-point single
f64             3            ..F.A...... floating-point double

通过以下五个参数来描述一个PCM数据,同时也仅需要这五个参数就能播放一个PCM音频文件:

采样频率:
单位为:Hz。采样频率越高,得到的声音就更加接近原始声音,声音的还原度就越高,质量越好,但占用空间也越大。

符号: 
音频数据是否是有符号的。通常情况下都是有符号的。若是将有符号的数据当做无符号的数据来处理将会使声音听来很刺

采样位数: 
每一个采样数据的大小,表示有多少个等级可以用于衡量真实的模拟信号。采样位数越大对模拟信号的描述将越真实,对声音的描述就更加准确。

字节序: 
字节序指的是little-endian还是big-endian,表示音频数据的存储字节序,通常均为little-endian。

声道数: 
标识音频是单声道(mono,1 channel)还是立体声(stereo,2 channels)。

执行上述生成pcm文件的命令后,我们发现工程目录下会生成文件audio1.pcm:

三、PCM文件大小计算

  我们可以观察到通过audio1.mp3生成的audio1.pcm文件大小为49.5MB,而audio1.mp3文件的大小仅仅为11.2MB。audio1.pcm比audio1.mp3大了数倍。证明了PCM格式占用空间比MP3格式的要大:

关于pcm文件的大小,比如audio1.pcm文件的大小为49.5MB,这个49.5MB,是可以根据公式计算出来的。

计算PCM文件大小的公式:

PCM文件大小 = (采样频率*采样位数*声道)*时间 / 8(单位:字节数).

由上述生成pcm文件的命令我们可以知道:audio1.pcm的采样频率(音频采样率)为44100Hz,采样位数为16位,声道数(音频信道数目)为2。而生成audio1.pcm的audio1.mp3的音频总时长为294秒。

根据上述公式,计算得出的audio1.pcm的大小 = (44100 * 16 * 2) * 294 / 8 =  51861600(字节) = 49.45MB。这个跟我们在电脑上看到的audio1.pcm文件大小为49.5MB是一致的。由此证明了计算PCM文件大小的公式的正确性。

四、使用ffplay.exe播放PCM文件

PCM文件是原始无压缩的音频格式文件,用市面上流行的播放器我们一般无法直接播放。但我们可以通过FFmpeg提供的ffplay.exe播放PCM文件。

在命令提示符cmd.exe中进入当前工程所在目录(ffplay.exe和audio1.pcm所在目录),然后输入命令:

ffplay -ar 44100 -ac 2 -f s16le -i audio1.pcm

该命令的作用是使用ffplay播放频率为44100Hz,双通道,16位、小端的音频文件audio1.pcm。由于pcm文件没有文件头,不包含任何采样频率、通道数、采样位数等信息,所以播放的时候得指定这些参数。

注:

-i 表示指定的输入文件
-f 表示强制使用的格式
-ar 表示播放的音频数据的采样率
-ac 表示播放的音频数据的通道数

出现如下画面和能听到音乐,则表示播放成功:

五、遇到问题:

如果使用ffplay.exe播放媒体文件遇到错误:WASAPI can't initialize audio client。如下图所示:

则先在命令提示符执行命令:

set SDL_AUDIODRIVER=directsound

然后再使用ffplay.exe播放媒体文件。

六、资源下载

资源下载地址在https://download.csdn.net/download/u014552102/10671629,包含上述演示用的所有资源。包括上述的ffmpeg.exe,ffplay.exe,mp3文件,pcm文件等。

七、参考文章

什么是PCM数据格式? Audacity怎么导入音频?

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值