How to encode a video under 15 mb for twitter / x
- Step 1Decide: X-spec quality, or a hard size ceiling? — If you mainly want a clean, smaller-than-4K X clip, the formatter alone is fine. If you genuinely must be under 15 MB, the formatter can't promise that — use the whatsapp-compressor (targets ~15 MB) or another size-targeted tool below.
- Step 2For X shape + small size, format first — Run the X formatter to get the 16:9 1280×720 crop and the 2:20 cap. Drop your
.mp4/.mov/.mkv/.webm/.avi/.m4v/.tsfile, click Run X Format, and download the MP4. - Step 3Check the output size on the result card — The card shows input → output bytes. If it's already under your target (small/static clips often are), you're done. If it's over 15 MB, continue to the size-targeted step.
- Step 4Hand the formatted clip to a size-targeted compressor — Drop the formatter's MP4 into the whatsapp-compressor (targets ~15 MB) for an 'under 15 MB' goal, or discord-compressor / email-compressor for other ceilings — each runs a bitrate-calc encode to hit the target.
- Step 5Or set an exact bitrate yourself — For precise control, use video-bitrate-set: set video kbps (and audio kbps) so duration × bitrate lands under your byte budget. For 15 MB over 140s that's roughly 800 kbps total — the tool lets you dial it in.
- Step 6Upload the small MP4 to X — Attach the final file. It's under your ceiling, at X spec, and uploaded straight from a local encode — nothing left your device during processing.
Why the formatter can't hit '15 MB' on its own
CRF is constant-quality, so size varies with content. Verified against lib/video/video-processor.ts (runSocialFormat — single CRF 20 pass, no size target).
| Property | X formatter | What you'd need for 15 MB |
|---|---|---|
| Encode target | Quality (-crf 20) | Size (bitrate calc / 2-pass) |
| Size control | None | A target-MB or target-bitrate field |
| Typical 2:20 high-motion | ~40–60 MB | Far below — needs ~800 kbps |
| Typical short static clip | Often < 10 MB | Already under — formatter alone OK |
Pick the right local tool for your size target
All run in-browser via FFmpeg.wasm — no upload. Targets are the real defaults from each tool's client component.
| Target | Tool | How it hits it |
|---|---|---|
| ~15 MB (closest to 'under 15') | whatsapp-compressor | Targets ~15 MB to fit the 16 MB cap |
| 25 MB / 50 MB | discord-compressor | 25 MB free · 50 MB Nitro presets |
| Gmail 25 / Outlook 20 MB | email-compressor | Provider presets |
| Any exact size | video-bitrate-set | You set video + audio kbps |
| X 16:9 shape (no size promise) | This formatter | Fixed CRF 20 720p |
Free-vs-paid limits for this tool
From the shared video tier family (lib/tier-limits.ts). One file per job; paid tiers batch sequentially.
| Tier | Max file size | Batch files / job |
|---|---|---|
| Free | 1 GB | 1 |
| Pro | 10 GB | 5 |
| Pro + Media | 100 GB | 50 |
| Developer | 100 GB | Unlimited |
Cookbook
Real routing decisions for a small X clip. The formatter shapes; a size-targeted tool guarantees the byte ceiling. All local, all no-upload.
Short static clip — formatter alone is under 15 MB
A short, low-motion clip at CRF 20 720p is often already small. Check the result card — if it's under your ceiling, no extra step is needed.
Source : 1080p slide-style clip, 40s Formatter -> 1280x720, crf 20 Output : ~6 MB (already < 15 MB) -> done
Busy 2:20 clip — needs the WhatsApp compressor
A full-length high-motion clip overshoots 15 MB at CRF 20. Format for X shape first, then run the formatted MP4 through the ~15 MB-targeting compressor.
Source : 1080p gameplay, 140s Formatter -> 1280x720, crf 20 -> ~52 MB (too big) whatsapp-compressor on that MP4 -> targets ~15 MB -> ~14.6 MB -> upload
Exact 15 MB with a manual bitrate
For precise control, compute a bitrate from your size budget and duration, then set it in video-bitrate-set. Budget ≈ size × 8 / duration, minus audio.
Target 15 MB over 140s: 15 MB * 8 / 140s = ~857 kbps total - audio 96 kbps => video ~760 kbps video-bitrate-set: videoKbps=760, audioKbps=96 -> ~15 MB MP4
Everything stays local
The privacy point: format and compress both run via FFmpeg.wasm in your browser. A confidential clip is never uploaded during processing — only when you choose to post the final file to X.
raw clip -> formatter (in browser)
-> whatsapp-compressor (in browser)
-> 14.x MB MP4 on disk
No bytes left the device until you post to X.Don't expect 480p from the formatter
Lowering resolution is a classic way to cut size, but the formatter is locked to 720p. To go smaller by resolution, resize first or let a size-targeted compressor choose the resolution to fit.
Want 480p to shrink more? - video-resizer: set 854x480, then format/compress - OR let whatsapp-compressor pick resolution to fit ~15 MB The formatter itself only outputs 1280x720.
Edge cases and what actually happens
You need exactly 'under 15 MB'
Use a different toolThe formatter has no size target and can't promise 15 MB. Use the whatsapp-compressor (targets ~15 MB), or video-bitrate-set for an exact bitrate. Format first for X shape, then compress.
Formatter output is bigger than expected
Content-dependentCRF 20 spends bits on motion and detail, so a busy clip overshoots. This is normal for constant-quality encoding — switch to a size-targeted compressor to force the ceiling.
Already-720p source doesn't shrink
PossibleWith no resolution to remove, re-encoding at CRF 20 may keep the size similar or larger. To guarantee a smaller file, use a size-targeted compressor rather than the formatter.
Want 480p to go smaller
Not in this toolThe formatter is fixed at 1280×720. Resize first with video-resizer, or let whatsapp-compressor choose the resolution that fits the target.
Two re-encodes (format then compress)
Minor extra lossChaining formatter → compressor means two encodes, costing a little extra quality. To minimise it, you can skip the formatter and feed the source straight to the compressor if you don't need the 16:9 crop.
Audio eats the byte budget on a long clip
Use bitrate-setThe formatter fixes audio at AAC 128 kbps. On a tight 15 MB budget that's a meaningful share. video-bitrate-set lets you drop audio kbps to free space for video.
File above your tier's size cap
BlockedFree is 1 GB per file; the cap is on input size, not output. A huge source is rejected at drop regardless of how small you want the output. Pre-trim or upgrade.
Output under 15 MB but over X's needs are fine
SupportedA 15 MB MP4 is comfortably under X's 512 MB upload cap and uploads quickly on mobile data — exactly the goal. No further action needed.
Source dimensions unreadable
ErrorIf the formatter can't probe the source it throws "Could not determine video dimensions." Re-mux via the video-transcoder first.
Batch of clips to a size target
SequentialBoth the formatter and the compressors process several files one after another on paid tiers. Apply the same target per file; download each separately.
Frequently asked questions
Can the X formatter make my video under 15 MB?
Not reliably — it encodes at a fixed CRF 20 with no size target, so output size depends on content. Short static clips often land under 15 MB; busy 2:20 clips don't. For a hard 15 MB ceiling, use the whatsapp-compressor, which targets ~15 MB by design.
What's the best tool for an exact size target?
video-bitrate-set for an exact bitrate (size = bitrate × duration), or a preset compressor: whatsapp-compressor (~15 MB), discord-compressor (25/50 MB), email-compressor (Gmail 25 / Outlook 20 MB).
Should I format first or compress first?
If you want X's 16:9 shape and the 2:20 cap, format first, then compress the result. If you only need a small file and don't care about the crop, feed the source straight to a compressor to avoid the extra encode.
Is the encode really fully local?
Yes — both the formatter and the compressors run in your browser via FFmpeg.wasm. Your clip's bytes never leave the device during processing; only an anonymous processed-count is logged for signed-in dashboards.
Why does smaller help on X anyway?
A smaller file uploads faster on mobile data and gives X less to re-compress, so the visible quality after X's own transcode is closer to your source. It also clears X's 512 MB upload cap with room to spare.
Can I get 480p to shrink it further?
Not from the formatter — it's locked to 1280×720. Resize first with video-resizer, or let a size-targeted compressor pick the resolution that fits your target.
How do I compute the bitrate for 15 MB?
Roughly: target bytes × 8 ÷ duration in seconds = total kbps. For 15 MB over 140s that's about 857 kbps; subtract your audio bitrate to get the video bitrate, then set both in video-bitrate-set.
Does chaining two tools hurt quality?
Slightly — each encode costs a generation. Two passes (format then compress) is usually fine for X, but if quality is critical and you don't need the crop, compress the source directly in one pass instead.
What input formats can I use?
MP4, MOV, MKV, WebM, AVI, M4V, and TS — for both the formatter and the compressors. Output is MP4.
What's the largest source I can process?
Free tier caps input at 1 GB per file; Pro 10 GB; Pro + Media / Developer 100 GB. The cap is on input size — a big source is rejected at drop regardless of your output target.
Can I batch several small clips?
Yes on paid tiers (Pro 5, Pro + Media 50, Developer unlimited), processed sequentially. Free does one at a time. Apply the same target tool per file.
Will a 14 MB clip look noticeably worse than my source?
Forcing a small size means lower bitrate, so a busy clip will show some softening at 15 MB — that's the trade for a small, mobile-friendly upload. Static clips compress to small sizes with little visible loss.
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.