How to set a video to any custom bitrate in kbps
- Step 1Open the bitrate setter and drop your video — Drag any
.mp4,.mov,.mkv,.webm,.avi,.m4v, or.tsfile onto the drop zone. The file is read into the in-browser FFmpeg.wasm sandbox; nothing is uploaded. - Step 2Enter your Video kbps target — Type the video bitrate in the Video kbps field (default 2500, allowed range 100 to 50000). This becomes
-b:v <value>k. If your spec is in Mbps, multiply by 1000 —5 Mbpsis5000. - Step 3Enter your Audio kbps target — Set Audio kbps (default 128, allowed range 48 to 320). This re-encodes the audio track to AAC at that bitrate. Use 128 for speech, 192–320 for music — see the audio-bitrate spoke.
- Step 4Let FFmpeg.wasm encode — The tool runs
libx264 -preset medium -b:v Xk -maxrate (1.2X)k -bufsize (2X)k -c:a aac -b:a Yk. It is single-pass, so it starts immediately — there is no analysis pass to wait through. - Step 5Download the faststart MP4 — Output is always an MP4 with
+faststart. Filesize lands near(Video kbps + Audio kbps) x duration / 8plus container overhead. - Step 6Verify the actual bitrate hit your target — Check the result in a player's info panel or run
ffprobe. Single-passb:vtypically lands within a few percent on mixed content but can drift on very high-motion or very static clips — bump the number a notch and re-run if you must be under a hard ceiling.
The two controls and exactly what they do
These are the only inputs the bitrate setter exposes in its client UI. Everything else (codec, preset, maxrate, bufsize, container) is fixed by the tool and shown here for transparency.
| Control / fixed setting | Value & range | FFmpeg flag it produces | Notes |
|---|---|---|---|
| Video kbps (you set) | Default 2500 · min 100 · max 50000 | -b:v <value>k | Average target for the video stream. Clamped to at least 100 in code |
| Audio kbps (you set) | Default 128 · min 48 · max 320 | -b:a <value>k with -c:a aac | Audio is always re-encoded to AAC — even if you only wanted to change video |
| Video codec (fixed) | H.264 / libx264 | -c:v libx264 | Not selectable. For H.265/AV1/ProRes use the dedicated sibling tools |
| Preset (fixed) | medium | -preset medium | No speed/quality preset dropdown exists in this tool |
| Maxrate (auto) | 1.2x your Video kbps | -maxrate <1.2X>k | Caps instantaneous peaks for player buffers — computed for you |
| Bufsize (auto) | 2x your Video kbps | -bufsize <2X>k | VBV buffer size — computed for you, not adjustable |
| Output container (fixed) | MP4 + faststart | -movflags +faststart → .mp4 | Always MP4 regardless of input container |
Common kbps targets by resolution
Sensible Video kbps starting points for H.264 single-pass at preset medium. These are ballpark targets — measure on your own content and adjust. Bitrate, not resolution, drives file size in this tool.
| Resolution | Low / lean | Balanced | High quality |
|---|---|---|---|
| 480p (854x480) | 600 | 1000 | 1500 |
| 720p (1280x720) | 1500 | 2500 | 4000 |
| 1080p (1920x1080) | 3000 | 5000 | 8000 |
| 1440p (2560x1440) | 6000 | 9000 | 14000 |
| 4K (3840x2160) | 12000 | 20000 | 35000 |
Tier limits for the bitrate setter
Limits come from the shared video family in lib/tier-limits.ts. There is no minutes/duration cap — only file size and how many files you can queue.
| Tier | Max file size | Files per batch |
|---|---|---|
| Free | 1 GB | 1 |
| Pro | 10 GB | 5 |
| Pro-media | 100 GB | 50 |
| Developer | 100 GB | Unlimited |
Cookbook
Concrete kbps choices for the most common reasons people set an exact bitrate. Each shows the two numbers you type and the FFmpeg command the tool runs for you.
Standard 1080p delivery at 5 Mbps
A platform asks for ~5 Mbps H.264, AAC 192. Type 5000 and 192 — the tool builds the rest, including the maxrate cap and buffer.
Video kbps: 5000 Audio kbps: 192 Tool runs: ffmpeg -i in.mov -c:v libx264 -preset medium \ -b:v 5000k -maxrate 6000k -bufsize 10000k \ -c:a aac -b:a 192k -movflags +faststart out.mp4 Result: ~5.2 Mbps total -> ~39 MB per minute
Lean 720p web preview at 1500 kbps
You want a small but watchable 720p preview. Lower Video kbps; keep audio modest.
Video kbps: 1500 Audio kbps: 128 Tool runs: ffmpeg -i in.mp4 -c:v libx264 -preset medium \ -b:v 1500k -maxrate 1800k -bufsize 3000k \ -c:a aac -b:a 128k -movflags +faststart out.mp4 Result: ~1.6 Mbps total -> ~12 MB per minute
Convert an Mbps spec to the kbps field
Specs are often in Mbps; the field is kbps. Multiply by 1000.
Spec says: 8 Mbps video, 256 kbps audio Type into the tool: Video kbps: 8000 (8 x 1000) Audio kbps: 256 Wrong: typing 8 gives -b:v 8k (8 kbit/s, unwatchable)
Estimate the output size before encoding
File size is bitrate x duration. Use this to pick a Video kbps that fits a ceiling — this tool does not auto-calculate it for you.
Goal: keep a 3-minute (180 s) clip under 60 MB 60 MB = 480 megabits total kbps = 480000 / 180 = 2666 kbps reserve 128 for audio -> Video kbps ~= 2400 Type: Video kbps 2400, Audio kbps 128 (Then verify; bump down if it overshoots)
Re-encode a high-bitrate camera file down to a sane number
A phone or DSLR may shoot 1080p at 45 Mbps. Set a target to shrink it without touching resolution.
Source: 1080p, 45000 kbps, 220 MB / minute Type: Video kbps 6000, Audio kbps 192 Tool runs libx264 -b:v 6000k ... Result: ~6.2 Mbps -> ~47 MB / minute (about 4.7x smaller)
Edge cases and what actually happens
Output is a few percent off your target
ExpectedThis tool is single-pass (-b:v with a -maxrate/-bufsize cap), not two-pass. Single-pass H.264 typically lands within a small percentage on mixed content but can drift on extremely high-motion or extremely static footage. If you have a hard ceiling, set the number slightly below it and verify with a player or ffprobe.
You only wanted to change video, but audio got re-encoded
By designEvery run applies -c:a aac -b:a <Audio kbps>k, so the audio track is always transcoded — there is no stream-copy/passthrough option here. Set Audio kbps to match the source bitrate to minimise the change, or use a container-only sibling like the metadata scrubber if you need to leave streams untouched.
Output is always MP4, even though you fed in MKV/WebM/MOV
By designThe bitrate setter writes .mp4 with +faststart regardless of input container. If you need the original container preserved, this is not the right tool — re-encode with the video transcoder, which lets you pick the output container.
You typed a tiny number like 8 expecting 8 Mbps
CautionThe field is in kbps, so 8 means 8 kbit/s — a smeared, unwatchable result. The value is clamped to a minimum of 100 in code, but 100 kbps is still far too low for video. For 8 Mbps type 8000.
You set 50000 and the file barely shrinks (or grows)
ExpectedIf your target exceeds the source's natural bitrate, libx264 cannot invent detail and the file will not get meaningfully larger or sharper — re-encoding also can't recover quality already lost. To genuinely raise visual quality from a low-bitrate source, see the increase-bitrate spoke, which explains the limits.
FFmpeg.wasm runs out of memory on a 4K source
Memory limitVery large 4K/8K sources can exhaust the WASM heap during libx264 encode. Try a smaller clip, downscale first with the video resizer, or split with the video splitter and process parts separately.
Source has no audio track
PreservedIf there is no audio stream, the AAC re-encode simply has nothing to encode and the output is video-only. The Audio kbps value is ignored in that case.
File is larger than your tier allows
RejectedFree is capped at 1 GB and 1 file; Pro 10 GB / 5 files; Pro-media 100 GB / 50 files; Developer 100 GB / unlimited. A file over your cap is rejected before encoding — there is no duration limit, only size.
You wanted exact bitrate but really need an exact file size
Wrong toolThis tool targets a bitrate, not a megabyte ceiling. To hit a hard size for a platform, use a size-fit compressor that computes the bitrate from duration for you: Discord, email, or WhatsApp.
Variable-framerate (VFR) source from a screen recorder
CautionScreen-capture and phone footage is often VFR. libx264 handles it, but bitrate accuracy is computed against playback duration, so a heavily VFR clip can land further from the target. Verify the result and adjust the number if needed.
Frequently asked questions
Does this tool use two-pass encoding?
No. It is single-pass: -b:v <target>k with an automatic -maxrate (1.2x) and -bufsize (2x). Single-pass starts immediately and lands within a few percent on typical content. If you need the tightest possible accuracy you'd want a true two-pass encode, which this tool does not offer — set the target slightly conservative and verify instead.
Can I choose CBR vs VBR?
There is no CBR/VBR switch in the UI. The tool always uses constrained VBR — an average -b:v target with a -maxrate peak cap and a -bufsize buffer — which is what most streaming and delivery specs actually expect. You only set the average via the Video kbps field.
What codec does the output use?
Always H.264 via libx264 at -preset medium, muxed into MP4. The codec and preset are fixed and not selectable here. For H.265 use the H.265 encoder, for AV1 the AV1 encoder, and for ProRes the ProRes encoder.
What's the highest bitrate I can set?
The Video kbps field accepts 100 to 50000 (50 Mbps); Audio kbps accepts 48 to 320. Setting a target higher than the source's own bitrate won't add quality — libx264 can't create detail that isn't there.
Will it change my resolution or framerate?
No. The bitrate setter only touches bitrate (and re-encodes audio to AAC). Resolution and framerate pass through unchanged. To change resolution use the video resizer; for a combined transcode use the video transcoder.
Why is the output always MP4?
The tool writes .mp4 with -movflags +faststart every time, so the result streams and seeks instantly. If you need a different container (MKV, WebM, MOV), use the video transcoder.
How big will my file be?
Roughly (Video kbps + Audio kbps) x duration_seconds / 8 kilobytes, plus a little container overhead. For example 5000 + 192 kbps over 60 s is about 39 MB. The tool does not pre-compute this — see the size-estimation example in the cookbook.
Is anything uploaded to a server?
No. Encoding runs entirely in your browser through FFmpeg.wasm. The video bytes never leave the tab, which is why even confidential footage is safe and the Free tier already allows a 1 GB file.
Can I keep the original audio untouched?
Not in this tool — audio is always re-encoded to AAC at your Audio kbps. To preserve original streams, do container-only work with tools like the metadata scrubber or audio-track extractor.
Why isn't my exact bitrate exact?
Single-pass b:v is a target, not a hard lock. Scene complexity, VFR sources, and the 1.2x maxrate cap mean the measured average can sit a few percent above or below. Set the number slightly under a hard limit and confirm with ffprobe.
Can I batch several files at once?
The bitrate setter accepts one file per run in its UI. Batch capacity (multiple files/larger sizes) scales by tier: Pro 5 files, Pro-media 50, Developer unlimited — but you process them through the single-file flow.
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.