JavaScript调用ffmpeg生成视频缩略图报错code 1且promise为undefined如何解决
问题根因排查
- 参数拼写错误:错误日志中的ffmpeg命令使用了大写的
-I作为输入参数,而ffmpeg要求输入参数必须是小写的-i,大写I属于无效参数会直接返回错误码1,优先检查代码或变量替换逻辑中是否存在拼写错误。 - 目标目录不存在:ffmpeg不会自动创建输出文件的父目录,需先确认
/tmp/thumbnails目录是否存在,且运行Node.js进程的用户对该目录拥有读写权限。 - 依赖安装问题:确认已正确安装
child-process-promise和@ffmpeg-installer/ffmpeg依赖,可执行npm list child-process-promise @ffmpeg-installer/ffmpeg校验安装状态,依赖缺失或损坏会导致spawn返回值异常。 - 可执行权限不足:Linux环境下需确认
@ffmpeg-installer安装的ffmpeg二进制文件有可执行权限,可手动执行chmod +x /workspace/node_modules/@ffmpeg-installer/linux-x64/ffmpeg授权。 - 协议支持缺失:如果
fileUrl是网络链接,需确认ffmpeg编译时开启了对应网络协议的支持,缺少http/https等协议支持时无法拉取视频流也会返回错误码1。
修复后可调试代码示例
const spawn = require('child-process-promise').spawn; const ffmpegPath = require('@ffmpeg-installer/ffmpeg').path; const fs = require('fs'); const path = require('path'); // 提前创建缩略图存储目录 const thumbnailDir = path.dirname(tempLocalThumbnailFile); if (!fs.existsSync(thumbnailDir)) { fs.mkdirSync(thumbnailDir, { recursive: true }); } // 执行ffmpeg命令 const promise = spawn(ffmpegPath, [ '-ss', '0', '-i', fileUrl, '-f', 'image2', '-vframes', '1', '-vf', 'scale=10:10', '-update', '1', tempLocalThumbnailFile ]); // 捕获ffmpeg标准错误输出,可直接定位具体报错原因 promise.childProcess.stderr.on('data', (data) => { console.error('ffmpeg错误日志:', data.toString()); }); promise.then(() => { console.log('缩略图生成成功'); }).catch((err) => { console.error('生成失败详情:', err); });
内容的提问来源于stack exchange,提问作者David Reese
相关产品推荐
相关产品推荐

