【问题标题】:FFMPEG is not working in AWS lambda functionFFMPEG 在 AWS lambda 函数中不起作用
【发布时间】:2019-06-19 23:37:50
【问题描述】:

每当文件上传到 S3 存储桶时,我都会尝试使用 AWS lambda 函数将视频文件转换为音频文件。所以我使用 FFMPEG 将视频文件转换为音频。但是我在转换视频文件时不断收到此错误。我见过类似的问题,但没有一个解决方案对我不起作用。因此,如果有人知道,请分享您的解决方案。

错误信息

    TypeError: Cannot create property 'stack' on string 
'Could not find ffmpeg executable, tried "/var/task/node_modules/@ffmpeg-installer/linux-x64/ffmpeg" and "/var/task/node_modules/@ffmpeg-installer/ffmpeg/node_modules/@ffmpeg-installer/linux-x64/ffmpeg"'

代码

    const
    ffmpegPath = require("@ffmpeg-installer/ffmpeg").path,
    ffmpeg = require("fluent-ffmpeg");

    // set ffmpeg package path
    ffmpeg.setFfmpegPath(ffmpegPath);
    function convert(input, output, callback) {
        ffmpeg(input)
            .output(output)
            .on('end', function() {                    
                console.log('conversion ended');
                callback(null);
            }).on('error', function(err){
                console.log('error: ', err.code, err.msg);
                callback(err);
            }).run();
    }

    exports.handler = function (event, context, callback) {
        const key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
        console.log("key ", key);
        console.log("event ", event.Records[0].s3);
        convert(key, `/tmp/${key}.mp3`, function(err){
            if(!err) {
                console.log('conversion complete');
            } else {
                console.log('Error');
            }
        });
    }


    const
        ffmpegPath = require("@ffmpeg-installer/ffmpeg").path,
        ffmpeg = require("fluent-ffmpeg");

    // set ffmpeg package path
    ffmpeg.setFfmpegPath(ffmpegPath);
    function convert(input, output, callback) {
        ffmpeg(input)
            .output(output)
            .on('end', function() {                    
                console.log('conversion ended');
                callback(null);
            }).on('error', function(err){
                console.log('error: ', err.code, err.msg);
                callback(err);
            }).run();
    }

    exports.handler = function (event, context, callback) {
        const key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
        console.log("key ", key);
        console.log("event ", event.Records[0].s3);
        convert(key, `/tmp/${key}.mp3`, function(err){
            if(!err) {
                console.log('conversion complete');
            } else {
                console.log('Error');
            }
        });
    }

package.json

    "dependencies": {
    "@ffmpeg-installer/ffmpeg": "^1.0.17",
    "fluent-ffmpeg": "^2.1.2",
    "fs": "0.0.1-security"
  }

【问题讨论】:

  • 您是否在 Lambda 包中包含了 ffmpeg 可执行文件和依赖项? intoli.com/blog/transcoding-on-aws-lambda
  • 你的意思是node_modules吗?
  • 没有。通常这些库只是将调用委托给实际的 ffmpeg 可执行文件(C++ 可执行文件)。请参阅链接以获取 python 示例。通常尝试在 ec2 实例上执行此操作,以了解其工作原理以及所有部分如何组合在一起。
  • 嗨@kashyap,这段代码在我的本地运行良好,但不能在 lambda 函数中运行。我很困惑,请帮助找到解决方案。

标签: node.js amazon-web-services ffmpeg aws-lambda


【解决方案1】:

需要安装ffmpeg,npm包不安装ffmpeg,只安装绑定。但是你可以使用 lambda 层,幸运的是在https://github.com/mthenw/awesome-layers 下列出了一个 ffmpeg 层,你可以将其包含在你的项目中

【讨论】:

  • 是的,我试过了,但该代码给了我一条错误消息,我将该错误作为一个单独的问题发布。这是该问题的链接 ([stackoverflow.com/questions/54429560/…)。
  • 但原来的问题已经回答了,不是吗?请考虑接受答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-01
  • 1970-01-01
  • 2018-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多