記錄一個腳本,功能使用過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!"