How to free wav to mp3 encoder in your browser
- Step 1Open the encoder — Load the wav-to-mp3 tool. FFmpeg's WebAssembly bundle downloads once on first use and is cached for offline use thereafter.
- Step 2Drop a WAV (or other audio) — Drag a single file in. The dropzone accepts WAV plus MP3/FLAC/M4A/OGG/Opus and video — FFmpeg decodes them all — but for a clean WAV-to-MP3 encode use a
.wav. It's read into memory locally; no upload. - Step 3Set the CBR bitrate — Choose
320k,256k,192k(default),128k, or64k. This is the encoder's-b:avalue. There's no VBR/quality (-q:a) mode exposed — the tool encodes constant bitrate. - Step 4Run the encode — The engine executes
ffmpeg -i in.wav -c:a libmp3lame -b:a <rate> -map_metadata 0 -id3v2_version 3 out.mp3in WebAssembly. CPU-bound, so time scales with duration. - Step 5Download the MP3 — Save the output. It's a standard CBR MP3 with copied metadata and re-attached cover art.
- Step 6Inspect if you like — Open the file in a media inspector to confirm encoder, bitrate, sample rate, and channels. If you need to script this repeatedly you might prefer local FFmpeg, but for one-off and ad-hoc encodes this matches its output without the install.
The exact encoder settings
What the in-browser FFmpeg runs for a WAV-to-MP3 encode. These are the real arguments; the bitrate is the only user-set value.
| Setting | Value | Meaning |
|---|---|---|
| Encoder | -c:a libmp3lame | LAME-lineage MP3 encoder in FFmpeg 8.1 |
| Bitrate mode | -b:a <rate> (CBR) | Constant bitrate; no VBR/-q:a exposed |
| Bitrate values | 64k / 128k / 192k / 256k / 320k | Default 192k; you pick from these five |
| Sample rate | Not set (source preserved) | No -ar applied unless the source dictates |
| Channels | Not set (source preserved) | No -ac applied |
| Metadata | -map_metadata 0 | Copies tags from source |
| Cover art | -map 0:v? -c:v copy -disposition:v:0 attached_pic | Re-attaches embedded artwork if present |
| ID3 version | -id3v2_version 3 | ID3v2.3 for broad player compatibility |
Encoder behavior — claims people make vs reality
Common assumptions about WAV-to-MP3 encoders, checked against what this one actually does.
| Assumption | Reality here | If you need it |
|---|---|---|
| It uses VBR V0 for best quality | No — CBR only; 320k is the top | Use 320 CBR; no VBR mode exists in this tool |
| It downsamples to 44.1 kHz | No — source sample rate is preserved | sample-rate-converter |
| It auto-normalizes loudness | No — levels are encoded as-is | loudness-normalizer |
| It strips metadata | No — tags and art are copied | Edit with id3-editor |
| It can batch a folder | No — single file per run | Local FFmpeg for scripted batches |
Cookbook
The literal FFmpeg invocations this WebAssembly encoder runs, with what each produces. Reproduce them with a local FFmpeg if you ever need to script them.
Standard 192 kbps encode (the default)
The default path: a WAV in, a 192 kbps CBR MP3 out, tags preserved. This is what runs if you don't change the bitrate.
ffmpeg -i input.wav -c:a libmp3lame -b:a 192k \ -map_metadata 0 -id3v2_version 3 input.mp3 Produces: 192 kbps CBR MP3, source sample rate/channels kept.
320 kbps with cover art passthrough
Highest CBR, with the embedded cover image re-attached. The extra video-stream mapping carries the artwork as an attached picture.
ffmpeg -i tagged.wav -c:a libmp3lame -b:a 320k \ -map_metadata 0 -map 0:a -map 0:v? -c:v copy \ -disposition:v:0 attached_pic -id3v2_version 3 tagged.mp3 Produces: 320 kbps CBR MP3 with cover.jpg embedded as ID3v2.3 APIC.
64 kbps for a voice file
Smallest output, suitable for speech. Same encoder, just a lower constant bitrate.
ffmpeg -i lecture.wav -c:a libmp3lame -b:a 64k \ -map_metadata 0 -id3v2_version 3 lecture.mp3 Produces: a ~0.47 MB-per-minute MP3 — voice-grade.
Verify the output's real properties
After encoding, inspect the file to confirm it's genuinely the bitrate and encoder you expect — handy when integrating into a pipeline or QA-checking output.
ffprobe -v error -show_entries \
stream=codec_name,bit_rate,sample_rate,channels output.mp3
Expect: codec_name=mp3, bit_rate~=192000 (for 192k),
sample_rate + channels matching the source WAV.Why not pre-process in the same step?
This tool does exactly one thing — encode. If you want normalize-then-encode or trim-then-encode, chain the sibling tools first. Keeping each step single-purpose makes the output predictable.
Pipeline (run each tool in turn): 1. silence-stripper (/audio-tools/silence-stripper) 2. loudness-normalizer (/audio-tools/loudness-normalizer) 3. wav-to-mp3 @ chosen bitrate (this tool) Each step's output WAV feeds the next; final step encodes MP3.
Edge cases and what actually happens
Looking for a -q:a / VBR quality setting
By designThe encoder runs CBR via -b:a. There is no -q:a VBR control surfaced — the only choice is the constant bitrate. This keeps output size predictable and is the most compatible MP3 form. For VBR you'd run a local FFmpeg with -q:a.
Want to batch-encode a folder
Not supportedThe WAV-to-MP3 page is single-file. For scripted batch encoding, install FFmpeg locally and loop the same -c:a libmp3lame -b:a <rate> command. Pro tiers raise batch limits on other audio tools, but this page processes one file per run.
Source isn't a WAV
SupportedFFmpeg decodes MP3/FLAC/M4A/OGG/Opus/video too, so the encoder will accept them — but for a true 'encode' rather than a transcode, use the matching tool: flac-to-mp3, m4a-to-mp3, ogg-to-mp3, or opus-to-mp3.
Expected the encoder to fix peaks or clipping
By designlibmp3lame encodes the samples as given; it doesn't limit or normalize. A WAV that clips will encode a clipped MP3. Pre-process with true-peak-limiter or loudness-normalizer if you need clean peaks.
Sample rate preserved when you expected 44.1 kHz
ExpectedNo -ar is applied, so a 48 kHz or 96 kHz WAV encodes to that same rate. If a target system requires 44.1 kHz, resample with sample-rate-converter before encoding.
Input over the tier size/duration limit
BlockedFree 50 MB / 30 min, Pro 200 MB / 120 min, Pro-media/Developer 100 GB / unlimited. The encoder won't accept a file beyond the cap. Split or upgrade. Both byte size and duration are enforced.
Engine fails to initialize
Load errorFFmpeg's WebAssembly module must download (first use) and instantiate. A blocked CDN, no network before caching, or a very old browser without WebAssembly support will prevent it. Use a current browser and reconnect; after first load it's cached.
Output won't open in a vintage hardware player
Edge compatibilityID3v2.3 and CBR maximize compatibility, but a non-standard source sample rate (e.g. 96 kHz preserved into the MP3) can confuse old hardware. Resample to 44.1 kHz first for the broadest device support.
Tag encoding looks garbled in an old player
PreservedTags are copied as written and stored ID3v2.3. Garbling is usually the source WAV's tag encoding, not the encode. Re-write clean tags with id3-editor after encoding.
Decode error on a malformed WAV
Decode errorFFmpeg needs a valid RIFF/WAVE header. A truncated or corrupt WAV may fail to decode or yield a short/silent MP3. Re-export the WAV from the source application.
Frequently asked questions
Which encoder does this actually use?
FFmpeg 8.1's libmp3lame — the LAME-lineage MP3 encoder, the long-standing quality benchmark — compiled to WebAssembly and run in your browser. The command is -c:a libmp3lame -b:a <rate>.
Is it real FFmpeg or an approximation?
It's FFmpeg itself, compiled to WebAssembly. The same binary logic that runs on a desktop runs in the tab. Output is what local FFmpeg would produce for the same libmp3lame -b:a arguments.
Can I set VBR or a -q:a quality level?
No. The tool exposes constant bitrate only, via the five -b:a values (64k-320k). There's no -q:a/VBR control in the UI. For VBR encoding you'd run FFmpeg locally with -q:a.
Does it resample or change channels?
No. No -ar or -ac is applied — source sample rate and channel layout pass through. The MP3 has the same sample rate and channel count as the WAV. Use sample-rate-converter to change rate.
Are tags and album art handled correctly?
Yes. -map_metadata 0 copies tags, embedded artwork is re-attached as attached_pic, and the file is written ID3v2.3 for compatibility. Edit afterward with id3-editor.
Why use this instead of installing FFmpeg?
For one-off or occasional encodes, there's nothing to install, learn, or update, and your file never leaves the browser. If you need scripted batch processing or VBR/advanced flags, local FFmpeg is the better fit — this tool covers the common WAV-to-MP3 case.
Does anything get uploaded?
No. The WAV is processed entirely in-browser by the WebAssembly engine. Nothing is sent to a server — useful for confidential recordings.
What bitrates can I choose?
320, 256, 192 (default), 128, and 64 kbps — all constant bitrate. Pick by use: 320 for music, 192 general, 128 podcast, 64 voice. There's no custom intermediate value.
Can I batch many WAVs at once?
Not on this page — it's single-file per run. For batch work, a local FFmpeg loop is the right tool. The tool focuses on a clean single-file encode.
Does it work offline?
After the first load, yes. The WebAssembly engine caches in the browser, so subsequent encodes run with no network. The first encode needs a connection to fetch the engine.
How can I verify the output bitrate and encoder?
Run ffprobe (or open the file in a media inspector). For a 192k request you'll see mp3, bit_rate around 192000, and sample_rate/channels matching the source. The engine issues an explicit -b:a so the encode is genuinely constant bitrate.
Will it clip or distort my audio?
Only if the source already clips — the encoder doesn't limit or normalize. For clean peaks, pre-process with true-peak-limiter before encoding. libmp3lame faithfully encodes whatever samples it receives.
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.