Media Optimization on AWS

This content was generated with the assistance of AI and should be verified against the official documentation before being relied on in production.

See the section bibliography for the reference material consulted while preparing these pages.

This sub-section covers image processing, video transcoding, covers and thumbnails, and streaming on AWS, with examples for the AWS CLI, Python, Node.js, Java and .NET. It uses the Bookshelf names of the AWS section (region us-east-1, account 111122223333 and the bookshelf-uploads bucket as placeholders) and is current as of 2026-10-07. The concepts and the self-hosted alternative are in Media Optimization for the backend.

flowchart LR S["S3 uploads"] --> EB["EventBridge"] EB --> SF["Step Functions"] SF --> MC["MediaConvert"] MC --> M["S3 media: HLS, covers"] S --> LM["Lambda: image variants"] LM --> M M --> CF["CloudFront with signed cookies"]

Pages

Page What it covers

MediaConvert: Video Transcoding

Jobs, presets, templates, output groups, QVBR, Automated ABR, EventBridge events, and SDK examples. Elastic Transcoder is discontinued.

Frame Capture, Covers and BlurHash

MediaConvert frame capture for covers, and a Lambda function and layer that computes a BlurHash.

Image Processing with S3, Lambda and CloudFront

The S3 trigger and Lambda thumbnailer with Pillow or sharp, Dynamic Image Transformation for Amazon CloudFront, and the S3 Object Lambda restriction.

Streaming and Delivery

CloudFront signed cookies and URLs, MediaPackage v2, and a note on MediaLive and IVS.

Video on Demand Pipeline

Step Functions with MediaConvert, EventBridge triggers, failure handling and the Video on Demand on AWS solution.

Cheat Sheet (PDF)

A one-page summary of the services, a job skeleton, CLI commands and the pipeline.

Bibliography

Every source below is the official site, repository or documentation page of the library, service or standard it supports. Links were checked from an authoring environment with restricted outbound access. Entries marked (unverified) could not be opened from there (the site refused or blocked the request), so open them and confirm the content, version and status before you rely on them. Entries without the mark were opened successfully, or, for package pages, confirmed through the package registry.