【问题标题】:How to capture a log message coming out of node JS spawn ffmpeg command如何捕获来自节点 JS spawn ffmpeg 命令的日志消息
【发布时间】:2014-01-17 21:31:15
【问题描述】:

我正在尝试查找录音的无声部分。这个命令完全符合我在本地机器上的要求。

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

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

[silencedetect @ 0x7feea040cf20]silence_start: 0.0321995

[silencedetect @ 0x7feea040cf20]silence_end: 0.975238 |静音持续时间:0.943039

[silencedetect @ 0x7feea040cf20]silence_start: 1.47184

我不知道如何把这条消息传出去。这是正在运行的 nodejs 代码。唯一触发的事件是“退出”。我认为“管道: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);
});

【问题讨论】:

    标签: node.js ffmpeg


    【解决方案1】:

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

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

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

    【讨论】:

    • 当我运行这个我得到this。我什至不确定我在看什么。
    • 找出那些以 10 个 ASCII 字符为基数的数据。
    • 是的,它们是原始流。您可以从这里开始,通过stackoverflow.com/questions/8584171/… 回答
    • 那么,如果两者都进入stderr,我们如何区分错误和标准终端输出?
    • @Guig,你可以检查 ffmpeg 的退出代码,看看它是成功(0)还是失败(其他)。
    猜你喜欢
    • 2021-04-16
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 2021-07-26
    • 2012-02-08
    相关资源
    最近更新 更多