如何捕获来自节点JS spawn ffmpeg命令的日志消息

我正在试图findaudio录音的无声部分。 这个命令正是我想要在我的本地机器上。

ffmpeg -i http://twf-audio.s3.amazonaws.com/uploads/DBC50460-9A5C-4174-9885-07337A582D58_1377839443598_tell.m4a -af silencedetect = n = -40dB:d = 0.2 -f null –

它将一堆消息发送到命令行,包括最后三个是我需要的数据行。 (供参考: ffmpeg silencedetect文档 )

[silencedetect @ 0x7feea040cf20] silence_start:0.0321995

[silencedetect @ 0x7feea040cf20] silence_end:0.975238 | silence_duration:0.943039

[silencedetect @ 0x7feea040cf20] silence_start:1.47184

我无法弄清楚如何得到这个信息。 这是正在运行的nodejs代码。 唯一触发的事件是“退出”。 我认为“pipe道:1”发送输出到标准输出,但是什么也没有做。

var ffmpeg = spawn('ffmpeg', ['-i',filename,'-af','silencedetect=n=-40dB:d=0.2', '-f', 'null','-y', 'pipe:1' ]); ffmpeg.on('message', function(data) { console.log('ffmpeg2 PARENT got message:', JSON.stringify(data)); }); ffmpeg.stdout.on('data', function(data) { console.log('ffmpeg stdout data = '+JSON.stringify(data) ); }); ffmpeg.on('exit', function (code, signal) { console.log('child process exited with code:' + code + ' signal:' + signal); }); 

pipe:1 ffmpeg的pipe:1参数发送代码转换后的数据stdout

在节点外运行命令时显示的输出默认发送到stderr ,您可以在程序中使用以下命令处理它:

 ffmpeg.stderr.on('data', function(data) { console.log('ffmpeg stderr data = '+data ); });