如何捕获来自节点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 ); });