如何在Nodejs中获取base64编码视频文件的缩略图?

时间:2018-02-12 22:22:34

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

我正在使用Nodejs开发一个Web应用程序。我正在使用Amazon S3存储桶来存储文件。我现在正在做的是当我将视频文件(mp4)上传到S3存储桶时,我将从lambda函数中获取视频文件的缩略图照片。要获取视频文件的缩略图照片,我正在使用此包 - https://www.npmjs.com/package/ffmpeg。我在笔记本电脑上本地测试了包,它正在工作。

这是我在笔记本电脑上测试的代码

var ffmpeg = require('ffmpeg');

module.exports.createVideoThumbnail = function(req, res)
{
    try {
        var process = new ffmpeg('public/lalaland.mp4');
        process.then(function (video) {

            video.fnExtractFrameToJPG('public', {
                frame_rate : 1,
                number : 5,
                file_name : 'my_frame_%t_%s'
            }, function (error, files) {
                if (!error)
                    console.log('Frames: ' + files);
                else
                    console.log(error)
            });

        }, function (err) {
            console.log('Error: ' + err);
        });
    } catch (e) {
        console.log(e.code);
        console.log(e.msg);
    }
    res.json({ status : true , message: "Video thumbnail created." });
}

以上代码效果很好。它给了我视频文件的缩略图照片(mp4)。现在,我正在尝试在AWS lambda函数中使用该代码。问题是上面的代码使用视频文件路径作为获取缩略图的参数。在lambda函数中,我只能获取文件的base 64编码格式。我可以获取文件的id(s3路径),但我不能将其用作获取缩略图的参数(文件路径),因为我的s3存储桶不允许公共访问。

所以,我试图做的是我试图在lambda函数项目中本地保存base 64编码视频文件,然后将文件路径作为获取缩略图的参数传递。但问题是AWS lamda函数文件系统是只读的。所以我无法将任何文件写入文件系统。所以我现在要做的就是直接从base 64编码的视频文件中检索缩略图。我该怎么办?

1 个答案:

答案 0 :(得分:1)

看起来您使用了错误的文件位置

  

/ tmp / *是临时文件的可写位置,限于 512MB

查看与您喜欢的教程相同的教程。

https://concrete5.co.jp/blog/creating-video-thumbnails-aws-lambda-your-s3-bucket

Lambda文档:

https://docs.aws.amazon.com/lambda/latest/dg/limits.html

  

短暂的磁盘容量(“/ tmp”空间) 512 MB

希望它有所帮助。