(资料图片)
最近在智能语音中用到了数据集cn-celeb。这个数据集的音频格式是flac,而在做数据增强(augmentation)以及模型训练时用的数据格式是wav,因此需要把音频格式从flac转到wav。我在ubuntu下摸索了一番,找到了两种方法。
1,基于Linux下的sox命令写shell脚本实现
SoX(即 Sound eXchange)是一个跨平台(Windows,Linux,MacOS 等)的命令行实用程序,可以将各种格式的音频文件转换为需要的其他格式。在Ubuntu下安装sox命令如下:sudo apt install sox。Sox装好后就开始写shell脚本,基于sox做音频格式转换的shell脚本如下:
#!/bin/bashecho "$0 $@ $#"srcdir=$1outdir=$2echo "insrc: $srcdir, outdir: $outdir"echo "doing, pls waiting"for x in $srcdir/*.flac; do name=`basename $x` dirx=`dirname $x` array=(${name//./ }) filename=${array[0]} newfile=$filename".wav" echo $newfile sox $x -t wav $outdir/$newfiledoneecho "done,pls check!!"
2,基于pydub的python库写python代码实现
Pydub是一个依赖于ffmpeg的python音频处理库,因此要先安装ffmpeg,安装命令如下:sudo apt install ffmpeg # version 7:4.2.7-0ubuntu0.1。安装后用命令ffmpeg –version查看是否安装好,如下图:
ffmpeg安装好后再在一个conda环境下安装pydub库,命令如下:pip install pydub。可以用pip list看一下是否装好以及版本,如下图:
这些都ready后就开始写python代码,基于pydub做音频格式转换的python代码如下:
from glob import globfrom pydub import AudioSegmentimport osdef find_files(directory, ext="flac"): return sorted(glob(directory + f"/**/*.{ext}", recursive=True))def trans_flac_to_wav(file_path): file_dir = os.path.dirname(file_path) new_name = os.path.basename(file_path).replace(".flac", ".wav") new_file = os.path.join(file_dir, new_name) song = AudioSegment.from_file(file_path) song.export(new_file, format="wav") print("===== Begin to Do converter =====")audio_files = find_files("/home/....../format_converter/flac")for audio_file in audio_files: # do converter trans_flac_to_wav(audio_file)
以上就是将音频格式从flac转到wav的两种方法。对其他音频格式之间的互转,方法也是适用的,只不过代码上有可能需要做一点小的改动。