与参数数量Node.js的子进程的问题 - 行情问题?FFmpeg的问题?(Node.js Chil

2019-09-22 05:25发布

我需要能够从我的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

想,也许出于某种原因,这是一个奇怪的权限错误,我决定与运行FFMPEG -list_devices true从我节点应用程序中,果然,有问题的设备列出:

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

任何想法,为什么我不能正确的参数指定的音频输入设备FFmpeg中,或作为一个子进程来运行Node.js加载时FFMPEG为什么不承认我的音频输入设备?

任何提示将是非常赞赏。

Answer 1:

布兰登是在正确的轨道上。 当你在Windows命令行上使用参数左右双引号,外壳去除了那些和程序看到他们不带引号的。 当您使用child_process.spawn()你绕过外壳,并因此节目看到文字引号作为参数的一部分,而不是准备来对付他们。

例如,我创建了一个微小的节点脚本, 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>

正如你所看到的,外壳使用它们,以避免破坏后剥去引号audio=...在空间的说法。

需要注意的是Windows外壳程序(至少在XP SP3的)不剥掉单引号或将其用于分组,不像,说,bash作为通常在Linux系统上使用。 因此,如果你正在寻找某人的例子bash命令行,它使用单引号,你通常都用双引号来取代他们为它工作在Windows下。



Answer 2:

作为ebolhman解释的如此生动,默认情况下,产卵功能不会创建一个shell来执行命令,因此报价没有剥离,如果你仍然想使用产卵\ spawnSync,你得到做的是通过它的论点通过以下方式

require('child_process').spawn('ExePathHere', arrOfArguments, { shell: true });

EXE文件本身将得到的参数没有他不能处理引号



文章来源: Node.js Child Process Issue with Args - Quotes Issue?, FFMPEG issue?