.wav
オーディオファイルでいっぱいのフォルダがあります。
一部はステレオで、ほとんどはモノラルスプリットです。
モノスプリットペアはすべてfoo bar track.L.wav
およびfoo bar track.R.wav
という名前です。
コマンドラインツールsox
を使用して、次のようにモノラルペアを1つのステレオトラックに結合できます。
sox -M track1.L.wav track1.R.wav track1.Stereo.wav
ここで、最初の2つのファイルはモノラルペアで、3番目は出力ステレオファイルです。
これは素晴らしいことですが、すべてのモノラルペアを自動的に見つけてステレオファイルに結合するスクリプトが必要です。
つまり、拡張子の前の.L.
と.R.
を除いて同じ名前のすべてのファイルを検索し、それらに対してsox
を実行して、新しいファイルに出力する必要があります。 L/R
サフィックスのない同じ名前。
たとえば、フォルダに次のファイルが含まれている場合:
track1.L.wav
track2.L.wav
track3.L.wav
track4.L.wav
track1.R.wav
track2.R.wav
track3.R.wav
track4.R.wav
track6.wav
track7.wav
これらのコマンドを実行する必要があります。
sox -M track1.L.wav track1.R.wav track1.Stereo.wav
sox -M track2.L.wav track2.R.wav track2.Stereo.wav
sox -M track3.L.wav track3.R.wav track3.Stereo.wav
sox -M track4.L.wav track4.R.wav track4.Stereo.wav
これが私が今のところいるところです:
for file in ./*.L.wav;
do
file2=`echo $file | sed 's_\(.*\).L.wav_\1.R.wav_'`;
out=`echo $file | sed 's_\(.*\).L.wav_\1.STEREO.wav_'`;
echo $file - $file2 - $out;
done
それは機能しますが、echo
行を次のように置き換えると
sox -M $file $file2 $out;
それは機能しません。ファイル名にスペースがあると失敗します。
Sgmartの提案から、私はそれを解決しました:
for file1 in ./*.L.wav; do
file2=`echo $file1 | sed 's_\(.*\).L.wav_\1.R.wav_'`;
out=`echo $file1 | sed 's_\(.*\).L.wav_\1.STEREO.wav_'`;
sox -MS "$file1" "$file2" "$out";
mv "$file1" mono; mv "$file2" mono;
done
必要"
は変数の周りにあります。
そして、処理されたファイルを「mono」サブフォルダーに移動するためのビットを追加しました。
GNU/Linuxコンソールからこれを試してください。
for file in ./*L*wav;
do
for file2 in ./*R*wav;
do
$out = "Stereo"
sox -M $file $file2 $file-$out.wav;
done;
done
注:「。/」は、ファイルがある音楽ディレクトリを表します。
Windowsでバッチファイルを使用してこれを行う必要がある場合:
4つのルール満たす必要があるのは次のとおりです。
1)バッチファイルは、SOXがインストールされているディレクトリに配置する必要があります
2)モノラルファイルには.L.WAVおよび.R.WAVの終端が必要です
)ファイル名に空白はありません
4)すべてのモノラルファイル/フォルダーをSOX内のinputという名前の新しいフォルダーに配置しますインストールフォルダ
バッチファイルを実行すると、outputという名前の新しいフォルダーが作成され、すべてのステレオファイルと同じフォルダー構造が表示されます。 inputフォルダー
コードはコメント化されているので、プロセスの各ステップを簡単にたどることができます。このスクリプトの改善されたバージョンを自由に変更してここに投稿してください(コピー部分は移動する必要がありますが、cmdバッチコードの専門家ではありません!)。
さあ行こう:
cd %~dp0
setlocal enabledelayedexpansion
REM for each file with extension .L.WAV in input folder and its subdirectories do:
for /R %~dp0input %%F in (*.L.WAV) do (
REM get fullpath name and then remove the last 6 characters. ex: MYWAVE.L.WAV -> MYWAVE
set fileName=%%F
set finalName=!filename:~0,-6!
REM set names for each parameter used by sox
set wavL=!finalName!.L.WAV
set wavR=!finalName!.R.WAV
set wavST=!finalName!.ST.WAV
REM call sox for mono to stereo conversion
sox !wavL! !wavR! !wavST! -MS
)
REM creat output folder
mkdir %~dp0output
REM copy files to output folder
echo d | xcopy %~dp0input %~dp0output /S
REM delete ST files from input folder
for /R %~dp0input %%F in (*.ST.WAV) do del %%F
REM delete L files from output folder
for /R %~dp0output %%F in (*.L.WAV) do del %%F
REM delete R files from output folder
for /R %~dp0output %%F in (*.R.WAV) do del %%F