Dan*_*Dan 5 script command-line sox
我有一个装满.wav音频文件的文件夹。
有些是立体声,大多数是单声道拆分。
单声道分裂对都被命名foo bar track.L.wav和foo bar track.R.wav
我可以使用命令行工具sox将一对单声道组合成 1 个立体声轨道,如下所示:
sox -M track1.L.wav track1.R.wav track1.Stereo.wav
Run Code Online (Sandbox Code Playgroud)
其中前 2 个文件是单声道对,第三个是输出立体声文件。
这很棒,但我想要一个脚本,它会自动找到所有的单声道对并将它们组合成立体声文件。
即,我需要它来查找除扩展名.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
Run Code Online (Sandbox Code Playgroud)
我需要运行这些命令:
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
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止的位置:
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
Run Code Online (Sandbox Code Playgroud)
那行得通,但是当我echo用
sox -M $file $file2 $out;
Run Code Online (Sandbox Code Playgroud)
它不起作用;文件名中的空格会导致它失败。
从 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
Run Code Online (Sandbox Code Playgroud)
注意:“./”代表文件所在的音乐目录。
根据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
Run Code Online (Sandbox Code Playgroud)
需要"围绕变量。
我添加了一些内容以将处理后的文件移动到“mono”子文件夹中。
| 归档时间: |
|
| 查看次数: |
4282 次 |
| 最近记录: |