soxを使用してmp3ファイルをwavにバッチ変換

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を再生し、そのファイルはうまくいきました。

ベストアンサー1

ファイル名にスペースがある問題があるようです。 「My Greatest Hits.mp3」というファイルがある場合、コマンドは「My」、「Greatest」、および「Hits.mp3」という3つの異なるファイルを変換しようとします。 "$()" 構文を使用しないでください。 for 行に「*.mp3」を使用し、sox コマンドでファイル名を引用します。

また、basenameコマンドはファイル拡張子を削除せずにフォルダ名のみを削除します。したがって、このコマンドは拡張子「.mp3」を持つ複数のWAVファイルを生成します。コマンドに「-s .mp3」を追加すると、basenameに拡張子を削除するように指示し、最後に「.wav」を入れると正しい拡張子が追加されます。

それらを合わせると、次のような結果が得られます。

for i in *.mp3
do
    sox "$i" "waves/$(basename -s .mp3 "$i").wav"
done

おすすめ記事