You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js child_process.spawn调用FFmpeg转码异常退出,返回码1无报错输出

问题根因

看不到错误输出的核心原因是FFmpeg参数设置了-loglevel 8:FFmpeg的日志等级中,数值8对应quiet模式,会屏蔽所有错误、警告、常规输出,所以即使转码出错也不会往stderr打印任何内容。

除此之外代码还存在变量名错误:error事件回调参数名为err,但回调内打印的是未定义的error变量,会引发额外的上下文错误。

修复方案

1. 调整日志等级输出错误信息

把-loglevel的参数从8改成error/warning/info,确保错误信息可以正常输出到stderr:

const cp = require('child_process');
const ffmpeg = require('ffmpeg-static');

const process = cp.spawn(ffmpeg, [
            // loglevel设为error仅输出错误信息,设为info可查看完整执行日志
            '-loglevel', 'error', '-hide_banner',
            '-i', 'output.webm', "output.ogg",
        ], {
            windowsHide: false,
        });

2. 修正事件回调变量名错误

统一error事件回调内的变量名,避免未定义报错:

process.on('error', (err) => {
        console.log('Failed to start subprocess.', err);
    });

3. 排查转码逻辑常见问题

调整日志等级后重新执行代码,即可从stderr看到具体的转码错误,常见的转码失败原因如下:

  • 当前工作目录已存在output.ogg且被其他进程占用,FFmpeg默认不会覆盖已有文件,可添加-y参数允许自动覆盖输出文件:
    const process = cp.spawn(ffmpeg, [
                '-loglevel', 'error', '-hide_banner',
                '-y', // 新增自动覆盖输出文件参数
                '-i', 'output.webm', "output.ogg",
            ], {
                windowsHide: false,
            });
    
  • webm文件内的音视频编码格式不兼容ogg封装,需要额外指定对应的音视频编码器参数。

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 18:09:03