我已经在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仅适用于输入处理(如果给定两者,则它会覆盖-buffer)。
请注意,-buffer的较大值将导致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
这将为遇到的每个
:runsox
执行.wav
过程,并传递.wav`名称。runsox
过程将调用wait
过程-我要来。 WAIT
完成后,将其放在左侧的sox上,然后再次等待并置于右侧,然后返回下一个文件名,直到完成所有操作。名称中的%~1
表示“为此例程提供的第一个参数,减去任何引号”,即CALL提供的文件名(%% n)。wait
过程通过通过SOX.EXE
过滤器将来自tasklist
的任务列表传递给find
过滤器来查找字符串sox.exe
,即/i
表示大小写,而/c
表示输出计数,从而找出正在运行的Running
实例数。因此,
SOX
获取正在进行的wait
实例的计数。如果该值大于或等于6(一个任意数字-请选择适合自己的数字。最好将一两个处理器留给其他任务使用,所以6 id对一台8处理器的计算机来说是一个好习惯),那么将执行5秒钟的超时5秒钟后,再次检查任务列表。当实例少于6个时,
WAIT
过程退出,并开始下一个任务。因此,ojit_code过程将等待直到少于6个SOX实例。
更改6以适合您的机械,更改5以满足您的美学要求。
编辑:删除旧的右括号
关于windows - Sox-多线程选项: Split stereo wav file to 2 mono files Windows Line command,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15980193/