当前位置:   article > 正文

音视频入门基础:PCM专题(1)——使用FFmpeg命令生成PCM音频文件并播放_二进制文件转为pcm

二进制文件转为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。

注:

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

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

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

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

  1. 采样频率:
  2. 单位为:Hz。采样频率越高,得到的声音就更加接近原始声音,声音的还原度就越高,质量越好,但占用空间也越大。
  3. 符号: 
  4. 音频数据是否是有符号的。通常情况下都是有符号的。若是将有符号的数据当做无符号的数据来处理将会使声音听来很刺
  5. 采样位数: 
  6. 每一个采样数据的大小,表示有多少个等级可以用于衡量真实的模拟信号。采样位数越大对模拟信号的描述将越真实,对声音的描述就更加准确。
  7. 字节序: 
  8. 字节序指的是little-endian还是big-endian,表示音频数据的存储字节序,通常均为little-endian。
  9. 声道数: 
  10. 标识音频是单声道(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文件没有文件头,不包含任何采样频率、通道数、采样位数等信息,所以播放的时候得指定这些参数。

注:

  1. -i 表示指定的输入文件
  2. -f 表示强制使用的格式
  3. -ar 表示播放的音频数据的采样率
  4. -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怎么导入音频?

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/995023
推荐阅读
相关标签
  

闽ICP备14008679号