自动批处理 - 修剪、更改比特率,然后通过 Windows 上的 sox 规范化 wav 文件

自动批处理 - 修剪、更改比特率,然后通过 Windows 上的 sox 规范化 wav 文件

我想批量处理文件夹中的 wav 文件:

  1. 首先将文件修剪为 5 秒,并将修剪后的文件放在名为“Trim5s”的文件夹中,然后
  2. 更改修剪文件(位于“Trim5s”文件夹中)的比特率,并将上述步骤 1 中修剪文件得出的新比特率文件保存到名为“16bit”的文件夹中,然后
  3. 将新修剪的 + 新比特率文件标准化为 -1,位于上述步骤 2 中得到的“16bit”文件夹中,并将标准化 + 修剪的文件 + 新比特率文件保存到文件夹“Norm-1”中。

这是我的文件夹结构:

MainFolder
   |____file1.wav
   |____file2.wav
   |____Trim5s
           |____file1_trim5s.wav
           |____file2_trim5s.wav
           |____16bit
                  |____file1_trim5s_16bit.wav
                  |____file2_trim5s_16bit.wav
                  |____Norm-1
                         |____file1_trim5s_16bit_Norm-1.wav
                         |____file2_trim5s_16bit_Norm-1.wav
        

目前我每次都手动执行每个步骤。以下是 Windowscmd命令:

步骤 1:将文件修剪至秒:

for %i in (*.wav) do sox -S "%i" "Trim5s\%~ni_trim5.wav" trim 0 5

然后我手动将目录更改为“Trim5s”并运行第二步:

第 2 步:在“Trim5s”文件夹中将位深度更改为 16 位:

for %i in (*.wav) do sox -S "%i" -b 16 "16bit\%~ni_16bit.wav"

然后我再次手动将目录更改为文件夹“16bit”并运行第三步:

步骤 3:规范化16bit文件夹中的文件:

for %i in (*.wav) do sox -S --norm=-1 "%i" "Norm-1\%~ni_norm-1.wav"

有没有办法自动执行此过程,让我可以自动完成所有 3 个过程?也就是说,将上面给出的三个手动步骤转换为嵌套循环?嵌套循环可以完成吗?或者有没有更好的方法可以从 MainFolder 自动执行上面提到的 3 个任务?

这是我迄今为止尝试过的:

for %i in (*.wav) do sox -S "%i" "Trim5s\%~ni_trim-pt75.wav" trim 0 0.75 & 
cd Trim5s for %i in (*.wav) do sox -S "%i" -b 16 "16bit\%~ni_16bit.wav" & 
cd Norm-1 for %i in (*.wav) do sox -S --norm=-1 "%i" "Norm-1\%~ni_norm-1.wav"

任何帮助将不胜感激!

答案1

@echo off && cd /d "%~dp0"

2>nul mkdir "%~dp0Trim5s\16bit" "%~dp0Trim5s\Norm-1"
set "_sox=C:\Program Files (x86)\sox-14-4-2\sox.exe"

for %%i in ("%~dp0*.wav")do "%_sox%" -S "%%~fi" "%~dp0Trim5s\%%~ni_trim-pt75.wav" trim 0 0.75
for %%i in ("%~dp0Trim5s\*.wav")do "%_sox%" -S "%%~fi" -b 16 "%~dp0Trim5s\16bit\%%~ni_16bit.wav"
for %%i in ("%~dp0Trim5s\16bit\*.wav")do "%_sox%" -S --norm=-1 "%%~fi" "%~dp0Trim5s\Norm-1\%%~ni_norm-1.wav"

您不需要cd folder并且&

for %i in (*.wav) do sox -S "%i" "Trim5s\%~ni_trim-pt75.wav" trim 0 0.75 & 
cd Trim5s for %i in (*.wav) do sox -S "%i" -b 16 "16bit\%~ni_16bit.wav"  & 
cd Norm-1  for %i in (*.wav) do sox -S --norm=-1 "%i" "Norm-1\%~ni_norm-1.wav"

使用"%~dp0""%~dp0+Path"

"%~dp0*.wav"
"%~dp0Trim5s\*.wav"
"%~dp0Trim5s\16bit\*.wav"
  • 观察:假设您的浴室在MainFolder文件夹中,如果没有,请替换:
rem :: %~dp0 
rem :: C:\Full\Path\To\MainFolder\
  • @echo off && cd /d "C:\Full\Path\To\MainFolder\"
      
    2>nul mkdir "%cd%\Trim5s\16bit" "%cd%\Trim5s\Norm-1"
    set "_sox=C:\Program Files (x86)\sox-14-4-2\sox.exe"
      
    for %%i in ("%cd%\*.wav")do "%_sox%" -S "%%~fi" "%~dp0Trim5s\%%~ni_trim-pt75.wav" trim 0 0.75
    for %%i in ("%cd%\Trim5s\*.wav")do "%_sox%" -S "%%~fi" -b 16 "%~dp0Trim5s\16bit\%%~ni_16bit.wav"
    for %%i in ("%cd%\Trim5s\16bit\*.wav")do "%_sox%" -S --norm=-1 "%%~fi" "%~dp0Trim5s\Norm-1\%%~ni_norm-1.wav"


相关内容