FFMPEG在AWS Lambda函数中不起作用

时间:2019-01-26 09:13:33

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

每当文件上传到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"
  }

1 个答案:

答案 0 :(得分:0)

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