将多个“.alaw”文件并行转换为“.mp3”

convert multiple '.alaw' files to '.mp3' in parallel

/root/date/agent1/voicefilename-in.alaw
/root/date/agent1/voicefilename-out.alaw
/root/date/agent2/voicefilename-in.alaw
/root/date/agent2/voicefilename-out.alaw
/root/date/agent4/voicefilename-in.wav
/root/date/agent4/voicefilename-out.wav

我正在使用以下脚本将上述类型的文件转换为 mp3。

完成转换需要很长时间,因为一次只转换一个文件

有没有其他方法可以同时读取和转换多个文件

 FILES=/root/*/*/*-in.*"
  for f in $FILES
  do
    fileroot="${f%-in.*}"
    if [  ${f##*.} == "alaw" ]
    then
        sox -t al "$f" -s -r 8000 -2 "$fileroot"-in.wav
        sox -t al "$fileroot"-out.alaw -s -r 8000 -2 "$fileroot"-out.wav
        sox -m  "$fileroot"-in.wav "$fileroot"-out.wav "$fileroot".wav
        lame -q0 -b8  "$fileroot".wav  "$fileroot".mp3
        rm  "$f" "$fileroot"-out.alaw "$fileroot"-in.wav "$fileroot"-out.wav  "$fileroot".wav
    elif [  ${f##*.} == "wav" ]
    then
         sox -m  "$f" "$fileroot"-out.wav "$fileroot".wav
         lame -q0 -b8  "$fileroot".wav  "$fileroot".mp3
         rm "$f" "$fileroot"-out.wav "$fileroot".wav   
    fi
done

使用 GNU parallel 转换 .alaw 文件,每个 CPU 核心使用一个进程,编写每个将文件输出到当前目录,尝试类似:

parallel sox {} {/.}.mp3 ::: /root/date/agent1/*.alaw

然后如果输出令人满意,并且不再需要源文件:

rm /root/date/agent1/*.alaw