记录一个脚本,功能使用过sox来批量转换wav为采样率16000的wav,更复杂的转换可以通过ffmpeg来进行转换,当然sox也提供了很多的转换,详细的可以查阅他的document
#/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!"