【问题标题】:AWS elastic transcoder -- Gif output is massiveAWS 弹性转码器——Gif 输出量巨大
【发布时间】:2020-09-25 19:03:39
【问题描述】:

所以我正在使用 Elastic transcoder 将上传的视频从我的 S3 存储桶转换为 GIF。

目前,当我上传到 S3 时,我有一个基本的 lambda,它会触发管道转换为 gif。

现在发生的事情是我上传了一个 7mb 的 mp4,当它转码后输出的 gif 是 80+ MB 的??

我浏览了文档,但找不到任何对我有帮助的东西。谁能解释一下...

下面是我在弹性转码中的预设

Codec -- gif

Codec Options:

LoopCount: 5

Bit Rate -- auto
Frame Rate -- auto
Video Max Frame Rate -- 10
Max Width -- auto
Max Height -- auto
Sizing Policy -- ShrinkToFit
Padding Policy -- NoPad
Display Aspect Ratio -- auto

我的任何 lamdba 看起来都是这样的:

'use strict';
var AWS = require('aws-sdk'),
    transcoder = new AWS.ElasticTranscoder({
        apiVersion: '2012-09-25',
        region: 'eu-west-1'
    });
exports.handler = (event, context, callback) => {
    let fileName = event.Records[0].s3.object.key;
    var srcKey =  decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, " "));
    var newKey = fileName.split('.')[0];
    console.log('New video has been uploaded:', fileName);
transcoder.createJob({
     PipelineId: process.env.PIPELINE_ID,
     Input: {
      Key: srcKey,
      FrameRate: 'auto',
      Resolution: 'auto',
      AspectRatio: 'auto',
      Interlaced: 'auto',
      Container: 'auto'
     },
     Output: {
      Key: getOutputName(fileName),
      ThumbnailPattern: '',
      PresetId: 'XXXXXXXXXXX',
      Rotate: 'auto'
     }
    }, function(err, data){
        if(err){
            console.log('Something went wrong:',err)
        }else{
            console.log('Converting is done');
        }
     callback(err, data);
    });
};
function getOutputName(srcKey){
 let baseName = srcKey.replace('videos/','');
 let withOutExtension = removeExtension(baseName);
 return 'gifs/' + withOutExtension + '.gif';
}
function removeExtension(srcKey){
    let lastDotPosition = srcKey.lastIndexOf(".");
    if (lastDotPosition === -1) return srcKey;
    else return srcKey.substr(0, lastDotPosition);
}

【问题讨论】:

    标签: amazon-web-services aws-lambda


    【解决方案1】:

    这里绝对没有错误,GIF 很大。

    一个 10 秒的 mp4 格式为 24 帧/秒,分辨率为 1024x768,颜色空间为 3 字节(红绿蓝各 1)包含 540 MB 的数据。

    视频压缩非常棒,它确实可以将其压缩成很小的东西,但众所周知,GIF 在做同样的事情时效率低下。此外,它们的质量很差。有关这方面的更多信息,请查看这个惊人的答案:https://superuser.com/questions/53600/jpeg-vs-png-vs-bmp-vs-gif-vs-svg

    对于您的问题的解决方案:使用 WebP

    它得到了普遍支持,效率更高,外观也更好。

    另外,请注意 AWS 中的托管成本,因为只有数据输入是免费的,数据输出可能会变得非常昂贵!

    【讨论】:

    • 感谢您的回复。
    • 所以首先你是对的,现在我要做的另一件事是在 lambda 中设置预设值(所以不仅仅是在管道预设中)。不过我会看看 WebP!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    • 2014-09-14
    • 2020-04-27
    • 1970-01-01
    • 2018-03-14
    • 2017-10-21
    相关资源
    最近更新 更多