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

时间:2018-01-20 02:12:23

标签: shell multitasking sox

/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

1 个答案:

答案 0 :(得分:2)

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

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

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

rm /root/date/agent1/*.alaw