#amazon-web-services #aws-lambda
#amazon-веб-сервисы #aws-lambda
Вопрос:
Итак, я играю с Elastic transcoder, чтобы преобразовать загруженное видео из моей корзины S3 в GIF.
На данный момент, когда я загружаю на S3, у меня есть базовый лямбда-код, который запускает конвейер для преобразования в gif.
Теперь, что здесь происходит, я загружаю 7 МБ mp4, и когда он перекодирован, выходной GIF составляет более 80 МБ??
Я просмотрел документы и не могу найти ничего, что помогло бы мне. Кто-нибудь может пролить свет…
Ниже приведены мои предварительные настройки в elastic transcoding
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);
}
Ответ №1:
Здесь нет абсолютно никакой ошибки, GIF-файлы БОЛЬШИЕ.
10-секундный mp4 со скоростью 24 кадра в секунду при разрешении 1024×768 и цветовом пространстве в 3 байта (по 1 для каждого красного, зеленого и синего) содержит 540 МБ данных.
Сжатие видео ПОТРЯСАЮЩЕЕ, и оно действительно может сжать его во что-то маленькое, но GIF-файлы, как известно, неэффективны при выполнении того же самого. Кроме того, их качество ужасное. Для получения дополнительной информации об этом, пожалуйста, ознакомьтесь с этим удивительным ответом: https://superuser.com/questions/53600/jpeg-vs-png-vs-bmp-vs-gif-vs-svg
Для решения вашей проблемы: используйте WebP
Он поддерживается повсеместно, намного эффективнее и выглядит намного лучше.
Кроме того, будьте осторожны с расходами на хостинг в AWS, поскольку только ввод данных бесплатный, передача данных может стать очень дорогой!
Комментарии:
1. Спасибо за ваш ответ.
2. Итак, во-первых, вы правы, теперь еще одна вещь, которую мне нужно было сделать, это также установить предустановленные значения в лямбде (то есть не только в предустановке конвейера). Я все же проверю WebP!