4

У меня есть папка, полная аудио-файлов .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 файла - это монопары, а третий - выходной стереофайл.

Это здорово, но я хотел бы иметь скрипт, который автоматически найдет все монопары и объединит их в стереофайлы.

Т.е. мне нужно найти все файлы с одинаковыми именами, кроме .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;

это не работает; пробелы в именах файлов приводят к сбою.

3 ответа3

5

Попробуйте это с консоли 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

ПРИМЕЧАНИЕ. «./» представляет музыкальный каталог, в котором находятся ваши файлы.

2

Исходя из предложения 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'.

0

Для людей, которым нужно сделать это в Windows с командным файлом:

4 правила, которые должны быть выполнены:

1) Пакетный файл должен быть помещен в каталог, где установлен SOX

2) Моно файлы должны быть.L.WAV и.R.WAV окончания

3) Нет пробелов в имени файла

4) Поместите все ваши монофайлы / папки в новую папку, называемую входной, внутри установочной папки SOX.

После запуска пакетного файла вы получите новую папку с именем output со всеми стереофайлами и той же структурой папок, что и входная папка.

Код комментируется, поэтому легко следовать каждому этапу процесса, не стесняйтесь изменять и публиковать здесь улучшенные версии этого скрипта (часть копирования должна быть ходовой, но я не очень разбираюсь в командном коде 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .