使用 sox 将 mp3 文件批量转换为 wav

kRa*_*y R 7 shell bash sox

对于单个 .mp3,我可以使用将其转换为 wav

sox ./input/filename.mp3 ./output/filename.wav
Run Code Online (Sandbox Code Playgroud)

我试过:

#!/bin/bash
for i in  $(ls *mp3)
do
    sox -t wav $i waves/$(basename $i)
done
Run Code Online (Sandbox Code Playgroud)

但它抛出以下错误:

sox FAIL formats: can't open input file `filename.mp3': WAVE: RIFF header not found
Run Code Online (Sandbox Code Playgroud)

我将如何对输入文件夹中的所有 mp3 文件运行此 sox 转换并将生成的 wav 保存到输出文件夹?

PS:我不知道为什么它会显示包含在反引号 ( ` ) 和撇号之间的文件 '

`文件名.mp3'

我播放了所有的 mp3,它们完美地工作。

Hid*_*eld 8

听起来您遇到了文件名中的空格问题。如果您有一个名为“My Greatest Hits.mp3”的文件,您的命令将尝试转换名为“My”、“Greatest”和“Hits.mp3”的三个不同文件。不要使用“$()”语法,只需在 for 行中使用“*.mp3”,并确保在 sox 命令中引用文件名。

此外,basename 命令不会删除文件扩展名,只会删除任何文件夹名称。所以这个命令将创建一堆带有“.mp3”扩展名的 WAV 文件。在命令中添加“-s .mp3”告诉 basename 去除扩展名,然后在末尾添加“.wav”添加正确的扩展名。

把它们放在一起,你有这个:

for i in *.mp3
do
    sox "$i" "waves/$(basename -s .mp3 "$i").wav"
done
Run Code Online (Sandbox Code Playgroud)