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

Node.js使用child_process spawn设置ffmpeg输出文件到public目录的问题

Node.js调用ffmpeg输出文件到public文件夹的解决方法

核心修改点

当前代码默认输出到脚本工作目录的原因是ffmpeg参数中填写的输出路径为相对路径title.mp4,仅需修改该输出路径为指向public文件夹的路径即可。

推荐写法(绝对路径,兼容性更高)

首先引入Node内置的path、fs模块,提前确保public目录存在,再修改ffmpeg的输出路径参数:

const cp = require('child_process');
const path = require('path');
const fs = require('fs');

// 提前创建public目录,避免目录不存在导致ffmpeg写入失败
const publicDir = path.join(__dirname, 'public');
fs.mkdirSync(publicDir, { recursive: true });
// 拼接输出文件的完整绝对路径
const outputPath = path.join(publicDir, 'title.mp4');

// 启动ffmpeg子进程
const ffmpegProcess = cp.spawn(ffmpeg, [
    // 关闭ffmpeg多余的控制台输出
    '-loglevel', '8', '-hide_banner',
    // 重定向/启用进度消息
    '-progress', 'pipe:3',
    // 设置输入流
    '-i', 'pipe:4',
    '-i', 'pipe:5',
    // 从流中分别映射音频和视频轨道
    '-map', '0:a',
    '-map', '1:v',
    // 保持原有编码不转码
    '-c:v', 'copy',
    // 定义输出文件路径
    outputPath,
], {
    windowsHide: true,
    stdio: [
        /* 标准流:stdin, stdout, stderr */
        'inherit', 'inherit', 'inherit',
        /* 自定义流:pipe:3, pipe:4, pipe:5 */
        'pipe', 'pipe', 'pipe',
    ],
});

注意事项

  • 如果你的public文件夹和当前执行脚本不在同一目录,调整path.join的参数即可适配你的目录结构
  • 临时测试也可以直接替换输出路径为./public/title.mp4的相对路径写法,但仅在你固定在脚本所在目录启动Node进程时有效,稳定性不如绝对路径
  • 确保运行Node进程的用户对public目录拥有写入权限,避免出现权限报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 01:24:03