gpt4 book ai didi

Args 的 Node.js 子进程问题 - 引号问题?,FFMPEG 问题?

转载 作者:搜寻专家 更新时间:2023-10-31 22:28:17 25 4
gpt4 key购买 nike

我需要能够从我的 Node.js 应用程序执行 FFMPEG。我相信这个问题可能与正确指定命令行参数有关,而不是特定于 FFMPEG,但由于我无法缩小问题范围,我提出了我的整个问题。

我可以从命令提示符成功执行以下命令:

C:\Brad\ffmpeg.exe -f dshow -i audio="Microphone (SoundMAX Integrated" testaaa.mp3

FFMPEG 按预期启动,从我的音频设备录制音频,并写入 MP3 文件。现在,我尝试在我的 Node.js 应用程序中做同样的事情:

childProcess = child_process.spawn('C:\\Brad\\ffmpeg.exe', ['-f', 'dshow', '-i', 'audio="Microphone (SoundMAX Integrated"', 'testaaa.mp3']);
childProcess.stderr.on('data', function (data) {
console.log('StdioSource received data from STDERR: ' + data);
});

在 Node.js 中,FFMPEG 失败了!错误很简单:

[dshow @ 0000000001eded80] Could not find audio device.
audio="Microphone (SoundMAX Integrated": Input/output error

考虑到可能由于某种原因这是一个奇怪的权限错误,我决定在我的 Node 应用程序中使用 -list_devices true 运行 FFMPEG,果然,列出了有问题的设备:

[dshow @ 000000000228ecc0] DirectShow video devices
[dshow @ 000000000228ecc0] Could not enumerate video devices.
[dshow @ 000000000228ecc0] DirectShow audio devices
[dshow @ 000000000228ecc0] "Microphone (SoundMAX Integrated"

关于为什么我不能在 FFMPEG 的参数中正确指定音频输入设备,或者为什么 FFMPEG 在作为 Node.js 的子进程运行时无法识别我的音频输入设备,有什么想法吗?

如有任何提示,我们将不胜感激。

最佳答案

Brandon 的方向是正确的。当您在 Windows 命令行上使用双引号将参数括起来时,shell 会将它们剥离,程序会看到它们没有被引号括起来。当您使用 child_process.spawn() 时,您将绕过 shell,结果程序将文字引号视为参数的一部分,并且不准备处理它们。

例如,我创建了一个微型 Node 脚本 pargs.js,它只包含 console.log(process.argv); 使用与您相同的参数运行它给 FFMPEG,我得到:

C:\Documents and Settings\Eric Bohlman>node pargs -f dshow -i audio="Microphone(SoundMAX Integrated" testaaa.mp3
[ 'node',
'C:\\Documents and Settings\\Eric Bohlman\\pargs',
'-f',
'dshow',
'-i',
'audio=Microphone (SoundMAX Integrated',
'testaaa.mp3' ]

C:\Documents and Settings\Eric Bohlman>

如您所见,shell 在使用引号后去掉了引号以避免在空格处破坏 audio=... 参数。

请注意,Windows shell(至少从 XP SP3 开始)不会去除单引号或使用它们进行分组,这与 Linux 系统上常用的 bash 不同。因此,如果您正在查看某人的示例 bash 命令行并且它使用单引号,您通常必须将它们替换为双引号才能在 Windows 下工作。

关于Args 的 Node.js 子进程问题 - 引号问题?,FFMPEG 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12310468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com