记录一个脚本,功能使用过sox来批量转换wav为采样率16000的wav,更复杂的转换可以通过ffmpeg来进行转换,当然sox也提供了很多的转换,详细的可以查阅他的document
#/bin/bashexport arrayindexexport arrayfunction scandir() { local cur_dir parent_dir workdir workdir=$1 cd $workdir if test $workdir = "/" then cur_dir="" else cur_dir=$(pwd) fi for dirlist in $(ls $cur_dir) do if test -d $dirlist;then cd $dirlist scandir $cur_dir/$dirlist cd .. else # echo ${cur_dir}/${dirlist} #shell 数组赋值 array[$arrayindex]=$cur_dir/$dirlist #注意shell索引的递增方式 ((arrayindex++)) fi done}function GetALLDirInfo() { local dir dir=$1 arrayindex=0 if test -d $dir then scandir $dir elif test -f $dir then echo "you input a file not a directory" exit 1 else echo "the dir you input $dir is not exit" fi }read -p "please input the paths needed transform(file or dir):" LOCATIONecho "path is:$LOCATION"read -p "please input the dir which you need to save the transform file :" SAVE_DIRecho "path is:$SAVE_DIR"if [ ! -d $SAVE_DIR ]then mkdir $SAVE_DIRfiif [[ -d $LOCATION ]]then GetALLDirInfo $LOCATION for content in ${array[@]} do file_name=${content##*/} echo $file_name length=${#file_name} out_name=${file_name:0:length-4} echo $out_name echo $SAVE_DIR"/"$out_name"_16000.wav" sox $content -r 16000 $SAVE_DIR"/"$out_name"_16000.wav" doneelse file_name=${LOCATION##*/} echo $file_name length=${#file_name} out_name=${file_name:0:length-4} echo $out_name echo $SAVE_DIR"/"$out_name"_16000.wav" sox $LOCATION -r 16000 $SAVE_DIR"/"$out_name"_16000.wav"fiecho "Transformation is completed!"