node.js - 命令行 node.js 子进程问题,带引号问题,FFMPEG问题?

  显示原文与译文双语对照的内容

我需要能够从 node.js 应用程序中执行 FFMPEG 。 我相信这个问题可以能需要正确地指定 命令行 参数,而不是特定于 rtc,但是我不能缩小问题。

我可以在命令提示下成功地执行以下命令 :


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



FFMPEG按预期启动,从我的音频设备记录音频,并写一个MP3文件。 现在,我尝试在我的应用程序中执行同样的工作:


childProcess = child_process.spawn('C:Bradffmpeg.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,并且已经列出了所需的设备,其中包括:


[dshow @ 000000000228ecc0] DirectShow video devices


[dshow @ 000000000228ecc0] Could not enumerate video devices.


[dshow @ 000000000228ecc0] DirectShow audio devices


[dshow @ 000000000228ecc0]"Microphone (SoundMAX Integrated"



对于FFMPEG为什么无法正确指定在FFMPEG中的输入设备,或者为什么FFMPEG在运行子进程时无法识别我的音频输入设备,这是什么?

任何提示都是最值得感激的。

时间: 原作者:

在brandon的右边。 在 Windows 命令行 上的参数使用双引号时,shell 会将它们关闭并且程序看到它们未引发干扰。 当你使用 child_process.spawn() 时,程序将看到文字引号作为参数的一部分,并且不准备处理它们。

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


C:Documents and SettingsEric Bohlman>node pargs -f dshow -i audio="Microphone(SoundMAX Integrated" testaaa.mp3


[ 'node',


 'C:Documents and SettingsEric Bohlmanpargs',


 '-f',


 'dshow',


 '-i',


 'audio=Microphone (SoundMAX Integrated',


 'testaaa.mp3' ]



C:Documents and SettingsEric Bohlman>



可以看到,shell 在使用引号后去掉引号,以避免在空格处破坏 audio=... 参数。

注意,Windows shell ( 至少在 XP SP3中) 不会分割单引号或者使用它们进行分组,比如,用于在Linux系统上使用 bash 。 因这里,如果你正在查看某个 bash 命令行的示例并使用单引号,通常必须用双引号在 Windows 下工作。

原作者:
...