使用fluent-ffmpeg生成视频报错:至少需指定一个输出文件
解决fluent-ffmpeg生成视频时"At least one output file must be specified"错误
问题原因
你遇到的错误根源是inputOption(["-f concat"])的参数写法错误:fluent-ffmpeg会将数组内的每个元素作为独立的命令行参数传递,而"-f concat"作为单个元素会被ffmpeg识别为一个无效选项(而非-f搭配参数concat),导致输入格式未被正确解析,进而触发输出文件未指定的错误。虽然打印出的命令看起来正常,但实际fluent-ffmpeg传递给ffmpeg的参数格式是错误的。
修复方案
有两种可行的修改方式:
方式1:拆分inputOption的参数
将-f和concat拆分为数组的两个独立元素:
const ffmpeg = require('fluent-ffmpeg'); ffmpeg().input('input.txt') .inputOption(["-f", "concat"]) // 拆分选项与参数 .outputOptions("-c:v libx264 -r 30 -pix_fmt yuv420p") .output('output.mp4') .on('start', (commandLine) => { console.log(`FFmpeg command: ${commandLine}`); }) .on('end', () => { console.log('completed'); }).on('error', (err) => { console.error('error occurred: ' + err.message); }).run();
方式2:直接在input中指定格式
更简洁的写法是将输入格式作为input方法的第二个参数:
const ffmpeg = require('fluent-ffmpeg'); ffmpeg().input('input.txt', { f: 'concat' }) // 直接指定输入格式 .outputOptions("-c:v libx264 -r 30 -pix_fmt yuv420p") .output('output.mp4') .on('start', (commandLine) => { console.log(`FFmpeg command: ${commandLine}`); }) .on('end', () => { console.log('completed'); }).on('error', (err) => { console.error('error occurred: ' + err.message); }).run();
验证说明
修改后,fluent-ffmpeg会正确传递-f concat作为两个独立的命令行参数,ffmpeg能正常解析concat输入文件,生成指定的输出视频。
内容的提问来源于stack exchange,提问作者김동환
相关产品推荐
相关产品推荐

