在同一子进程中同时使用 stdin 和 stdout
Use both stdio and stout in the same child process
我正在使用 ffmpeg 组合 audio/video 2 个流并将它们通过管道进行表达。这是我的代码:
var ffmpeg = cp.spawn('ffmpeg', [
// Set inputs
'-i', 'pipe:4',
'-i', 'pipe:5',
// Map audio & video from streams
'-map', '0:v',
'-map', '1:a',
// Keep encoding
'-c', 'copy',
'-movflags', 'frag_keyframe+empty_moov',
'-f', 'mp4',
// Define output file
'pipe:1',
], {
stdio: [
/* Standard: stdin, stdout, stderr */
'inherit', 'inherit', 'inherit',
/* Custom: pipe:3, pipe:4, pipe:5 */
'pipe', 'pipe', 'pipe',
],
});
video.pipe(ffmpeg.stdio[4]);
audio.pipe(ffmpeg.stdio[5]);
res.header('Content-Disposition', 'attachment; filename="video.mp4"');
ffmpeg.stdout.pipe(res);
但是代码给出了一个错误,指出 ffmpeg.stout
为空。经过一些研究,我发现您不能拥有 stdio 选项数组,否则 stout 将为空。有什么办法可以解决这个问题?
差不多两周后,我找到了答案。当我查看文档时,它说:
If the child was not spawned with stdio[1] set to 'pipe', then this will not be set.
我意识到我所要做的就是将中间的 inherit
更改为 pipe
:
stdio: [
/* Standard: stdin, stdout, stderr */
'inherit', 'pipe', 'inherit',
/* Custom: pipe:3, pipe:4, pipe:5 */
'pipe', 'pipe', 'pipe',
],
还是谢谢你。
我正在使用 ffmpeg 组合 audio/video 2 个流并将它们通过管道进行表达。这是我的代码:
var ffmpeg = cp.spawn('ffmpeg', [
// Set inputs
'-i', 'pipe:4',
'-i', 'pipe:5',
// Map audio & video from streams
'-map', '0:v',
'-map', '1:a',
// Keep encoding
'-c', 'copy',
'-movflags', 'frag_keyframe+empty_moov',
'-f', 'mp4',
// Define output file
'pipe:1',
], {
stdio: [
/* Standard: stdin, stdout, stderr */
'inherit', 'inherit', 'inherit',
/* Custom: pipe:3, pipe:4, pipe:5 */
'pipe', 'pipe', 'pipe',
],
});
video.pipe(ffmpeg.stdio[4]);
audio.pipe(ffmpeg.stdio[5]);
res.header('Content-Disposition', 'attachment; filename="video.mp4"');
ffmpeg.stdout.pipe(res);
但是代码给出了一个错误,指出 ffmpeg.stout
为空。经过一些研究,我发现您不能拥有 stdio 选项数组,否则 stout 将为空。有什么办法可以解决这个问题?
差不多两周后,我找到了答案。当我查看文档时,它说:
If the child was not spawned with stdio[1] set to 'pipe', then this will not be set.
我意识到我所要做的就是将中间的 inherit
更改为 pipe
:
stdio: [
/* Standard: stdin, stdout, stderr */
'inherit', 'pipe', 'inherit',
/* Custom: pipe:3, pipe:4, pipe:5 */
'pipe', 'pipe', 'pipe',
],
还是谢谢你。