【发布时间】:2020-12-07 02:46:49
【问题描述】:
我在 Windows 中使用名为“Levelator”的免费程序来规范 WAV 文件中的音频,它不仅规范了整个 WAV 文件 - 它使安静的声音更响亮,而响亮的声音更安静,因此输出文件都是一样的整个音量。如果有任何其他免费工具可以做到这一点(并且可以在命令行上做到这一点),我会使用它,但我从未发现任何其他工具可以做到这一点。
当这个 Levelator 程序运行时,它会打开一个 GUI。要处理 WAV 文件,只需将 WAV 文件拖到 GUI 上,它就会输出原始“.wav”文件的“.output.wav”版本。您还可以将 WAV 文件拖到 Levelator 的可执行文件上(无需运行 Levelator)并通过这种方式获取输出文件。
你不能以任何方式在命令行上使用它!
我尝试过的任何方法都无法在批处理文件中使用,例如:
start /wait Levelator.exe myaudio.wav
或带引号:
start /wait Levelator.exe "myaudio.wav"
导致错误:“无法打开源文件:myaudio.wav”
此外,运行它不会带来任何结果:
Levelator.exe /?
这只会导致同样的错误:“无法打开源文件:/?”
我开始思考这个问题并想知道,如果您可以将 WAV 文件拖到可执行文件上,为什么不能在批处理文件中处理呢?如果上面的第一个命令不起作用,为什么不呢?为什么要强制将 WAV 文件拖到 GUI 上或将 WAV 拖到可执行文件上?
奇怪的是,程序无法通过在批处理文件中指定 Levelator.exe 之后的文件名来打开 WAV 文件。这似乎是不可能的。
这很令人沮丧,因为我总是不得不手动将 WAV 文件拖到 GUI 上,但是使用批处理文件(并为任何 WAV 的名称创建一个变量)会更容易。
由于这不能在批处理文件中使用,我如何在命令行上模拟拖放操作?这是唯一的方法。我通常会使用 AutoIt2 来处理这类事情,但无法猜测 WAV 文件在文件夹中的位置,所以也不能这样做,AutoIt2 并不是那么先进,需要窗口坐标来把东西拖到某个地方。
我知道这是一项艰巨的任务,这就是我在这里问它的原因:p
编辑:user14122392 的建议使其工作:)
我将以下内容放在 Levelator.exe 和 WAV 文件旁边的批处理文件中,希望它是通用的,因此无需编辑,如果将 WAV 文件放在那里,它就可以运行...
For %%a IN ("*.wav") DO Set "WAVFILE=%%~na"
start /wait levelator.exe "%~dp0\%WAVFILE%.wav"
这允许具有任何文件名的 WAV 文件(不确定带有“!”字符的文件名,我知道 Levelator 不喜欢它们)并且通过使用“%〜dp0”足以使其正常工作.
【问题讨论】:
-
除了你的编辑最好放在答案部分之外,代码是不安全的,因为你首先指向
for循环中的当前工作目录,然后指向脚本,可能不同;你最好只使用这个:for %%A in ("%~dp0*.wav") do start "" /WAIT levelator.exe "%%~fA"(当你想使用当前目录时删除%~dp0部分;start "" /WAIT甚至可能没有必要)...
标签: file batch-file command line drag