Recommended pipeline
- A web API creates a job and returns an ID.
- The client uploads source media directly to S3 with a signed URL.
- The API publishes a message containing S3 keys and an operation profile.
- A Springwinter Worker downloads the input to temporary storage.
- The Worker invokes FFmpeg with a fixed allowlisted profile.
- The Worker uploads outputs and metadata to S3.
- Job state changes to complete only after durable upload succeeds.
Build the image
Pin both the base image and FFmpeg version. Include only codecs whose licensing and redistribution terms fit your product.Deploy on Springwinter
Create a Worker, choose enough CPU and memory for one measured transcode, and set queue, bucket, temporary directory, concurrency, and timeout variables. Start with concurrency one. FFmpeg can consume every available CPU core, so process-level parallelism must be deliberate.Design for interruption
Long media jobs should be resumable. Segment large inputs, upload completed chunks, and make each chunk idempotent. Extend the queue visibility timeout while work progresses. On shutdown, stop receiving jobs and either finish within the deadline or leave the message unacknowledged for retry.Know the current limits
Springwinter Workers are continuously running ECS services, not one-off AWS Batch jobs. Current standard Fargate resources do not expose GPU or VT1 acceleration. For bursty queues, specialized hardware, or scale-to-zero economics, AWS Batch or a dedicated ECS capacity design may fit better.Observe quality and cost
Record input duration, output duration, bytes, codec, resolution, frames per second, wall time, CPU time, peak memory, retries, and output validation. Cost per media minute is more useful than container cost alone.Frequently asked questions
Should FFmpeg read directly from an S3 URL?
Should FFmpeg read directly from an S3 URL?
Downloading to local ephemeral storage is usually easier to retry and measure. Streaming can reduce temporary storage but makes seeking, retries, and partial failure behavior more complex.
Can a Worker run several FFmpeg jobs at once?
Can a Worker run several FFmpeg jobs at once?
Yes, but only after measurement. Multiple transcodes compete for CPU, memory, disk throughput, and network. Begin with one job per container and increase concurrency carefully.
When should I use AWS Batch instead?
When should I use AWS Batch instead?
Use Batch when jobs are highly bursty, should scale to zero, require per-job sizing, need Spot fleets, or need specialized EC2 accelerators not available to the Springwinter Worker.