我已经在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响应缓慢的请求终止或跳过当前输入文件。

两个问题。
  • 是否可以使用--multi-thread如上所述或另一种方式同时将1个输入文件拆分为2个输出文件?
  • 如果是,怎么办? (注意:我无法从上面的文档中找到正确的语法来获取SOX_OPTS,以便在批处理文件中自行处理)

  • 另外:我发现了一些与此类似的其他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/

    10-13 08:28