Node.js用spawn执行ffmpeg --help为何输出内容出现在stderr中
问题结论
这是FFmpeg自身的设计,并非Node.js的问题。
原因说明
FFmpeg的输出规则默认如下:
- 诊断类信息(包括版本信息、帮助说明、参数报错、处理进度日志等)全部输出到stderr
- 只有转码/处理后的媒体流数据会输出到stdout
你可以直接在系统终端执行重定向命令验证:ffmpeg --help 1>./stdout.log 2>./stderr.log
执行后查看两个文件,会发现help内容完全保存在stderr.log中,stdout.log为空,可直接证明该行为和Node.js无关。
适配方案
如果需要完整获取FFmpeg的help输出,可以选择以下两种方案:
- 直接监听stderr事件获取内容,该行为是FFmpeg的标准设计,不属于错误输出,无需额外处理
- 同时监听stdout和stderr的输出事件,统一拼接内容,适配所有FFmpeg的输出场景
示例代码:
import path from 'path'; import { spawn } from 'child_process'; const childProcess = spawn(path.join(__dirname, 'ffmpeg'), ['--help']); const outputBuffer = []; // 统一处理两个输出流 [childProcess.stdout, childProcess.stderr].forEach(stream => { stream.setEncoding('utf-8'); stream.on('data', chunk => outputBuffer.push(chunk)); }); childProcess.on('exit', () => { const helpContent = outputBuffer.join(''); console.log(helpContent); });
内容的提问来源于stack exchange,提问作者Tyler Liu
相关产品推荐
相关产品推荐

