赞
踩
=================================================================
音视频入门基础:PCM专题系列文章:
音视频入门基础:PCM专题(1)——使用FFmpeg命令生成PCM音频文件并播放
音视频入门基础:PCM专题(2)——使用Qt播放PCM音频文件
音视频入门基础:PCM专题(3)——使用Audacity工具分析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格式的文件。
如下图所示,工程目录下有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:
我们可以观察到通过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文件大小的公式的正确性。
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文件等。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。