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

