How to compress a voice clip to fit discord's upload limit
- Step 1Open discord-fit — Go to /audio-tools/discord-fit. The FFmpeg WebAssembly engine loads in the page; nothing is sent anywhere.
- Step 2Drop the voice clip — Drag in one recording — M4A, OGG, Opus, WAV, FLAC, or MP3. Single file per run. On free, the clip must be under 50 MB and 30 minutes.
- Step 3It reads the length — No options appear — there's nothing to configure. The tool decodes the clip's duration, which is the only value the bitrate math needs.
- Step 4Run it — Click to process. FFmpeg re-encodes the speech to MP3 at the computed bitrate. A 30-minute clip typically finishes in well under a minute.
- Step 5Confirm it fits — The result panel shows input vs output size. A long voice clip lands near (just under) 25 MB; a short one lands far below. The filename gets a
-25mbsuffix. - Step 6Attach to Discord — Download the MP3 and attach it to your message. It plays inline. No 'file too large' rejection, no Nitro required.
Voice-clip length → bitrate the tool picks (25 MB target)
For speech, the low bitrates a long clip forces are perfectly acceptable. The tool snaps DOWN to a standard rate so the result stays under 25 MB.
| Voice clip length | Standard rate picked | Approx output size | Speech quality |
|---|---|---|---|
| 5 min | 320 kbps (capped) | ~11.4 MB | Studio-clean |
| 15 min | 192 kbps | ~20.6 MB | Excellent |
| 20 min | 160 kbps | ~22.9 MB | Excellent |
| 25 min | 128 kbps | ~22.9 MB | Very good |
| 30 min | 96 kbps | ~20.6 MB | Clear speech |
| 60 min (Pro) | 48 kbps | ~20.6 MB | Intelligible |
What discord-fit does NOT do to a voice clip
It only re-sizes — it does not edit, clean, or trim. Use these siblings for those steps before or after.
| If you also want to… | discord-fit? | Use instead |
|---|---|---|
| Cut silence/dead air to shrink it | No | silence-stripper |
| Trim the start/end | No | audio-trimmer |
| Remove background hiss/noise | No | ai-noise-reducer |
| Even out quiet/loud speech | No | speech-leveler |
| Set an exact bitrate or format | No | bitrate-changer |
Tier limits (file size AND duration)
Both caps apply per file. A long voice clip can be under the size limit but over the duration limit on free.
| Tier | Max file size | Max duration | Files per run |
|---|---|---|---|
| Free | 50 MB | 30 min | 1 |
| Pro | 200 MB | 120 min | 10 |
| Pro-media | 100 GB | unlimited | 100 |
| Developer | 100 GB | unlimited | unlimited |
Cookbook
Common voice-clip scenarios and the exact size the tool produces, computed from its duration→bitrate logic.
40-minute call recording (over the free cap)
A long call recorded as M4A is well over 25 MB. The tool sizes it to fit — but note 40 minutes exceeds the free 30-minute duration limit, so this needs Pro.
Input: client-call.m4a 40 min 46 MB (AAC 160 kbps) Free tier: blocked (over 30 min) -> upgrade to Pro discord-fit (Pro, automatic): duration = 2400 s -> wants ~84 kbps -> snaps DOWN to 80 kbps Output: client-call-25mb.mp3 40 min ~22.9 MB (MP3 80 kbps) Speech stays fully intelligible.
20-minute narration that just won't attach
A screen-share narration recorded at a high bitrate exceeds 25 MB. The tool drops it to a speech-friendly rate.
Input: walkthrough.mp3 20 min 38 MB (256 kbps) Discord: rejected (over 25 MB) discord-fit (automatic): duration = 1200 s -> wants ~168 kbps -> snaps DOWN to 160 kbps Output: walkthrough-25mb.mp3 20 min ~22.9 MB (MP3 160 kbps)
Short voice memo stays tiny
A 3-minute voice note is already small; re-encoding caps at 320 kbps so it comes out a few MB, not padded to 25.
Input: reminder.m4a 3 min 3.1 MB discord-fit (automatic): duration = 180 s -> wants high bitrate -> capped at 320 kbps Output: reminder-25mb.mp3 3 min ~6.9 MB (MP3 320 kbps) If it already fit 25 MB, you didn't need to compress it.
OGG/Opus from a web recorder
Browser voice recorders often save OGG/Opus. The tool decodes it and returns a Discord-inline MP3.
Input: web-recording.ogg 28 min 24 MB... but actually 27 MB discord-fit (automatic): duration = 1680 s -> wants ~120 kbps -> snaps DOWN to 112 kbps Output: web-recording-25mb.mp3 28 min ~22.4 MB (MP3 112 kbps)
Trim silence first to keep quality higher
If your recording has long gaps, cutting them before sizing means a shorter clip — which lets the tool pick a higher bitrate for the same 25 MB.
Step 1 silence-stripper: 30-min recording -> 22 min (8 min of
gaps removed)
Step 2 discord-fit on the 22-min clip:
wants ~152 kbps -> snaps DOWN to 128 kbps (vs 96 kbps for 30 min)
Result: clearer speech at the same 25 MB budget.Edge cases and what actually happens
Voice clip over 30 minutes on free
Blocked on freeThe free tier caps duration at 30 minutes (and size at 50 MB). A 40-minute call won't process on free even if it's under 50 MB. Pro raises duration to 120 min. Or remove dead air first with silence-stripper to get under 30 minutes.
Discord's voice-message feature has its own length cap
Separate limitDiscord's native push-to-record voice messages have a built-in length limit independent of file size. discord-fit produces a regular MP3 file you attach as an upload, not a native voice message — so it's bound by the 25 MB attachment cap, not Discord's voice-message recorder cap.
Output much smaller than 25 MB for a short clip
By designClips under ~10 minutes cap at 320 kbps because MP3 can't go higher, so they land well under 25 MB. The tool never inflates a clip to fill the cap — a short voice note stays a few MB.
Low bitrate on a very long clip
Expected for speechA 60-minute clip only fits 25 MB at ~48 kbps. That's low for music but fine for mono speech. If the dialogue sounds muddy, the clip is probably too long for one 25 MB file — split it with audio-splitter and post in parts.
You wanted to keep it as Opus
Not supportedOpus is excellent for speech, but discord-fit always outputs MP3 (no codec option). MP3 plays inline on Discord too. If you specifically need Opus output, run the result through bitrate-changer.
Background noise wastes bitrate
Pre-clean firstHiss and room tone are random and compress badly, so noisy recordings sound worse at a given bitrate. Run ai-noise-reducer (RNNoise speech model) before discord-fit so the bitrate budget goes to the voice, not the noise.
Re-encoding an already-lossy clip
Generation lossPhone memos (AAC) and web recordings (Opus) are already lossy; re-encoding to MP3 adds a second pass. For speech the audible impact is small, but feeding a WAV original when you have one avoids the extra generation entirely.
Multiple clips at once
Single file onlydiscord-fit handles one clip per run. Process call recordings one at a time. Each is sized to 25 MB independently of the others.
Stereo voice recording
PreservedThe tool transcodes without forcing mono, so a stereo voice recording stays stereo at the computed bitrate. For maximum speech clarity at very low bitrates you'd want mono, but discord-fit doesn't change channel count — use channel-splitter or a mono workflow beforehand if needed.
Zero-length or unreadable recording
Decode errorA truncated or corrupt voice file may fail to decode in FFmpeg and surface an error instead of an output. Re-export the recording from the source app and try again.
Frequently asked questions
What's the size limit for a voice clip on Discord?
25 MB per attachment on the free tier — the same as any file. Discord's native voice-message recorder also has a length cap, but a clip you record elsewhere and upload as a file is governed by the 25 MB attachment limit, which is what this tool targets.
Will a long call still sound okay after compression?
For speech, yes. A 30-minute clip fits 25 MB at about 96 kbps and a 60-minute clip at about 48 kbps — both are clearly intelligible because voice occupies a narrow frequency range. Quality only becomes an issue for music at those lengths.
Do I pick a bitrate or quality level?
No — there are no settings. The tool derives the bitrate from the clip's duration so it fits 25 MB, then snaps down to a standard MP3 rate. You only drop the clip and download the result.
Can I shrink the clip more by cutting silence?
Yes, and it's a good idea. Run silence-stripper first to remove dead air — a shorter clip lets discord-fit pick a higher bitrate for the same 25 MB, so the speech sounds better.
What about phone voice memos (M4A)?
Fully supported. iPhone Voice Memos export M4A/AAC; the tool decodes them and returns a Discord-inline MP3 sized to fit 25 MB. Android recordings (M4A, OGG, Opus) work too.
Is my recording uploaded to a server?
No. Compression runs entirely in your browser via FFmpeg WebAssembly. A private call or interview never leaves your device — there's no server upload at any point.
Why is my short voice note not exactly 25 MB?
MP3 caps at 320 kbps, so short clips that would 'want' a higher bitrate just come out smaller than 25 MB. The tool sizes to fit the cap, it doesn't pad files up to it. A 3-minute note lands around 7 MB.
Can I process a clip longer than 30 minutes?
On the free tier the duration cap is 30 minutes. For longer recordings, upgrade to Pro (120 min) or split the clip with audio-splitter and fit each segment separately.
Will the recipient be able to scrub through it?
Yes. The output is a standard MP3, which Discord renders with an inline audio player and scrubber — recipients can jump to any point in the call without downloading it first.
Should I remove noise before compressing?
If the recording is noisy, yes. Noise compresses poorly and eats bitrate. Run ai-noise-reducer (an RNNoise speech neural net) first so the limited bitrate goes to the voice.
How is this different from audio-compressor?
audio-compressor lets you type any target size and pick a format — it's the manual version. discord-fit hard-codes the 25 MB Discord cap and MP3 output so a voice clip is one drop-and-go step.
Can my Discord bot play the resulting clip?
Yes. The MP3 output streams fine through discord.js (@discordjs/voice) and Discord.py, which convert it to Discord's internal Opus automatically. No extra conversion needed.
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.