How to convert opus audio to mp3 — in your browser
- Step 1Open the Opus to MP3 converter — This is the
opus-to-mp3tool. It works on any browser with WebAssembly (every current Chrome, Edge, Firefox, Safari). Nothing to install. - Step 2Drop your Opus file — Drag a
.opus,.ogg, or.webmfile onto the dropzone, or click to browse. The file is read into memory locally — there is no upload step. - Step 3Wait for the engine on first use — On the first conversion of a session FFmpeg 8.1 loads into the tab. After that it's instant. This is a one-time local cost, not an upload.
- Step 4Pick the MP3 bitrate — Choose from 320k · best, 256k, 192k · default, 128k · podcast, or 64k · voice. Match it to the content: speech → 64–128k, music → 192–320k.
- Step 5Convert — Run it. FFmpeg executes
-c:a libmp3lame -b:a <bitrate> -map_metadata 0 -id3v2_version 3and produces an MP3 in the same tab. - Step 6Download the MP3 — Save the result. The input/output byte stats appear before download so you can confirm the size. Your source file is unchanged and was never sent anywhere.
What this converter does and doesn't control
The opus-to-mp3 path exposes exactly one option. Other transforms live in dedicated sibling tools — don't expect controls this tool doesn't have.
| Capability | In this tool? | Where instead |
|---|---|---|
| Set MP3 bitrate (64–320 kbps) | Yes — the only control | — |
| Choose output format other than MP3 | No — output is always MP3 | Use ogg-to-mp3 / m4a-to-mp3 etc. by source, or another converter for non-MP3 targets |
| Resample (change sample rate) | No | sample-rate-converter |
| Down/up-mix channels | No | channel-splitter / mono-to-stereo |
| Trim or split the audio | No | audio-trimmer / audio-splitter |
| Target an exact file size | No (bitrate only) | audio-compressor / discord-fit / whatsapp-fit |
Opus source containers and how they're handled
Opus is a codec; it ships inside several containers. FFmpeg demuxes by content, so any of these route through the same decode path.
| Extension | Container | Typical origin | Result |
|---|---|---|---|
| .opus | Ogg (Opus) | Voice apps, ffmpeg/opusenc exports | MP3 |
| .ogg | Ogg (Opus or Vorbis) | Re-wrapped voice files, some recorders | MP3 (Opus decoded; Vorbis-in-Ogg also decodes) |
| .webm | WebM (Opus) | Browser MediaRecorder, WhatsApp Web | MP3 |
| .oga | Ogg audio | Ogg-audio convention | MP3 (FFmpeg reads the stream) |
| .m4a | MP4 (AAC, not Opus) | Apple Voice Memos | Use m4a-to-mp3 — that's the correct slug for AAC |
Bitrate vs content type
Opus is lossy, so the source already capped the achievable quality. Choose the MP3 bitrate by what's in the file, not by 'higher is better'.
| Content | Recommended bitrate | Why |
|---|---|---|
| Voice / speech (Opus 24–48 kbps) | 64–128 kbps | Transparent; larger files gain nothing |
| Podcast / talk + light music | 128 kbps | Safe, small, no audible loss |
| Music (Opus 96–160 kbps) | 192–256 kbps | Preserves the music detail Opus kept |
| Archive of a high-rate Opus file | 320 kbps | Maximum headroom; biggest file |
Cookbook
Command-level conversions for common Opus sources. The FFmpeg line is exactly what the tool builds; only the bitrate flag changes between presets.
A music Opus file from a download
Some music sites and YouTube audio streams hand you Opus at ~160 kbps. For music you want to keep the detail Opus retained, so use 256 kbps MP3.
Input: track.opus (160 kbps Opus, stereo, 3:42) Bitrate: 256k FFmpeg: -i in.opus -c:a libmp3lame -b:a 256k -map_metadata 0 -id3v2_version 3 out.mp3 Output: track.mp3 (256 kbps MP3, ~6.8 MB) — tags carried over.
MediaRecorder .webm clip from a web app
Browser MediaRecorder commonly emits Opus-in-WebM. This tool reads the WebM container and decodes the Opus directly — no need to rename or pre-convert.
Input: recording.webm (Opus-in-WebM, mono, 0:48) Bitrate: 128k Output: recording.mp3 (128 kbps, ~720 KB) Note: the .webm extension routes the file; FFmpeg picks the demuxer from content.
Batch of voice clips on Pro
The free tier is one file per run; Pro allows 10 files per run, useful for a folder of exported Opus voice clips. Same bitrate applies to all in a run.
Pro tier: 10 files per run, 200 MB / 120 min each Drop 10 .opus clips, bitrate 64k · voice → 10 MP3s, each ~half the time of the source to encode.
Vorbis-in-Ogg mislabelled .ogg
Not every .ogg is Opus — some are Vorbis. FFmpeg decodes Vorbis too, so the conversion still succeeds; the output is MP3 either way.
Input: audio.ogg (Vorbis-in-Ogg, stereo) Bitrate: 192k · default Output: audio.mp3 — FFmpeg auto-detects Vorbis and decodes it. → this tool isn't Opus-only; it handles whatever Ogg-wrapped codec it finds.
Choosing default 192k when unsure
If you don't know the source bitrate, 192k · default is a safe choice — it's loss-free relative to any realistic Opus source and avoids the wasted size of 320k.
Input: unknown.opus (bitrate not shown) Bitrate: 192k · default Output: unknown.mp3 — no quality risk; if it turns out to be a 32 kbps voice note, drop to 64k next time to save space.
Edge cases and what actually happens
Output is always MP3 regardless of need
By designThis slug's output format is fixed to MP3 (libmp3lame). There is no format selector on the opus-to-mp3 path. If you actually want WAV or FLAC out, pick a converter targeting that format; if your source isn't Opus, use the converter named for your source codec.
.ogg contains Vorbis, not Opus
SupportedFFmpeg reads the codec from the stream, so a Vorbis-in-Ogg file decodes and converts to MP3 fine even though this page is about Opus. The tool isn't restricted to Opus-only input.
File over 50 MB on the free tier
Reject (free)Free caps at 50 MB per file. Long music Opus or stitched recordings can exceed it. Pro raises to 200 MB; Pro + Media to 100 GB. The duration cap (30 min free / 120 min Pro / unlimited Pro + Media) is enforced separately.
Trying to set a sample rate or channel count
Not availableThe opus-to-mp3 path has no sample-rate or channel control — only bitrate. The MP3 keeps the source's rate and channels. For resampling use sample-rate-converter; for channel changes use channel-splitter or mono-to-stereo.
Cover art embedded in the Opus file
PreservedIf the source carries an attached picture, -map 0:v? -c:v copy -disposition:v:0 attached_pic re-attaches it to the MP3 and -map_metadata 0 copies the tags. Nothing is dropped.
Bumping bitrate to recover lost quality
No effectOpus already discarded detail above its perceptual ceiling. Encoding the MP3 at 320k can't restore it — you just get a larger file. Match the bitrate to the content (voice → 64–128k, music → 192–256k).
Corrupt or zero-byte input
Decode errorIf the file has no valid Opus/Ogg/WebM stream (truncated download, empty file), FFmpeg returns a demux/decode error rather than an empty MP3. Re-download or re-export the source.
WASM not available in a very old browser
Unsupported browserThe engine requires WebAssembly. Every current Chrome, Edge, Firefox, and Safari supports it; a very old or locked-down browser without WASM can't run the converter. Update the browser.
Multi-thread acceleration not kicking in
Expected fallbackMulti-threaded SIMD needs cross-origin isolation (COOP/COEP headers). Where that's unavailable the engine falls back to the single-thread core — slower on long files, identical output. Short files are unaffected.
Frequently asked questions
Do I need to install anything?
No. The converter is FFmpeg 8.1 compiled to WebAssembly running inside the browser tab. There's no desktop app, no plugin, and no command line. It works in any current Chrome, Edge, Firefox, or Safari.
Is the file uploaded to a server?
No. The Opus is decoded and re-encoded to MP3 entirely on your CPU, in the page. The file never leaves your device, which is the whole point of doing it in-browser.
What input files does it accept?
Opus inside any common container: .opus, .ogg, and .webm. FFmpeg demuxes by file content, so the extension just routes the file. It will also decode Vorbis-in-Ogg if that's what the file actually is.
Why is the output always MP3?
This is the Opus-to-MP3 path, so MP3 is the fixed target (libmp3lame). The only knob is the bitrate. For other output formats use a converter aimed at that format; for non-Opus sources use the converter named for your source codec.
What bitrate should I choose?
Match it to the content. Speech: 64–128 kbps. Podcast/talk: 128 kbps. Music: 192–256 kbps. Archive: 320 kbps. The 192k default is loss-free relative to any realistic Opus source if you're unsure.
Can it change the sample rate or channels?
Not on this path — there's no sample-rate or channel control here. The MP3 keeps the source rate and channel layout. Use sample-rate-converter or channel-splitter / mono-to-stereo for those.
Does it keep the artist/title tags?
Yes. -map_metadata 0 copies the source metadata into the MP3, and tags are written as ID3v2.3 for broad player compatibility. Embedded cover art is re-attached too.
How big a file can I convert?
Free: 50 MB and 30 minutes. Pro: 200 MB, 120 minutes, 10 files per run. Pro + Media: 100 GB, unlimited duration, 100 files. Size and duration are capped independently.
Why was the first conversion slower?
FFmpeg's WASM core loads into the tab once per session. After that, conversions are fast and reuse the loaded engine. It's a local warm-up, not an upload.
It says the file can't be decoded — why?
The input has no valid Opus/Ogg/WebM stream — usually a truncated or zero-byte download. Re-fetch or re-export the original and try again.
Can I batch-convert a folder?
Free is one file per run; Pro allows 10 files per run. For larger batches, Pro + Media allows 100. The bitrate you pick applies to the whole run.
What if my source is a Telegram, Discord, or WhatsApp voice note?
Same engine, dedicated pages with platform-specific export steps: WhatsApp at /audio-tools/solutions/convert-whatsapp-voice-to-mp3, Telegram at /audio-tools/solutions/convert-telegram-voice-note-mp3, Discord at /audio-tools/solutions/discord-voice-to-mp3-browser.
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.