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

如何在nodejs的fluent-ffmpeg中执行多文件concat拼接并解决unsafe报错

问题解决方法

报错原因是concat解封装器默认开启安全模式,不允许加载列表文件目录外的相对/绝对路径文件,-safe 0需要作为输入侧参数传入,不能放在输出参数中。

可用代码示例

写法1:直接保存(对应原ffmpeg命令逻辑,无额外临时文件)

const ffmpeg = require('fluent-ffmpeg');

ffmpeg('C:/path/to/list.txt')
  .inputFormat('concat')
  // 核心:给输入源加-safe 0参数
  .inputOption('-safe', '0')
  // 对应原命令的-c copy,跳过转码提升速度
  .audioCodec('copy')
  .videoCodec('copy')
  .save('C:/path/to/out.mp4')
  .on('end', () => {
    console.log('合并完成');
  })
  .on('error', (err) => {
    console.error('合并失败:', err);
  });

写法2:沿用mergeToFile的写法

如果需要用mergeToFile方法,只需要加上inputOption即可:

ffmpeg('C:/path/to/list.txt')
  .inputFormat('concat')
  .inputOption('-safe', '0')
  .mergeToFile('C:/path/to/out.mp4', 'C:/path/to/temp');

注意事项

  • -safe 0必须通过inputOption/inputOptions方法传入,放在输出参数中不会生效
  • 如果列表内所有媒体文件和列表文件在同一目录,也可以通过调整路径规则避免加这个参数
  • 不需要转码的场景一定要加音视频copy的配置,否则ffmpeg会默认重新编码,速度会慢很多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:06:07