Bash

使用 sox 將 mp3 文件批量轉換為 wav

  • February 1, 2020

對於單個 .mp3,我可以使用將其轉換為 wav

sox ./input/filename.mp3 ./output/filename.wav

我試過:

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

但它會引發以下錯誤:

sox FAIL formats: can't open input file `filename.mp3': WAVE: RIFF header not found

我將如何對輸入文件夾中的所有 mp3 文件執行這個 sox 轉換並將生成的 wav 保存到輸出文件夾?

PS:我不知道為什麼它顯示包含在反引號()和撇號之間的文件'`

`文件名.mp3'

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

聽起來您遇到了文件名中的空格問題。如果您有一個名為“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

引用自:https://unix.stackexchange.com/questions/425532