Sox - 多线程选项:将立体声wav文件拆分为2个单声道文件Windows Line命令

时间:2013-04-12 20:20:16

标签: windows command-line sox

我在Windows命令行中编写了一个批处理程序来获取立体声wav文件,并使用sox v.14.4.0音频程序将左右声道拆分为单独的FLAC文件。像这样......

for /r %%n in (*.wav) do (
 C:\sox\sox.exe %%n -c 1 %%n.left.flac remix 1
 C:\sox\sox.exe %%n -c 2 %%n.right.flac remix 2)

但是,这比我想要的要长一些。我更多地研究了这一点,似乎我可以使用SOX_OPTS和--multi-thread选项以及--buffer来同时执行两个sox操作。

Sox文档说明了这一点:

SOX_OPTS环境变量可用于为SoX的全局选项提供备用默认值。例如:

SOX_OPTS="−−buffer 20000 −−play−rate−arg −hs −−temp /mnt/temp"

请注意,设置环境变量的方式因系统而异。 以下是一些示例:MS-DOS / MS-Windows:

set SOX_OPTS=−V −−no-clobber −−buffer BYTES, −−input−buffer BYTES

设置用于处理音频的缓冲区的大小(以字节为单位)(默认为8192) - 缓冲适用于输入,效果和输出处理;
--input-buffer仅适用于输入处理(如果两者都给出,它将覆盖 - 缓冲) 请注意, - 缓冲区的大值将导致SoX响应终止或跳过当前输入文件的请求变慢。

两个问题。

  1. 是否可以使用--multi-thread同时将1个输入文件拆分为2个输出文件,如上所述或其他方式?
  2. 如果是这样,怎么样? (注意:我无法找出正确的语法来从上面的文档中获取SOX_OPTS以便在批处理文件中自行处理它)
  3. 另外:我发现了一些类似于此的其他stackoverflow问题,但总是使用java,php,linux等。不幸的是,我对这些程序没有任何了解。请同情我的编程无知。

1 个答案:

答案 0 :(得分:2)

不知道如果没有比我更喜欢你的SoX更熟悉......

但是,我试试这个:

作为测试,请使用单个.wav文件

for /r %%n in (justone.wav) do (
 START "Left" C:\sox\sox.exe %%n -c 1 %%n.left.flac remix 1
 START "Right" C:\sox\sox.exe %%n -c 2 %%n.right.flac remix 2)

也许它会在多处理器机器上同时运行两个实例。 (窗口标题是“左”或“右”)

现在 - 如果有效,请尝试

@ECHO OFF
SETLOCAL
for /r %%n in (*.wav) do CALL :runsox "%%n"
GOTO :eof

:runsox
CALL :wait
START "%~1.left" C:\sox\sox.exe %~1 -c 1 %~1.left.flac remix 1
CALL :wait
START "%~1.right" C:\sox\sox.exe %~1 -c 2 %~1.right.flac remix 2
GOTO :eof

:wait
FOR /f %%c IN ('tasklist^|find /i /c "sox.exe"') DO SET running=%%c
IF %running% GEQ 6 timeout /t 5 >nul&GOTO wait
GOTO :eof

这样做会对遇到的每个:runsox执行.wav过程,并传递.wav`名称。

runsox程序会调用wait程序 - 我将会这样做。当WAIT完成后,它将放在左边的sox上,然后再次等待并放在右边,然后返回下一个文件名,直到完成所有操作。名称中的%~1表示'给予此例程的第一个参数,减去任何封闭的引号` - 这是CALL提供的文件名(%% n)。

wait过程通过将任务列表从SOX.EXE传递到tasklist过滤器来查找字符串{{1},从而找出正在运行的find个实例数} sox.exe表示无论情况如何,/i表示输出计数。

因此,

/c获取正在进行的Running个实例的计数。如果大于或等于6(任意数字 - 选择它适合自己。最好留下一个或两个处理器用于其他任务,所以6个ID适用于8个处理器的机器)然后执行超时5秒5秒后,再次检查任务列表。 当少于6个实例时,SOX过程退出并开始下一个任务。

所以 - wait过程等待,直到少于6个SOX实例。

更改6以适合您的机器和5您的美学。

编辑:删除旧版关闭括号