General audio compression
Audio compressor
Pick a target format and bitrate — or a target size in megabytes — and each file is re-encoded to fit. Lossy targets discard audio; FLAC gives lossless savings from uncompressed sources only.
…or drag files and folders here. Add as many as you like — everything is processed on this device.
.3g2 .3gp .aac .aif .aifc .aiff .amr .caf .flac .m4a .m4r .m4v .mkv .mov .mp3 .mp4 .oga .ogg .opus .qt .wav .wave .weba .webm
In one paragraph
This is the general-purpose entry point when you have a mixed folder: some WAVs from a recorder, some MP3s someone emailed, a couple of M4A voice memos, all of them too big for whatever you are about to do with them. It accepts everything the engine can read and lets you send them all to one target format with one set of rules.
File-size reduction is arithmetic, not magic: output size is roughly bitrate × duration ÷ 8. That means the honest way to present a compressor is to show the estimate before you commit and the achieved result afterwards, which is what this page does — including when target-size mode cannot hit your number exactly.
Does this change the audio quality?
Compressing a file that is already lossy costs a second generation of quality. Compressing WAV, AIFF or FLAC to a lossy format is first-generation and much kinder. The page shows which case each file is in.
- “Unlimited” file sizes do not exist in a browser tab. The enforced budgets are 400 MB per file and 4 GB per batch, and files are rejected before decoding rather than crashing halfway.
- Compressing an already-compressed file at a higher bitrate makes it bigger without improving it. The page warns when your target exceeds the source bitrate.
- Target-size mode makes at most five encode attempts and then reports what it actually achieved.
A worked example
A mixed folder of recordings for a shared drive with a quota
- Drop the whole folder in. Each file shows its detected format, duration and current bitrate.
- Choose Opus at 64 kbps for the speech files and MP3 at 192 kbps for the music — set the majority with Apply to all, then override the exceptions per file.
- Watch the aggregate estimate at the top of the queue: it totals the projected output size before you start.
- Convert all, then download the ZIP with its manifest of before-and-after sizes.
Choose the codec first, the bitrate second
The codec choice matters more than the number. Opus at 64 kbps beats MP3 at 128 kbps for speech and is half the size — if your playback supports it, it is the single biggest saving available. MP3 at 160–192 kbps is the compatibility choice for music. FLAC is the right answer whenever the source is uncompressed and you want to keep every sample. Only use WAV as an output when a downstream tool demands PCM.
Supported formats, limits and browser notes
Sonic Batch decodes with the browser when it can (faster, no engine download) and falls back to the self-hosted WebAssembly engine when it cannot. Every combination below works in every listed browser; the column only tells you which decoder does the work.
| Input | What it is | Chrome | Firefox | Safari | iOS |
|---|---|---|---|---|---|
| MP3 | The universal lossy format. Plays on essentially every device made since 1998. | Native | Native | Native | Native |
| WAV | Raw PCM samples with a small header. Perfect fidelity, roughly 10 MB per stereo minute. | Native | Native | Native | Native |
| M4A | Apple’s default AAC container. Better quality than MP3 at the same bitrate. | Native | Native | Native | Native |
| AAC | Bare AAC frames with no MP4 wrapper — used by broadcast streams and some hardware. | Native | Partial | Native | Native |
| OGG | Royalty-free lossy codec. Standard in game engines, Godot, Unity and Wikimedia. | Native | Native | Engine | Engine |
| Opus | The best-sounding lossy codec below 128 kbps. Used by WhatsApp, Discord and YouTube. | Native | Native | Partial | Partial |
| FLAC | Lossless compression, typically 50–60% of WAV size, bit-identical when decoded. | Native | Native | Native | Native |
| AIFF | Apple’s uncompressed PCM format — the WAV equivalent for Logic and Pro Tools. | Partial | Partial | Native | Native |
| M4R | An M4A file with a .m4r extension. iOS only lists it as a ringtone if it is ≤ 40 seconds. | Partial | Partial | Native | Native |
| AMR | Phone-call speech codec: 8 kHz mono, 4.75–12.2 kbps. Decode only — nothing should be created in it. | Engine | Engine | Engine | Engine |
| CAF | Apple container used by older iOS Voice Memos. Usually holds ALAC, IMA4 or raw PCM. | Engine | Engine | Partial | Partial |
| 3GP | Legacy phone recording container, normally AMR-NB or low-bitrate AAC audio. | Engine | Engine | Partial | Partial |
| MOV | QuickTime video from iPhone and DSLR cameras. Audio is normally AAC or PCM. | Partial | Engine | Native | Native |
| MP4 | The standard video container. Its audio track is almost always AAC. | Native | Partial | Native | Native |
| WebM | Open container used by browser recorders and YouTube downloads. Audio is Opus or Vorbis. | Native | Native | Partial | Partial |
| Output | Encoder | Bitrates / depth | Sample rates | Tags |
|---|---|---|---|---|
| MP3 | libmp3lame | 32–320 kbps | 8–48 kHz | Yes + artwork |
| Opus | libopus | 16–256 kbps | 8–48 kHz | Yes |
| M4A | aac | 32–320 kbps | 8–48 kHz | Yes + artwork |
| AAC | aac | 32–320 kbps | 8–48 kHz | No |
| OGG | libvorbis | 32–320 kbps | 8–96 kHz | Yes |
| FLAC | flac | 16, 24-bit | 8–96 kHz | Yes + artwork |
| WAV | pcm_s16le | 16, 24, 32-bit | 8–96 kHz | Yes |
- Max per file
- 400.0 MB
- Max per queue
- 4.00 GB
- Max duration
- 4:00:00
- Max archive
- 1.50 GB
These are enforced ceilings, checked before any decoding starts, not measured maximums — a file over the limit is rejected rather than allowed to exhaust the tab’s memory. Real-world capacity is lower on older phones, which is why the scheduler runs one file at a time on iOS and Safari.
Where your audio goes
Nowhere. Your file is read from disk into this browser tab with the File API, decoded and encoded by code running in that same tab, and handed back to you as a download. It is never transmitted.
That is a structural property of the application, not a policy promise: there are no API routes, no server actions and no third-party processing services in this project, so there is nothing capable of receiving a file. The page’s Content-Security-Policy also restricts connections to this origin, and the automated test suite includes a browser test that fails if any network request during import, preview, conversion or download carries media bytes.
The trade-off, stated plainly:results live in your tab’s memory until you download them. Closing or reloading the page discards them. There is nothing on a server to recover, because nothing was ever put there.
Troubleshooting
One file in my batch failed while the rest worked.
Mixed folders often contain a file with an unusual codec or a truncated download. The per-file error names the cause, and Retry failed re-runs only those items.
The queue slowed down or the tab became unresponsive.
The scheduler picks a concurrency level from your device’s CPU and memory, but a folder of very long files can still be heavy. Lower the concurrency in the batch toolbar, or use the pause-before-next-file control.
My estimate and the actual size disagree.
VBR encoders vary with content, so the estimate is approximate for quality-mode encodes. It is accurate to within a few percent for constant-bitrate targets.
Frequently asked questions
What is the best format for the smallest audio files?
Opus, by a wide margin, particularly for speech. It produces usable results at bitrates where MP3 is unintelligible. The trade-off is that older hardware cannot play it.
Can I compress audio without any quality loss?
Only from an uncompressed source, using FLAC. An MP3 or AAC file cannot be made smaller losslessly.
How many files can I compress at once?
The queue is limited by memory rather than a fixed count — the enforced budget is 400 MB per file and 4 GB per batch. Several hundred small files is routine.
Is anything uploaded?
No. All decoding and encoding happens in your browser tab. There is no server-side processing in this application.