如何使用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
相关产品推荐
相关产品推荐

