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

如何使用Python在AWS MediaConvert中提取视频最后一帧生成缩略图

Python调用AWS MediaConvert生成任意参数视频最后一帧缩略图实现方案

无需提前解析视频的帧率、时长、尺寸参数,利用MediaConvert原生的输入裁剪时间偏移机制,当设置的裁剪结束时间远大于视频实际总时长时,服务会自动定位到视频最后一帧进行输出,全程无需预处理解析视频元数据。

1. 前置准备

  • 安装AWS Python SDK:pip install boto3
  • 配置AWS凭证(可通过环境变量、~/.aws/credentials文件或者IAM角色授权)
  • 确保使用的账号权限包含:mediaconvert:CreateJob、源视频S3桶的s3:GetObject权限、输出缩略图S3桶的s3:PutObject权限

2. 核心实现代码

import boto3

# 替换为你自己的配置项
REGION = 'us-east-1'
INPUT_VIDEO_S3_PATH = 's3://你的源视频桶/路径/视频文件.mp4'
OUTPUT_S3_PATH = 's3://你的输出桶/缩略图输出路径/'
MEDIACONVERT_ROLE_ARN = 'arn:aws:iam::你的账号ID:role/你的MediaConvert任务角色'

# 初始化MediaConvert客户端,先获取对应区域的服务端点
mc_client = boto3.client('mediaconvert', region_name=REGION)
endpoints = mc_client.describe_endpoints()
mc_endpoint = endpoints['Endpoints'][0]['Url']
mc = boto3.client('mediaconvert', region_name=REGION, endpoint_url=mc_endpoint)

# 构造任务参数
job_settings = {
    "Inputs": [
        {
            "AudioSelectors": {
                "Audio Selector 1": {"DefaultSelection": "DEFAULT"}
            },
            "VideoSelector": {},
            "TimecodeSource": "ZEROBASED",
            "FileInput": INPUT_VIDEO_S3_PATH,
            "InputClippings": [
                {
                    # 设置一个远大于绝大多数视频时长的结束时间,自动触发取最后一帧
                    "EndTimecode": "25:00:00:00"
                }
            ]
        }
    ],
    "OutputGroups": [
        {
            "Name": "File Group",
            "OutputGroupSettings": {
                "Type": "FILE_GROUP_SETTINGS",
                "FileGroupSettings": {
                    "Destination": OUTPUT_S3_PATH
                }
            },
            "Outputs": [
                {
                    "ContainerSettings": {"Container": "RAW"},
                    "VideoDescription": {
                        "CodecSettings": {
                            "Codec": "FRAME_CAPTURE",
                            "FrameCaptureSettings": {
                                "FramerateNumerator": 1,
                                "FramerateDenominator": 1,
                                "MaxCaptures": 1,
                                "Quality": 80
                            }
                        }
                    },
                    "NameModifier": "_last_frame"
                }
            ]
        }
    ],
    "TimecodeConfig": {"Source": "ZEROBASED"}
}

# 提交任务
response = mc.create_job(
    Role=MEDIACONVERT_ROLE_ARN,
    Settings=job_settings,
    AccelerationSettings={"Mode": "DISABLED"},
    StatusUpdateInterval="SECONDS_60",
    Priority=0
)

print(f"MediaConvert任务已提交,任务ID:{response['Job']['Id']}")

3. 参数说明

  • TimecodeSource设为ZEROBASED:忽略视频自带的时间码,统一从00:00:00:00开始计算时长,避免部分特殊封装视频时间码异常导致的截图错误
  • EndTimecode设为25:00:00:00:覆盖所有时长小于25小时的视频,如果你需要处理更长的视频可以对应调大该值
  • FrameCaptureSettings里的MaxCaptures设为1:仅输出1帧图像,也就是最后一帧
  • 无需手动指定输出分辨率:MediaConvert会默认保持和源视频一致的尺寸输出,如果需要统一缩略图尺寸,可以在VideoDescription下添加Width和Height参数自定义缩放

4. 结果获取

任务提交后可以通过任务ID调用mc.get_job(Id=任务ID)接口轮询任务状态,状态变为COMPLETE后即可在配置的输出S3路径下获取后缀为_last_frame.0000001.jpg的缩略图文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:51:03