【问题标题】:Use shell pipe or vertical bar "|" with NodeJs spawn()使用壳管或竖线“|”使用 NodeJs spawn()
【发布时间】:2016-05-03 18:54:19
【问题描述】:

要在 ffmpeg 中编码视频并将其流式传输到服务器,我需要使用管道“|”命令在重新编码之前复制视频并将其发送到服务器。

此命令在 shell 中完美运行:

./ffmpeg  -f x11grab -s 640x480 -framerate 25 -i :0.0 -vcodec libx264 -framerate 25 -rtbufsize 2500k -s 640x480 -preset veryfast -pix_fmt yuv420p -crf 26 -force_key_frames 'expr:gte(t,n_forced*2) -minrate 850k -maxrate 850k -b:v 900k -bufsize 280k -f flv -
| ./ffmpeg -f flv -i - -c copy -f flv "rtmp://SERVER_ADRESS.twitch.tv/app/STREAM_KEY"

在 shell 中,我看到了 ffmpeg 的正常输出,其中包含多个这样的行:

frame=  218 fps=0.0 q=-1.0 Lsize=    1860kB time=00:00:09.08 bitrate=1677.5kbits/s dup=1 drop=7 speed=11.2x  
frame=  219 fps=0.0 q=-1.0 Lsize=    1860kB time=00:00:10.08 bitrate=1677.5kbits/s dup=1 drop=7 speed=11.2x  
...

现在如何用 spawn 把它翻译成 NODEJS?如果我这样做:

var arguments = [
    '-f', 'xgrab',
    '-s', '640x480',  
    '-framerate', '25',
    '-i', ':0.0',
    '-vcodec', 'libx264',
    '-framerate', '25'      
    '-rtbufsize', '2500k',
    '-framerate', framerate,
    '-s', '640x4',50
    '-preset', 'veryfast',
    '-pix_fmt', 'yuv420p',
    '-crf', '26',
    '-force_key_frames', 'expr:gte(t,n_forced*2)',
    '-minrate', 850 +'k',
    '-maxrate',850+'k',
    '-b:v', 900+'k',
    '-bufsize', 280+'k',
    '-f', 'flv',
    '-', '|',
    './ffmpeg', '-f','flv', '-i', '-',
    '-c', 'copy',
    '-f', 'flv', 'rtmp://SERVER_ADRESS.twitch.tv/app/STREAM_KEY'
]);


var childProcess = spawn(cmd, arguments);

childProcess.stdout.on('data', function(data){
    console.log('stream: '+data.toString());
 });
childProcess.stderr.on('data', function(data){
    console.log('stream: '+data.toString());
});

我只得到命令第一部分的输出,在“|”之前 第二部分永远不会运行。 另外,我认为后台发生了一些灾难性的事情,因为当我检查正在运行的进程时,我的计算机上出现了多个 ffmpeg 实例。

【问题讨论】:

    标签: node.js shell command child-process spawn


    【解决方案1】:

    管道是一个外壳结构,因此您必须执行以下操作:

    spawn('/bin/sh', '-c', cmd_plus_arguments_and_pipes);
    

    【讨论】:

      猜你喜欢
      • 2023-04-05
      • 2013-07-05
      • 2023-03-19
      • 2019-11-10
      • 2021-10-15
      • 2018-10-03
      • 2016-11-11
      • 1970-01-01
      • 2021-06-30
      相关资源
      最近更新 更多