Sox--多线程选项:将立体声wav文件拆分为2个单声道文件Windows行命令
我在windows命令行中编写了一个批处理程序,使用sox v.14.4.0音频程序获取立体声wav文件,并将左右声道分割为单独的FLAC文件。就这样Sox--多线程选项:将立体声wav文件拆分为2个单声道文件Windows行命令,windows,command-line,sox,Windows,Command Line,Sox,我在windows命令行中编写了一个批处理程序,使用sox v.14.4.0音频程序获取立体声wav文件,并将左右声道分割为单独的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-th
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)。−−缓冲区适用于输入、效果和输出处理
−−输入−缓冲区仅适用于输入处理(它会覆盖输入处理)−−缓冲区(如果两者都给定)。
请注意,对于−−缓冲区将导致SoX响应终止请求或跳过当前输入文件的速度变慢 两个问题
另外:我还发现了一些与此类似的stackoverflow问题,但总是使用java、php、linux等。不幸的是,我对这些程序一无所知。请同情我对编程的无知。如果不熟悉你的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
这将为遇到的每个.wav
执行:runsox
过程,并传递.wav`name
runsox
过程将调用wait
过程,我将谈到这个过程。当WAIT
完成时,它将放在左侧的sox上,然后再次等待并放在右侧,然后返回下一个文件名,直到完成所有操作。名称中的%~1
表示“给定给此例程的第一个参数,减去任何引号”-这是调用提供的文件名(%%n)
wait
过程通过将tasklist
中的任务列表传递给find
过滤器,以查找字符串SOX.EXE
/i表示不考虑大小写,而/c
表示输出计数,从而找出有多少SOX.EXE
实例正在运行
因此,运行
将获取正在进行的SOX
的实例计数。如果大于或等于6(任意数字-根据您自己的情况选择。最好留下一个或两个处理器用于其他任务,因此对于8处理器的机器,6 id很好),则执行5秒的超时,5秒后再次检查任务列表。
当实例少于6个时,wait
过程退出并启动下一个任务
So-WAIT过程等待,直到SOX实例少于6个
更改6以适合您的机器,更改5以符合您的美学
编辑:删除旧的右括号但我必须纠正的一件事是删除混音2之后的“)”