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
相关产品推荐
相关产品推荐

