Audio Compressor: Reduce Audio File Size Free Online

📄 File and Document Free Forever

Free Audio Compressor

Shrink MP3, WAV, and other audio files down to a target size or bitrate without leaving your browser. Includes loudness normalization so quieter tracks still sound full after compression.

Upload Audio File
🎵

Click or drop an audio file (MP3, WAV, FLAC, OGG, M4A)

Compression Settings
Upload an audio file to get started.
About This Tool

How this audio compressor shrinks files without leaving your browser

This tool does not simply strip metadata or trim silence. It reencodes your audio at a lower bitrate using a real build of FFmpeg compiled to WebAssembly, the same encoder used by desktop software, running inside a Web Worker in your browser tab. Nothing is uploaded. The file never leaves your machine, because there is no server call in the code at all, only a fetch to a CDN for the encoder engine itself the first time you use the tool.

The compression pipeline

Every compression job runs through the same four stages, visible directly in the tool’s source.

Step 1 Load the engine On first use, the tool fetches ffmpeg-core.js and ffmpeg-core.wasm from unpkg as blobs and hands them to ffmpeg.wasm’s load() call. This download is roughly 30MB and is cached by the browser for the rest of the session.
Step 2 Write the file into virtual storage Your local File object is read with FFmpeg’s fetchFile() helper and written into ffmpeg.wasm’s in-memory virtual filesystem under a name like input.mp3. This happens entirely in RAM, nothing touches disk or network.
Step 3 Run the real FFmpeg command The tool builds an argument array exactly like the FFmpeg command line: -acodec libmp3lame -b:a 128k and so on, then calls ffmpeg.exec(). Progress events stream back and drive the progress bar.
Step 4 Read back the result The encoded output is read from virtual storage with readFile(), wrapped in a Blob, and compared byte for byte against the original upload to compute the percentage saved.
// simplified from the tool source var args = [‘-i’, inName]; if (normalize) args.push(‘-af’, ‘loudnorm=I=-16:TP=-1.5:LRA=11’); args.push(‘-vn’, ‘-acodec’, fmt.codec, ‘-b:a’, bitrate, outName); await ffmpeg.exec(args);

The optional loudness normalization filter runs the EBU R128 loudnorm filter targeting minus 16 LUFS integrated loudness, minus 1.5 dB true peak, and 11 LU loudness range, the same defaults used by streaming platform normalization. It levels out quiet and loud passages before the bitrate reduction, which matters because a heavily compressed low bitrate file preserves perceived loudness worse than a normalized one.

Bitrate presets and what they actually do

Lowering the bitrate means the encoder allocates fewer bits per second of audio, which forces it to discard more of the signal. Below is what each preset maps to in the code.

PresetBitrateTypical result
Small file64 kbpsNoticeable quality loss, best for spoken word
Balanced128 kbpsCommon streaming quality, acceptable for most music
High quality192 kbpsClose to source for most listeners
CustomAny value you typePassed straight through as -b:a
Why the worker loading logic looks unusual in the code. A comment in the source explains a real cross-origin bug: ffmpeg.wasm normally builds a plain Worker straight from the unpkg.com core script URL, which a different-origin browser tab refuses to construct. Fetching that worker script as a same-origin blob and passing it via classWorkerURL fixes the origin error, but it also switches ffmpeg.wasm to a module Worker, which has no importScripts(), so the core script it loads has to be the ESM build instead of the UMD build or initialization silently fails. Both changes had to ship together.

Output formats supported

The encoder targets four lossy codecs, each mapped to a real FFmpeg codec name in the source.

MP3

Encoded with libmp3lame, the LAME encoder, into an MPEG-1/2 Audio Layer III stream. The most broadly compatible option.

AAC (.m4a)

Encoded with FFmpeg’s native aac encoder into an MPEG-4 audio container, generally more efficient per bit than MP3 at the same bitrate.

Ogg Vorbis

Encoded with libvorbis into an Ogg container, a royalty-free codec favored by open source projects.

Opus

Encoded with libopus, the modern low-latency codec defined in RFC 6716, generally the best quality per kilobit of this group.

64 / 128 / 192 kbps presets Custom bitrate input EBU R128 loudness normalization Client-side FFmpeg via WebAssembly

Codec references

  • FFmpeg documentation covers every flag this tool passes through, including -b:a and the loudnorm filter.
  • ffmpeg.wasm is the WebAssembly port used here, compiled from the real FFmpeg C source.
  • RFC 6716 defines the Opus codec used by the opus output option.
  • EBU R128 is the loudness recommendation behind the normalize checkbox’s minus 16 LUFS target.
  • MDN WebAssembly guide explains the runtime this encoder executes in.

When smaller audio actually matters

Shrinking podcast episodes before hosting, fitting voice memos under email attachment limits, preparing narration tracks for video editors with strict upload caps, reducing music library size before syncing to a phone with limited storage, and compressing field recordings before sending them over a slow connection. Because the encoding happens locally, none of that audio, which may include unreleased material or private recordings, ever passes through a server.

Common Questions

FAQ: Free Audio Compressor

It depends on the original bitrate and your chosen target. Dropping from an uncompressed WAV to 128 kbps MP3 often shrinks a file by eighty to ninety percent, while dropping from 320 to 128 kbps typically saves around sixty percent. The result card shows the exact before and after size once compression finishes.

Small file encodes at 64 kbps for the smallest possible size, Balanced at 128 kbps suits most everyday listening, and High quality at 192 kbps keeps more detail for music. Choose Custom bitrate if you want to set an exact value anywhere from 16 to 320 kbps yourself.

Loudness normalization brings the perceived volume of your audio up to a broadcast standard level, EBU R128, so it does not sound noticeably quieter than other tracks. Turn it on for recordings that were captured at low volume or that vary a lot in loudness from section to section.

MP3 offers the widest compatibility across devices and players. OGG Vorbis generally sounds better at very low bitrates but has less universal support. AAC balances quality and file size well and is the standard format for Apple devices.

No. Compression runs through a WebAssembly build of FFmpeg loaded directly into your browser tab. Your file is processed on your own device and never transmitted anywhere.

Privacy Overview

Cookies let this site remember your preferences and show us which tools people actually use. Full detail sits in our Privacy Policy.