The boring hard parts of video, already built
Transcodely turns a source file into streams that play everywhere and only for the people you choose — written to storage you own, at paths you decide, with every combination we sell exercised by a published 164-case conformance run.
What you actually have to build
Choosing a codec is the easy part, and it is the part every comparison argues about. The work that decides whether the project ships is underneath it. Here is that list, and what of it is ours.
The transcoding queue ours
Jobs are admitted, queued and dispatched under a per-app concurrency limit. Work over the limit waits in the queue instead of being rejected, and a job an encoder never started bills nothing.
JobsHLS and CMAF packaging ours
HLS and DASH come out of one CMAF package — shared fMP4 segments referenced by both manifests, so a multi-codec ladder is stored once and served to every device.
Adaptive streamingStorage lifecycle ours
Output paths are decided by template before the job starts, and hosted sources can be deleted a set number of days after a video goes live, with a warning webhook first and a per-video pin to opt out.
Source lifecycleBandwidth and cost math ours
Every output carries a priced snapshot you can recompute, and a per-app monthly spend limit refuses new jobs before the bill runs away — with a webhook at 80% and again at the cap.
Spend limitsAbuse handling still yours
This one is still yours. We reject private and internal addresses on ingest and publish an acceptable-use policy, but moderating what your users upload is your product decision, not a knob we can turn for you.
Acceptable useControl, correctness, one request
Control
You decide the encode, and where every byte lands.
- Four codecs — H.264, HEVC, VP9 and AV1 — with CRF, CBR or VBR, per-codec profile options, and up to 20 variants in one ABR ladder.
- A four-level output path template (job, output, origin, system default) resolves before the job starts. Two templates you wrote that collide are rejected at create with the fix named; a collision between the defaults is auto-fixed. Neither ends in a silent overwrite.
- Read from and write to your own S3, GCS, Cloudflare R2 or HTTP origin. Your bucket, your lifecycle rules, your bill from your cloud — we hold write credentials, not your library.
Correctness
We check the output, and the gaps are on the page too.
- 162 of 164 validation cases run as real jobs on real workers, with the produced files downloaded and inspected rather than assumed.
- The 2 tracked gaps — things we accept and price but cannot yet produce end to end — are published in their own section instead of being counted as passing.
- A failed job bills €0, outputs and processing fee included. Cancel while queued and it bills nothing at all.
One request
The first call does not need a bucket.
- Send one request with a source URL and managed delivery on, and the outputs land in our storage with a hosted video record and a player alongside them. No origin to create first, no credentials to paste.
- Playback URLs are signed and time-limited. Three visibility tiers decide who can reach the video at all, and a private one is only ever handed a URL on your own authenticated reads.
- Point the same request at your own origin later and nothing else about it changes.
What we are not
Plain H.264 hosting is cheaper at Bunny.
Bunny Stream encodes H.264 up to 1080p for free and delivers at a lower rate per gigabyte than we do. If that is the whole job, they are the better buy — and we buy our CDN from them.
We do not sell your video for you.
There is no checkout, no paywall, no membership tier and no storefront. We gate playback; taking the money is your side of the line, or your commerce platform’s.
Per-title encoding is not available yet.
The API carries the content-aware field for forward compatibility and refuses any job that sets it, with the error code parameter_unsupported, until the worker pipeline ships. It is priced and documented; it is not purchasable.
No live streaming and no viewer analytics.
There is no RTMP ingest and no low-latency pipeline, and we are not building one. We count plays per video per day so you can see what is watched and what it costs; rebuffer rates and per-viewer sessions are Mux Data’s job.
The same honesty runs through the comparison pages, where every competitor gets a section on what they do better, and through conformance, where the features we cannot yet produce sit on the same page as the ones we can.
Own the bucket, or do not
One encoder, two ways to take delivery. This is the only decision you have to make before the first request, and you can change it later without changing anything else.
Your bucket
We write, you hold
Renditions, manifests, segments, thumbnails and subtitle sidecars are written into your own S3, GCS, R2 or HTTP origin, at paths your template decided. Your cloud contract, your lifecycle rules, your egress bill. We hold credentials to write to it, not custody of what is in it. Serve it from any CDN you like, or none.
Storage setupHosted by us
We write, we serve
Skip the bucket entirely. One request creates the video, encodes the ladder, stores it, delivers it over a global CDN and gives you an embeddable player. Playback URLs are signed and time-limited; visibility decides who can reach the video, and a private one is only issued a URL on your own authenticated reads.
Video hostingStart with one request
The quickstart runs against a sample clip, so nothing has to be configured before it works. The rate card is printed in full, and conformance shows the result for every combination, gaps included.