记录一个脚本,功能使用过sox来批量转换wav为采样率16000的wav,更复杂的转换能够经过ffmpeg来进行转换,固然sox也提供了不少的转换,详细的能够查阅他的documentshell
#/bin/bash export arrayindex export array function 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):" LOCATION echo "path is:$LOCATION" read -p "please input the dir which you need to save the transform file :" SAVE_DIR echo "path is:$SAVE_DIR" if [ ! -d $SAVE_DIR ] then mkdir $SAVE_DIR fi if [[ -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" done else 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" fi echo "Transformation is completed!"