AWS Lambda调用ffmpeg遇ENOENT错误,部署后失效求助
AWS Lambda中FFmpeg执行异常:本地正常但云端无反应,前期遇ENOENT错误
问题背景
已尝试各类调试方法均无效,耗时3天:
- 本地开发阶段:
- WSL(Ubuntu)环境下报错:
spawn usr/bin/ffmpeg ENOENT - Windows环境下报错:
spawn path/to/ffmpeg.exe ENOENT - 已确认对应路径下FFmpeg存在,执行
path/to/ffmpeg -version可正常输出版本信息,已通过chmod +x赋予执行权限 - 尝试过通过
sam deploy --guide部署并在AWS控制台添加Lambda层,将FFmpeg文件移至项目根目录仍报错
- WSL(Ubuntu)环境下报错:
- 调整部署方式后:
- 本地环境可正常运行,但部署至AWS Lambda后FFmpeg未执行,无任何报错信息
- 尝试自行创建FFmpeg层也无进展
相关代码
初始代码(本地调试阶段)
import { spawn } from 'child_process'; import ffmpeg from 'fluent-ffmpeg'; const isLocal = process.env.AWS_SAM_LOCAL; // 检测本地SAM环境 const ffmpegPath = isLocal ? 'C:\\ProgramData\\chocolatey\\lib\\ffmpeg\\tools\\ffmpeg\\bin\\ffmpeg.exe' : '/opt/bin'; ffmpeg.setFfmpegPath(ffmpegPath); const ffmpegArgs = [ '-i', inputFilePath, '-vf', `crop=9/16*ih:ih:scale=1080:1920`, '-c:v', 'libx264', '-c:a', 'aac', '-strict', 'experimental', outputFilePath, ]; const ffmpegProcess = spawn(ffmpegPath, ffmpegArgs);
更新后的代码(改为随项目部署FFmpeg)
import { spawn } from 'child_process'; import ffmpeg from 'fluent-ffmpeg'; import path from 'path'; // 补充导入path模块 const ffmpegPath = path.resolve(__dirname, 'bin', 'ffmpeg'); ffmpeg.setFfmpegPath(ffmpegPath); // FFmpeg参数部分同初始代码 const ffmpegArgs = [ '-i', inputFilePath, '-vf', `crop=9/16*ih:ih:scale=1080:1920`, '-c:v', 'libx264', '-c:a', 'aac', '-strict', 'experimental', outputFilePath, ]; const ffmpegProcess = spawn(ffmpegPath, ffmpegArgs);
package.json部署脚本
{ "scripts": { "prebuild": "echo 'Running prebuild...'", "build": "sam build", "postbuild": "cp -r ./api/bin ./.aws-sam/build/ProcessVideoFunction/ && echo 'bin copied'" } }
补充说明
项目结构已调整为将FFmpeg放置在./api/bin目录,通过postbuild脚本复制到SAM构建后的函数目录中。
内容的提问来源于stack exchange,提问作者nemerem
相关产品推荐
相关产品推荐

