Bash
使用 sox 將 mp3 文件批量轉換為 wav
對於單個 .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