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

AWS Lambda生成视频缩略图时Mediainfo权限拒绝问题求助

解决AWS Lambda中mediainfo-wrapper的Permission Denied问题

我之前在Lambda里用mediainfo处理视频时也碰到过一模一样的权限问题,给你梳理几个最可能的原因和对应的解决办法:

  • 核心问题:二进制文件本身缺少执行权限
    你提到修改了文件夹的权限,但忽略了关键的一点:mediainfo是一个二进制可执行文件,它自身需要+x(执行)权限,而不是仅仅让文件夹有读写权限。你需要单独给这个文件添加执行权限:

    chmod +x ./node_modules/mediainfo-wrapper/lib/linux64/mediainfo
    

    执行完这个命令后再重新打包你的Lambda代码。

  • 打包时权限被丢失
    很多人用普通的zip命令打包时,默认不会保留文件的执行权限。你需要用带权限保留参数的命令来打包:

    zip -r --preserve-permissions lambda.zip .
    

    如果是用其他打包工具(比如7-Zip),也要确保开启了保留文件权限的选项,否则Lambda解压后文件会丢失执行权限。

  • 二进制文件与Lambda运行时不兼容
    Lambda的运行环境是Amazon Linux 2(或2023),如果mediainfo-wrapper提供的预编译二进制是针对其他Linux发行版(比如Ubuntu)编译的,可能会因为glibc版本差异出现权限或运行错误。这种情况下,你需要:

    1. 在Amazon Linux 2的环境(可以用EC2或本地Docker镜像amazonlinux:2)里编译mediainfo的二进制文件
    2. 把编译好的文件替换掉mediainfo-wrapper包里对应的二进制文件
    3. 重新打包部署
  • 将二进制文件移到/tmp目录执行
    Lambda的/task目录是只读的(虽然文件可以有执行权限,但有些场景下会有隐性限制),而/tmp目录是可写且允许执行的。你可以在Lambda函数启动时,把mediainfo复制到/tmp并添加权限,再指定mediainfo-wrapper使用这个路径:

    const fs = require('fs');
    const path = require('path');
    const MediaInfo = require('mediainfo-wrapper');
    
    // 复制二进制到/tmp并添加执行权限
    const sourcePath = path.join(__dirname, 'node_modules/mediainfo-wrapper/lib/linux64/mediainfo');
    const targetPath = '/tmp/mediainfo';
    fs.copyFileSync(sourcePath, targetPath);
    fs.chmodSync(targetPath, 0o755);
    
    // 初始化mediainfo时指定自定义路径
    const mediaInfo = new MediaInfo({ binary: targetPath });
    

内容的提问来源于stack exchange,提问作者Katerina

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:11:28