How to compress any audio under whatsapp's 16 mb limit
- Step 1Drop your file onto the tool — Any MP3/WAV/FLAC/M4A/OGG/Opus/video file. It's decoded locally to read the precise duration in seconds — the single input the bitrate formula needs.
- Step 2The tool computes the target bitrate — It evaluates
16 × 1024 × 1024 × 8 × 0.96 ÷ durationto get bits-per-second, then divides by 1000 for kbps. This is the bitrate that would exactly fill 16 MB minus container overhead. - Step 3It snaps down to a standard bitrate — From the list 320 / 256 / 192 / 160 / 128 / 112 / 96 / 80 / 64 / 48 / 32 / 24 / 16 / 8, it picks the highest value that's ≤ the computed target. Rounding down guarantees the file stays under 16 MB. If the target tops 320 kbps (short clips), it caps at 320.
- Step 4Run the encode — FFmpeg WebAssembly re-encodes to MP3 at that bitrate. No quality/format prompts appear — the choices are made by the formula.
- Step 5Verify the output size — The result panel reports output bytes. It will read under 16 MB. For short clips it'll be far under (the 320 kbps cap kicked in); for 10–60 minute clips it'll sit near 13–15 MB, using the budget efficiently.
- Step 6Want a different ceiling? — For 8 MB, 20 MB, or any custom target, use audio-compressor. For Discord's 25 MB cap, use discord-fit. To set an exact bitrate yourself, use bitrate-changer.
16 MB bitrate-to-size reference
The bitrate the formula selects for each duration, and the resulting MP3 size. Computed as floor(16 × 1024 × 1024 × 8 × 0.96 ÷ seconds), snapped down to a standard MP3 bitrate; size ≈ bitrate × duration ÷ 8.
| Duration | Raw target bitrate | Snapped bitrate | Output size |
|---|---|---|---|
| 1 min | ~2147 kbps | 320 kbps (cap) | ≈ 2.3 MB |
| 3 min | ~716 kbps | 320 kbps (cap) | ≈ 6.9 MB |
| 5 min | ~429 kbps | 320 kbps (cap) | ≈ 11.4 MB |
| 10 min | ~215 kbps | 192 kbps | ≈ 13.7 MB |
| 15 min | ~143 kbps | 128 kbps | ≈ 13.7 MB |
| 30 min | ~72 kbps | 64 kbps | ≈ 13.7 MB |
| 60 min | ~36 kbps | 32 kbps | ≈ 13.7 MB |
| 90 min | ~24 kbps | 16 kbps | ≈ 10.3 MB |
Standard MP3 bitrate ladder used
The fixed set the tool snaps to. It always picks the highest value not exceeding the raw target; the floor is 8 kbps.
| kbps | Typical use | Roughly fits 16 MB up to |
|---|---|---|
| 320 / 256 | High-quality music (short clips) | ~5–7 min |
| 192 / 160 | Good music / clear voice | ~10–13 min |
| 128 / 112 | Podcast-grade | ~15–20 min |
| 96 / 80 | Speech, lecture | ~22–28 min |
| 64 / 48 | Compact speech | ~35–47 min |
| 32 / 24 / 16 / 8 | Long speech, lo-fi | ~70 min and beyond |
Input tier limits
These bound the source file; output is always ≤ 16 MB.
| Tier | Max input size | Max duration | Files at once |
|---|---|---|---|
| Free | 50 MB | 30 min | 1 |
| Pro | 200 MB | 120 min | 10 |
| Pro-media | 100 GB | Unlimited | 100 |
| Developer | 100 GB | Unlimited | Unlimited |
Cookbook
Worked examples of the 16 MB math. Each shows the raw computed bitrate, the snapped standard bitrate, and the resulting MP3 size.
10-minute clip: budget nearly filled
At 10 minutes the raw target is ~215 kbps; the tool snaps to 192 kbps, using most of the 16 MB budget while staying under.
Duration: 600 s Raw: 16*1024*1024*8*0.96 / 600 = ~215 kbps Snap: highest standard <= 215 = 192 kbps Size: 192000 * 600 / 8 / 1024 / 1024 = ~13.7 MB
Exactly at a boundary: 5-minute clip
Five minutes computes to ~429 kbps, which exceeds 320, so the 320 kbps cap applies and the file comes in around 11.4 MB.
Duration: 300 s Raw: ~429 kbps (> 320 ceiling) Snap: capped at 320 kbps Size: 320000 * 300 / 8 / 1024 / 1024 = ~11.4 MB
60-minute podcast episode
An hour drops to 32 kbps — speech-only territory but it fits 16 MB.
Duration: 3600 s Raw: ~36 kbps Snap: highest standard <= 36 = 32 kbps Size: 32000 * 3600 / 8 / 1024 / 1024 = ~13.7 MB
Why rounding down matters
If the tool used the raw 36 kbps for an hour instead of snapping to 32, MP3 framing overhead could nudge it over 16 MB. Rounding down to a real bitrate keeps a safety margin.
Raw 36 kbps * 3600 / 8 = 16.2 MB (over the cap!) Snap 32 kbps * 3600 / 8 = 14.4 MB (safe, plus the 0.96 reserve) -> the tool always uses the snapped value
Splitting a long file to keep quality
If 16 kbps on a 90-minute file is too thin, split into two 45-minute halves; each fits 16 MB at 48 kbps — three times the bitrate.
Whole: 90:00 -> 16 kbps -> 10.3 MB (lo-fi) Halves: 2 x 45:00 -> 48 kbps each -> ~15.4 MB each (clear) Split with: /audio-tools/solutions/cut-podcast-clip-browser
Edge cases and what actually happens
Computed bitrate exceeds 320 kbps
CappedFor clips under ~3.5 minutes the raw target tops 320 kbps. The tool caps at 320 because higher MP3 bitrates add size without audible benefit, so the output is comfortably under 16 MB. This is the expected ceiling, not a limitation.
Computed bitrate falls below 8 kbps
FlooredFor extremely long files the math could drop under 8 kbps; the ladder floors at 8 kbps. The output may then exceed 16 MB if the file is long enough — at that point you must split or trim. In practice 8 kbps covers roughly up to ~2.8 hours under the cap.
Output noticeably below 16 MB
ExpectedBecause the tool snaps down to a standard bitrate, the result is usually a bit under what 16 MB could theoretically hold. That margin is deliberate — it absorbs MP3 framing variance so the file reliably attaches.
You wanted a different size cap
Wrong toolThis tool is hardwired to 16 MB. For any other target (email's ~25 MB, an 8 MB ceiling, etc.) use audio-compressor; for Discord's 25 MB use discord-fit.
VBR source confuses your size expectation
By designThe output is encoded at the chosen CBR-style standard bitrate, so its size is predictable from bitrate × duration. The input's own VBR/CBR nature doesn't change the output sizing — the tool sizes by duration, not by input bitrate.
Input bigger than the tier cap
RejectedThe math is moot if the source exceeds your tier's input limit (50 MB / 30 min on Free). Trim with audio-trimmer or upgrade, then compress.
Duration reads as zero
ErrorA corrupt or non-audio file can decode to zero duration, which would make the bitrate formula divide by a near-zero value; the code clamps duration to at least 1 second, but a truly unreadable file errors out. Re-export the source.
Output format isn't what you expected
MP3 onlyRegardless of the input container, the output is MP3. There's no option to keep WAV/FLAC/Opus. If you specifically need another format at a size, convert with bitrate-changer after sizing — but for WhatsApp inline playback, MP3 is what you want.
Frequently asked questions
What's the 16 MB limit exactly?
WhatsApp won't attach an audio/document file of 16 MB or more. This tool sizes your file to land below that, computing the right MP3 bitrate from the clip's duration.
What bitrate do I need for a 16 MB MP3?
It depends entirely on length: roughly 192 kbps for 10 minutes, 64 kbps for 30 minutes, 32 kbps for an hour. The tool calculates this for you with 16 MB × 8 ÷ duration × 0.96, then snaps down to a standard bitrate.
Why does it round the bitrate down instead of using the exact number?
MP3 frames and headers add a little overhead, so using the exact theoretical bitrate could push the file just over 16 MB. Rounding down to a real standard bitrate (plus the 0.96 reserve) keeps a safety margin.
Why is my output under 16 MB rather than right at it?
The snapped bitrate is the highest standard value that still fits, which usually sits a little below the theoretical maximum. Short clips also hit the 320 kbps cap. Both keep the file safely under the limit.
Can I set the target to something other than 16 MB?
Not in this tool — it's fixed to 16 MB. Use audio-compressor for a custom target (0.5–500 MB), or discord-fit for the 25 MB Discord cap.
What does the 0.96 factor do?
It reserves about 4% of the 16 MB budget for MP3 container overhead (frame headers, padding, any tags), so the real encoded file fits inside the cap rather than the raw audio stream alone.
What's the lowest and highest bitrate it will use?
The ladder runs from 320 kbps down to 8 kbps. Short clips cap at 320; very long ones floor at 8. Between those, it picks the highest standard value that keeps the file under 16 MB.
Will it always be MP3?
Yes. There's no format option — output is MP3 (libmp3lame) because WhatsApp plays MP3 inline on every device. For another format, convert afterward with bitrate-changer.
What inputs can I use?
MP3, WAV, FLAC, M4A, OGG, Opus, and video files. For video, the audio track is extracted and sized; the picture is discarded.
Is anything uploaded to do the calculation?
No. Both the duration read and the encode happen in your browser via FFmpeg 8.1 WebAssembly. Nothing is sent to a server.
What if my hour-long file sounds bad at 32 kbps?
Split it into shorter parts so each fits 16 MB at a higher bitrate — two 45-minute halves fit at 48 kbps each. Use the cut a clip workflow or audio-trimmer.
How big can the source file be?
Up to 50 MB / 30 minutes on Free, 200 MB / 120 minutes on Pro, and up to 100 GB with no duration limit on Pro-media and Developer. The output is always ≤ 16 MB.
Privacy first
Every JAD Audio tool runs entirely in your browser via FFmpeg (WebAssembly) and RNNoise. Your audio files never leave your device — verified by zero outbound network requests during processing.