Bootstrap

利用FFmpeg将pcm文件转成wav文件

现在需要利用cool edit对一批pcm音频文件进行分析。由于没有相关信息指定音频的采样率,信道数和精度,所以cool edit在打开一个pcm的时候需要让我们指定相关参数。当需要分析的pcm非常多时,每次都需要指定相关参数就显得非常麻烦。我们可以给pcm文件添加一个wav文件头来指定相关参数,从而无需每次打开进行设置。
给原始的pcm数据添加wav头不是什么麻烦事,我们完全可以写一个c程序实现这个功能,但是针对这个简单需求写一大段代码实在没有必要,因为我们可以用现成的FFmpeg命令实现。FFmpeg可以实现视频中提取音频、不同音频格式之间的转换等功能,非常方便。但是和MP3转wav等有文件头的音频之间转换不同,pcm数据不包含文件头,我们需要在转换的时候指定pcm数据的格式,例如采样率,分辨率和大小端等。
处理的脚本pcm2wav.sh如下:

#!/bin/sh
find $1 -name "*.pcm" >list

for file in `cat list`; do
    echo $file
    wav_name=`echo $file|cut -d'.' -f1`;
    echo $wav_name.wav

    ffmpeg  -f s16le -v 8 -y -ar 16000 -ac 1 -i $file  "$wav_name.wav"
done

rm -f list

由于有很多pcm文件,而且不都在一个目录下,我们首先采用find命令生成所有pcm文件的列表,然后通过读取列表对每一首pcm文件进行处理。列表中每一个条目后缀都是.pcm,我们利用cut命令截取出后缀之前的部分,然后再补上“.wav”生成新的文件名。之后就是调用FFmpeg命令将pcm转成wav。-f选项就指定了原始pcm的格式为:16位精度小端模式录制的数据,–ar和-ac放在-i之前,表示pcm音频的格式为16k采样率单声道。

;