How to reduce video bitrate for streaming and cdn delivery
- Step 1Drop your master onto the bitrate setter — Add the high-bitrate source (
.mp4,.mov,.mkv,.webm,.avi,.m4v,.ts). It is read into FFmpeg.wasm locally; no upload happens. - Step 2Choose your CDN target bitrate — Enter the rung's Video kbps (e.g. 2500 for a 1080p mid rung, 1500 for 720p). The field accepts 100–50000. This sets
-b:v <value>k. - Step 3Set a modest Audio kbps — For streaming, 128 kbps AAC is plenty for most content; use 96 only for speech-heavy rungs you want extra lean. Range is 48–320.
- Step 4Encode (single pass) — The tool runs
libx264 -preset medium -b:v Xk -maxrate (1.2X)k -bufsize (2X)k -c:a aac -b:a Yk -movflags +faststart. One pass — it starts immediately. - Step 5Download and host the faststart MP4 — Drop the result onto your origin or static host. Faststart means the player can begin before the full transfer completes.
- Step 6Repeat per ladder rung — For an ABR ladder, re-run the source once per rung with a different Video kbps. Pair each with the matching resolution via the video resizer first if rungs differ in size.
Suggested ABR ladder rungs (H.264 constrained-VBR)
Common rung targets for an adaptive ladder. Resize the source to each resolution first (this tool does not resize), then set the matching Video kbps here. Numbers are starting points; tune to your content.
| Rung | Resolution | Video kbps | Audio kbps |
|---|---|---|---|
| Mobile low | 426x240 | 400 | 96 |
| Mobile | 640x360 | 800 | 96 |
| SD | 854x480 | 1400 | 128 |
| HD | 1280x720 | 2500 | 128 |
| Full HD | 1920x1080 | 4500 | 128 |
What the bitrate setter does for streaming
The streaming-relevant flags. You set the two kbps numbers; the tool fixes everything else, including the buffer math that keeps playback smooth.
| Setting | Value | Why it matters for CDN/streaming |
|---|---|---|
| Video target | your Video kbps -> -b:v Xk | The average bandwidth each viewer consumes |
| Maxrate | 1.2x target (auto) | Caps peak bandwidth so it won't blow a player's buffer |
| Bufsize | 2x target (auto) | VBV buffer — smooths bitrate over a short window |
| Codec | H.264 libx264 (fixed) | Universal browser/CDN support, no client codec gaps |
| Faststart | +faststart (always) | moov at front -> instant start, progressive download |
| Audio | AAC at your Audio kbps | Re-encoded; set 96–128 for lean streaming rungs |
Egress impact of lowering bitrate
Approximate bytes shipped per 10-minute stream at each rung (video+128k audio). Lower rungs cut CDN cost proportionally.
| Video kbps | ~Size per 10 min | Relative egress |
|---|---|---|
| 800 | ~66 MB | 1.0x (baseline lean) |
| 1500 | ~122 MB | 1.9x |
| 2500 | ~197 MB | 3.0x |
| 4500 | ~347 MB | 5.3x |
| 8000 | ~610 MB | 9.2x |
Cookbook
Real CDN/streaming scenarios, each showing the two numbers you type and the command the tool runs to produce a player-safe rung.
Trim a 1080p master to a 4500 kbps top rung
Your origin holds a 20 Mbps export. Drop it to a sane top rung for HLS/DASH.
Source: 1080p, ~20000 kbps Video kbps: 4500 Audio kbps: 128 Tool runs: ffmpeg -i master.mov -c:v libx264 -preset medium \ -b:v 4500k -maxrate 5400k -bufsize 9000k \ -c:a aac -b:a 128k -movflags +faststart out.mp4 ~4.6 Mbps -> ~4.4x smaller, smooth on home broadband
Build a 720p mid rung at 2500 kbps
Resize to 720p first, then set the rung target here.
Step 1: video-resizer -> 1280x720 Step 2: bitrate setter Video kbps: 2500 Audio kbps: 128 ffmpeg -i r720.mp4 -c:v libx264 -preset medium \ -b:v 2500k -maxrate 3000k -bufsize 5000k \ -c:a aac -b:a 128k -movflags +faststart out.mp4
Lean mobile rung for slow connections
A 360p / 800 kbps rung keeps playback alive on 3G-class links.
Step 1: video-resizer -> 640x360 Step 2: Video kbps 800, Audio kbps 96 ~896 kbps total -> ~66 MB per 10 minutes Maxrate auto-capped at 960k keeps peaks player-safe
Cap egress under a per-stream byte budget
Finance gives you a ceiling per stream. Convert it to a bitrate.
Budget: 150 MB per 10-min (600 s) stream 150 MB = 1200 megabits total kbps = 1200000 / 600 = 2000 reserve 128 audio -> Video kbps ~= 1870 Type: Video kbps 1870, Audio kbps 128, then verify size
One source, four rungs
Run the resized source through the setter once per rung to build a full ladder.
240p -> Video 400 Audio 96 360p -> Video 800 Audio 96 480p -> Video 1400 Audio 128 720p -> Video 2500 Audio 128 (each is a separate faststart MP4 you wire into HLS/DASH)
Edge cases and what actually happens
This tool doesn't resize for each rung
Wrong tool for that stepThe bitrate setter only changes bitrate — it won't scale 1080p down to 360p for a low rung. Resize first with the video resizer, then set the matching Video kbps here. Otherwise you'll ship full-resolution frames at a starved bitrate, which looks blocky.
It does not output HLS/DASH segments or a manifest
Not a packagerEach run produces one progressive faststart MP4, not segmented .ts/.m4s chunks or an .m3u8/.mpd manifest. Use this to create each rung's source file, then package with your CDN's or origin's HLS/DASH packager.
Measured bitrate sits above your hard egress cap
CautionSingle-pass b:v is a target; the 1.2x maxrate allows short peaks. On high-motion content the average can edge above target. For a strict cap, set Video kbps a little below the limit and verify with ffprobe.
Faststart MP4 vs true streaming
By designThe output is a progressive faststart MP4 — great for direct <video> embedding and pseudo-streaming. It is not adaptive on its own; for ABR you still need multiple rungs packaged into HLS/DASH by a packager.
Audio re-encoded even on low rungs
By designAudio is always transcoded to AAC at your Audio kbps. That's usually fine (and desirable) for streaming, but it means you can't stream-copy a pristine audio track through unchanged.
4K master exhausts the WASM heap
Memory limitEncoding 4K in-browser can hit the FFmpeg.wasm memory ceiling. Downscale to 1080p with the video resizer before setting the rung bitrate, or process shorter segments.
Master is over the tier size cap
RejectedFree 1 GB / 1 file, Pro 10 GB / 5, Pro-media 100 GB / 50, Developer 100 GB / unlimited. A master above your cap is rejected. There's no duration limit, only file size.
You need an exact final file size, not a bitrate
Wrong toolIf the requirement is a fixed megabyte target (e.g. an upload cap), use a size-fit compressor — Discord, email, or WhatsApp — which derive the bitrate from duration to hit the size.
Setting the rung above the source bitrate
No gainTargeting 5000 kbps on a source that's only 3000 kbps won't improve quality and barely changes size — re-encoding can't add lost detail. For CDN work you almost always set targets below the source.
Frequently asked questions
What bitrate should I use for 1080p streaming?
For H.264, a 1080p rung commonly sits around 4000–6000 kbps; 4500 is a solid default top rung for general content. Lower it toward 3000 for talking-head footage, raise it toward 8000 for sports/fast motion. Type the number into Video kbps.
Does it use constant bitrate (CBR) for streaming?
It uses constrained VBR: an average -b:v target with a -maxrate peak cap (1.2x) and -bufsize buffer (2x). That's what most ABR streaming expects — predictable peaks without wasting bits on simple scenes. There is no pure-CBR mode in the UI.
Can it build my whole HLS/DASH ladder automatically?
No. It produces one faststart MP4 per run. Build each rung by resizing then setting its bitrate, then feed those files to a packager that segments them and writes the manifest.
Why faststart for CDN delivery?
-movflags +faststart moves the moov atom to the front so a browser can begin playback after buffering a few seconds rather than downloading the entire file first. The tool applies it on every encode.
Will lowering bitrate help with buffering?
Yes — a lower average bitrate (and the auto maxrate cap) means less data per second, so viewers on slow links keep up. Pair a lower bitrate with a smaller resolution rung for the best low-bandwidth experience.
Does it change resolution to match the rung?
No. It only changes bitrate. Use the video resizer to set each rung's resolution first, then set the bitrate here.
How much CDN egress will I actually save?
Egress scales with bitrate. Dropping a master from 20 Mbps to a 2500 kbps rung is roughly an 8x reduction in bytes shipped per stream. See the egress table above for per-rung sizes.
Is my master uploaded to a transcoding server?
No. Everything runs in your browser via FFmpeg.wasm. The master never leaves the tab, so you avoid both upload time and the exposure of unreleased content.
What audio bitrate is right for streaming?
128 kbps AAC suits most content; 96 kbps is fine for speech-heavy low rungs; reserve 192–320 for music. See the audio-bitrate spoke for details.
Can I keep the original H.265/AV1 codec for efficiency?
This tool always outputs H.264. For more efficient codecs (smaller files at the same quality) use the H.265 encoder or AV1 encoder — but check that your CDN clients support them.
What's the largest source I can encode?
By tier: Free 1 GB, Pro 10 GB, Pro-media and Developer 100 GB. There's no minutes cap — only file size and batch count limit you.
Is the bitrate accurate enough for a strict CDN cap?
Single-pass targeting lands within a few percent on typical content. For a hard cap, set Video kbps slightly under the limit and confirm the measured average with a player or ffprobe.
Privacy first
Every JAD Video tool runs entirely in your browser via WebCodecs and FFmpeg (WebAssembly). Your video files never leave your device — verified by zero outbound network requests during processing.