Я использовал потоки PassThrough, результаты не идеальны, но в моем случае это нормально.Если кому-то нужно что-то подобное, вот как я с этим справился;
const {PassThrough} = require('stream');
const pt = new PassThrough();
/* spawn child process */
/* PS: I do not know why direct pipe to ffmpeg does not work in my case throws pipe: Permission denied */
const child = spawn(
'cat',
['|', 'ffmpeg', ...],
{
stdio: ['pipe', 'inherit', 'inherit'],
shell: true
});
pt.pipe(child.stdin);
/* pass streams to pt stream with end false parameter */
stream1.pipe(pt, { end: false }); /* This also prevents stream1 finished event, but otherwise it would close the pt stream. */
stream2.pipe(pt, { end: false }); /* Or you can handle this part programmatically(loops, generators etc) */