windows - Sox --多线程选项 : Split stereo wav file to 2 mono files Windows Line command

标签 windows command-line sox

我在 Windows 命令行中编写了一个批处理程序,以获取立体声 wav 文件,并使用 sox v.14.4.0 音频程序将左右 channel 拆分为单独的 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_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)。
--buffer适用于输入、效果和输出处理;
--input-buffer 仅适用于输入处理(如果两者都给定,则它会覆盖 --buffer)。
请注意,较大的 −−buffer 值将导致 SoX 响应终止或跳过当前输入文件的请求变得缓慢。

两个问题。

  1. 是否可以使用上面解释的 --multi-thread 或其他方式同时将 1 个输入文件拆分为 2 个输出文件?
  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

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

runsox 过程将调用 wait 过程 - 我将对此进行介绍。当WAIT完成时,它将放置在左侧的 socks 上,然后再次等待并放置在右侧的 socks 上,然后返回下一个文件名,直到全部完成。名称中的 %~1 表示“给予此例程的第一个参数,减去任何括起来的引号” - 这就是 CALL 提供的文件名 (%%n)。

wait 过程通过将 tasklist 中的任务列表传递到 来找出正在运行的 SOX.EXE 实例数量。 find 过滤器查找字符串 sox.exe /i 表示不区分大小写,/c 表示输出计数。

因此,

Running 获取正在进行的 SOX 实例的计数。如果大于或等于 6(任意数字 - 选择适合自己的数字。最好为其他任务留下一两个处理器,因此 6 id 对于 8 处理器机器来说很好),则执行 5 秒的超时5 秒后,再次检查任务列表。 当实例少于 6 个时,wait 过程退出并开始下一个任务。

因此 - WAIT 过程会一直等待,直到 SOX 实例少于 6 个为止。

更改 6 以适应您的机械,并更改 5 以适应您的审美。

编辑:删除旧的右括号

关于windows - Sox --多线程选项 : Split stereo wav file to 2 mono files Windows Line command,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15980193/

相关文章:

php - 在 Windows 中使用 PHP 和 Postgres 开发 Web 应用程序与在 Linux 中开发 Web 应用程序相同吗?

bash - 如何在变量中获取 bash 命令的输出

macos - udp 上的 ffmpeg 原始视频

linux - 查找音频文件中的每个单词

linux - 使用 SOX 混合音频,sox FAIL 格式 : can't open input file `audio_recorded.wav' : WAVE: RIFF header not found

audio - 如何使用 ffmpeg 提取 8khz 的音频

windows - 在 Windows 终端中的 git 帐户之间切换的简单方法?

windows - 命令提示符 : Execute Commands from Any Text File (Not Having ".bat" or ".cmd" Extensions)

c++ - 给定一个 dll/exe(带或不带 .pdb),我可以看到哪些 .obj 文件对其大小有影响吗?

command-line - MacVim:使用 `alias mvim="open -a macvim"` 从命令行创建新文件