You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS S3中实现视频上传时或上传后的自动压缩?

AWS S3自动压缩视频方案(结合MediaConvert)

核心实现逻辑

通过S3事件触发Lambda函数,由Lambda调用MediaConvert自动完成视频压缩任务,压缩后的文件可存储到指定S3桶(或同桶的特定前缀路径下),全程无需手动操作。

具体步骤

1. 配置IAM权限角色

  • 创建IAM角色,为其添加以下权限:
    • 读取源S3存储桶、写入目标S3存储桶的精细S3权限(避免全量权限)
    • MediaConvert服务执行任务的权限(AWSElementalMediaConvertFullAccess或更精细的任务创建权限)
  • 在MediaConvert控制台中,将该角色设为服务默认执行角色。

2. 编写Lambda触发函数

新建Lambda函数(推荐Python/Node.js环境),实现以下逻辑:

  • 接收S3对象上传事件,提取源文件的桶名和路径
  • 调用MediaConvert的CreateJob API,指定输入源文件、压缩参数(码率、分辨率等)、输出存储路径
  • 示例Python代码片段:
import boto3
import os

mediaconvert = boto3.client('mediaconvert', endpoint_url=os.environ['MEDIACONVERT_ENDPOINT'])

def lambda_handler(event, context):
    # 提取S3上传事件中的文件信息
    record = event['Records'][0]
    src_bucket = record['s3']['bucket']['name']
    src_key = record['s3']['object']['key']
    
    # 定义MediaConvert压缩任务配置
    job_settings = {
        "Inputs": [{"FileInput": f"s3://{src_bucket}/{src_key}"}],
        "OutputGroups": [
            {
                "Name": "Compressed_Videos",
                "Outputs": [
                    {
                        "ContainerSettings": {"Container": "MP4"},
                        "VideoDescription": {
                            "CodecSettings": {
                                "Codec": "H_264",
                                "H264Settings": {
                                    "Bitrate": 2000000,  # 2Mbps,可按需调整
                                    "ResolutionWidth": 1280,
                                    "ResolutionHeight": 720
                                }
                            }
                        },
                        "AudioDescriptions": [
                            {
                                "CodecSettings": {
                                    "Codec": "AAC",
                                    "AacSettings": {"Bitrate": 128000}
                                }
                            }
                        ]
                    }
                ],
                "OutputGroupSettings": {
                    "Type": "FILE_GROUP_SETTINGS",
                    "FileGroupSettings": {
                        "Destination": f"s3://{os.environ['TARGET_BUCKET']}/compressed/"
                    }
                }
            }
        ]
    }
    
    # 启动压缩任务
    mediaconvert.create_job(
        Role=os.environ['MEDIACONVERT_ROLE_ARN'],
        Settings=job_settings
    )
    return {'statusCode': 200}
  • 给Lambda函数配置环境变量:MEDIACONVERT_ENDPOINT(MediaConvert服务端点,可在控制台获取)、TARGET_BUCKET(压缩后文件存储桶)、MEDIACONVERT_ROLE_ARN(之前创建的IAM角色ARN)

3. 配置S3事件通知

打开源视频存储桶的「属性」-「事件通知」:

  • 创建新通知,名称自定义(如Video_Compress_Trigger)
  • 事件类型勾选「Put」(对象上传事件)
  • 可通过前缀/后缀过滤(比如只处理.mp4/.mov格式视频)
  • 目标选择「Lambda函数」,关联刚才创建的Lambda函数

4. 业务逻辑调整(可选)

如果之前后端限制65MB以上视频无法上传,可根据业务需求放宽限制——毕竟上传后会自动压缩;也可保持限制,仅对符合条件的视频执行自动压缩。

5. 测试验证

上传大体积视频到源S3桶,通过Lambda日志确认事件触发,再到MediaConvert控制台查看任务状态,最后检查目标桶是否生成压缩后的视频文件。

注意事项

  • 压缩参数(码率、分辨率等)需根据业务场景调整,平衡视频质量与文件大小
  • 可在MediaConvert中创建任务模板,后续Lambda调用时直接引用模板ID,简化代码
  • 权限配置遵循最小权限原则,避免过度授权

内容的提问来源于stack exchange,提问作者Sara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 16:45:41