使用 Nodejs 和 ffmpeg 在 AWS Lambda 上使用随机帧将视频转换为 GIF

问题描述 投票:0回答:1

我正在寻求帮助,以将存储在 S3 存储桶中的多个视频自动转换为 GIF。具体来说,我的目标是生成长度恰好为 10 秒的 GIF,每个 GIF 都包含从原始视频的不同部分采样的随机帧。随机性应涵盖每个视频的开头、中间和结尾的帧,确保输出多样化且引人入胜的 GIF。

目前,我正在使用 Nodejs 和 AWS Lambda 实现此功能,并利用 ffmpeg 进行视频处理。然而,我在有效地实现预期结果方面面临着挑战。

如果有人对如何在 AWS Lambda 环境中有效完成此任务有经验或见解,特别是在 Nodejs 代码和 ffmpeg 使用方面,我将非常感谢您的指导和专业知识。

javascript node.js video aws-lambda video-processing
1个回答
0
投票

使用 AWS Lambda、Node.js 和 ffmpeg 将视频转换为具有随机帧的 GIF 涉及多个步骤。您需要设置 Lambda 函数,使用 ffmpeg 进行视频处理,然后上传生成的 GIF Amazon S3。

 const fs = require('fs');
const { execSync } = require('child_process');
const AWS = require('aws-sdk');

const s3 = new AWS.S3({
  accessKeyId: 'YOUR_ACCESS_KEY_ID',
  secretAccessKey: 'YOUR_SECRET_ACCESS_KEY',
});

exports.handler = async (event) => {
  const videoKey = event.videoKey; 
  const outputKey = event.outputKey;  bucket

  const videoFile = `/tmp/${videoKey}`;
  const videoParams = {
    Bucket: 'YOUR_BUCKET_NAME',
    Key: videoKey,
  };
  const videoData = await s3.getObject(videoParams).promise();
  fs.writeFileSync(videoFile, videoData.Body);

  const gifFile = `/tmp/${outputKey}`;
  const randomFrameIndexes = generateRandomFrameIndexes(); // Implement this function
  const ffmpegCommand = `ffmpeg -i ${videoFile} -vf "select='eq(n\\,${randomFrameIndexes.join(',')})',scale=320:-1" -vsync vfr ${gifFile}`;
  execSync(ffmpegCommand);

  const gifData = fs.readFileSync(gifFile);
  const uploadParams = {
    Bucket: 'YOUR_BUCKET_NAME',
    Key: outputKey,
    Body: gifData,
  };
  await s3.upload(uploadParams).promise();

  return { statusCode: 200, body: 'GIF conversion successful' };
};
© www.soinside.com 2019 - 2024. All rights reserved.