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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:06:06