Opus to MP3: Complete Conversion Guide
Convert Opus audio to MP3 for broad device compatibility. Understand quality tradeoffs and best settings for the conversion.
You ended up with a .opus file and now most of your apps refuse to open it. The fix is a one-step transcode to MP3, but a few decisions along the way determine whether the result sounds like the source or noticeably worse than it. This guide covers exactly where Opus files come from, why MP3 is still the right destination format for sharing, what bitrate to pick, and how to do the conversion in your browser or from the command line without losing more quality than necessary.
Where Opus Files Come From
Opus rarely shows up because someone deliberately picked it — it shows up because a modern app picked it for them. The most common sources:
- WhatsApp voice notes. WhatsApp encodes outgoing voice messages as Opus inside an .ogg or .opus container, typically around 16 kbps mono with the SILK mode tuned for speech. Exported via "Share" the file lands on your device as .opus or .ogg.
- Telegram voice messages. Same story — Opus around 32 kbps mono, downloaded as .ogg.
- Discord recordings and voice channel exports. Discord uses Opus over WebRTC at roughly 64 kbps stereo, and any third-party recorder (Craig, Pancake, etc.) saves the raw .opus track.
- WebRTC sessions. Zoom alternatives, Jitsi, Google Meet recordings exported via browser extensions, and any browser-based call tool that hits MediaRecorder.
- YouTube WebM downloads. When yt-dlp or similar tools pull a YouTube video's audio-only stream, the highest-quality option is almost always Opus inside a .webm container at 160 kbps.
- Android system recorders on Android 10+ default to Opus for voice memos.
- Firefox MediaRecorder API outputs .ogg/Opus by default for in-browser recordings.
If you double-clicked a file and nothing happened, or your DAW threw "unsupported format," there is a good chance the file is one of these.
Why Convert to MP3 Instead of Keeping Opus
Opus is technically the better codec — better quality at lower bitrates, lower latency, royalty-free, and standardized in RFC 6716. But MP3 has one advantage that matters in practice: it plays everywhere. Concretely:
- Hardware compatibility. Car stereos, older Bluetooth speakers, hotel TVs, gym audio systems, in-flight entertainment, and most pre-2020 dedicated music players read MP3 and refuse Opus.
- DAW import. Pro Tools, Logic Pro, Ableton Live, FL Studio, and Reaper all import MP3 directly. Opus support is patchy and often requires a plugin or a manual transcode.
- Sharing with non-technical recipients. Sending a .opus file to a Windows user running a default Windows 10 install will produce a "this file can't open" error. MP3 just works.
- Podcast and transcription pipelines. Otter, Rev, Descript, and most podcast hosts accept MP3 natively; some accept Opus, but quirks around the Ogg container and missing duration metadata cause failures often enough that MP3 is the safer choice.
- Email, Slack inline previews, and CMS uploads are far more reliable with MP3 than with Opus.
If you control the destination and know it supports Opus, keep the file as-is — every transcode loses something. If you do not, convert.
Quality Expectations: Lossy to Lossy
Opus is lossy. MP3 is lossy. Going Opus → MP3 is a transcode, which means generation loss. The MP3 encoder cannot recover detail Opus already discarded; what it can do is fail to add much of its own. The rule of thumb: pick an MP3 bitrate at least as high as the source Opus bitrate, and ideally higher, because MP3 is a less efficient codec and needs more bits to carry the same perceptual information.
A 64 kbps Opus file re-encoded at 320 kbps MP3 does not sound like a 320 kbps MP3 of the original master. It sounds like a 64 kbps Opus file in a 320 kbps MP3 wrapper, with whatever additional artifacts the MP3 encoder happens to add. Going below the Opus bitrate (e.g., 64 kbps Opus → 96 kbps MP3) compounds the loss audibly.
To find your source bitrate, run 'ffprobe input.opus' and read the bit_rate line, or open the file in MediaInfo.
Recommended Bitrate Ladder
Match the destination MP3 to the source Opus content type:
- Voice notes (WhatsApp, Telegram, Discord at 16-32 kbps Opus): output 96 kbps MP3 mono. Voice does not need stereo or high-frequency detail; 96 kbps is enough headroom for the MP3 encoder to avoid adding swirl.
- Speech and podcast-style content at 48-64 kbps Opus: output 128 kbps MP3 mono or 160 kbps stereo.
- Music at 96-128 kbps Opus: output 192 kbps MP3 minimum, 256 kbps to be safe.
- Music at 160+ kbps Opus (YouTube WebM rips): output 256 or 320 kbps MP3.
- Unknown source: output 192 kbps MP3 stereo. Catches most cases without bloating file size.
For a deeper dive on bitrate choices, see the audio bitrate guide and the lossless vs lossy explainer.
Convert in Your Browser with AudioUtils
The fastest path is the Opus to MP3 converter. The tool runs entirely in your browser using WebAssembly — files never leave your device, which matters for sensitive recordings like voice notes or interview audio. Step by step:
1. Open /opus-to-mp3 in any modern browser (Chrome, Firefox, Safari, Edge). 2. Click the upload area or drag your .opus / .ogg file in. Multiple files can be queued at once. 3. Select MP3 bitrate from the dropdown. Default is 192 kbps; pick higher for music sources, lower for pure voice. 4. Click Convert. Encoding happens locally; expect roughly real-time speed on a modern laptop (a 5-minute file takes 5-10 seconds). 5. Download the .mp3. Filename and basic metadata are preserved.
For files that started as something else inside an Opus container, or if you need a different output format, the broader Opus converter hub lists every Opus destination including WAV for editing workflows.
ffmpeg One-Liner for Power Users
If you have ffmpeg installed, the conversion is a single command:
'ffmpeg -i input.opus -b:a 192k output.mp3'
What each flag does:
- '-i input.opus' — input file. ffmpeg auto-detects the codec from the container; works for .opus, .ogg, and .webm sources.
- '-b:a 192k' — audio bitrate. Sets MP3 at 192 kbps CBR. Replace with 96k, 128k, 256k, or 320k as needed.
- 'output.mp3' — output filename. ffmpeg infers the encoder from the .mp3 extension and uses libmp3lame by default.
For VBR output (smaller files at equivalent quality), use '-q:a' with LAME quality scale: '-q:a 2' targets ~190 kbps VBR (transparent for most music), '-q:a 0' targets ~245 kbps. To force mono: add '-ac 1'. To preserve a specific sample rate: add '-ar 44100'.
Batch Conversion
For many files at once, the AudioUtils browser tool lets you queue multiple uploads and downloads them as a zip. From the command line:
'for f in *.opus; do ffmpeg -i "$f" -b:a 192k "${f%.opus}.mp3"; done'
This loops over every .opus file in the current directory and produces a matching .mp3.
Why .opus Files "Don't Play"
Two distinct issues hide behind that error message. Codec support is whether your audio software has an Opus decoder; container support is whether it can read the .ogg or .opus wrapper. Some players have one and not the other, which is why a file might play in Firefox but not in QuickTime even when both technically support Opus. Converting to MP3 sidesteps both problems — the .mp3 container and the MP3 codec are universal.
Common Failure Modes
- Corrupt or partial download. A truncated .opus file may convert but produce silence at the end. ffprobe will usually flag the duration mismatch.
- DRM-protected content. Some platforms wrap Opus inside encrypted containers (Spotify offline files, Apple Music). These cannot be transcoded and are not what this guide covers.
- Variable sample rate sources. WhatsApp voice notes are 16 kHz; YouTube downloads are 48 kHz. ffmpeg handles the resample automatically, but if your output sounds pitched up or down, force '-ar 44100' explicitly.
- Missing duration metadata. Some Opus files written by browser MediaRecorder lack a length header. The MP3 will still play but seek bars may behave oddly until the file is fully scanned.
When to Convert vs. Keep as Opus
Convert to MP3 if: you are sharing with non-technical recipients, importing into a DAW that does not handle Opus, uploading to a podcast host or transcription service that expects MP3, or playing back on hardware older than ~2020.
Keep as Opus if: the destination is a modern browser, a Discord bot, a WebRTC pipeline, or any system where you control the playback chain. Opus files are 30-50% smaller than equivalent-quality MP3s, which matters at scale.
For format-level background on the codec, the What is Opus explainer covers the SILK+CELT design and RFC 6716 in detail. For a head-to-head against MP3, see Opus vs MP3.
Why MP3 Needs More Bits Than Opus for Equivalent Quality
The bitrate ladder above looks counterintuitive — why does a 64 kbps Opus file need 128+ kbps MP3 to avoid additional loss? Because MP3 is a less efficient codec, designed in the early 1990s with constraints that no longer apply. Opus uses a hybrid SILK+CELT design with modern Modified Discrete Cosine Transform (MDCT) at flexible frame sizes; MP3 uses an older subband filter bank with fixed frame structure. At the same bitrate, Opus packs more usable audio information into fewer bits.
Empirically, the equivalences are:
- 96 kbps Opus ≈ 192 kbps MP3 in perceived quality.
- 128 kbps Opus ≈ 256 kbps MP3.
- 192 kbps Opus ≈ 320 kbps MP3.
When transcoding Opus to MP3, the MP3 encoder needs roughly 2× the source Opus bitrate to "carry" the same audio without adding noticeable artifacts of its own. This is why the ladder recommends MP3 bitrates above the Opus source — not because the audio gains anything, but because MP3 needs the headroom to avoid stacking visible compression on top of what Opus already discarded.
What "Faithful Conversion" Actually Means
A common misconception: a 320 kbps MP3 of a 64 kbps Opus source is "high quality." It is not. The 320 kbps wrapper does not recover any of the detail Opus discarded; it just ensures the MP3 encode adds minimal additional loss on top. The audio sounds like a 64 kbps Opus file regardless of what bitrate you pick for the MP3.
This matters for two practical reasons:
1. Do not over-encode. A 320 kbps MP3 from a 64 kbps Opus voice note is wasteful — 5× larger than 64 kbps mono MP3 with no perceptible quality difference. 2. Do not expect quality recovery. If the source recording is bad (noisy, quiet, distorted), no conversion will fix it. Run cleanup in Audacity or iZotope before encoding the final MP3 if it matters.
Sample Rate Considerations
Opus internally always operates at 48 kHz. Source content at lower rates (WhatsApp's 16 kHz, Telegram's 24 kHz) is upsampled inside the encoder. When converting to MP3:
- The MP3 file's sample rate defaults to whatever the decode chain produces — usually 48 kHz, sometimes 44.1 kHz depending on tool.
- Forcing 44.1 kHz output ('-ar 44100' in ffmpeg) is sometimes useful for compatibility with strict CD-style audio chains.
- Forcing 22.05 kHz mono ('-ar 22050 -ac 1') is reasonable for voice content destined for transcription.
The MP3 sample rate does not need to match the original Opus source sample rate — they are independent decisions.
Metadata: What Carries Over
Opus files in .ogg or .opus containers can carry Vorbis Comments metadata (artist, album, title, comments). When converting to MP3, this metadata maps to ID3 tags:
- Title → ID3 TIT2.
- Artist → ID3 TPE1.
- Album → ID3 TALB.
- Date → ID3 TYER / TDRC.
- Comment → ID3 COMM.
ffmpeg preserves the mapping by default. The browser tool preserves filename and core tags. If detailed metadata matters, run 'ffmpeg -i input.opus -id3v2_version 3 -b:a 192k output.mp3' to ensure ID3v2.3 compatibility (the most widely-supported tag version).
Handling Multiple Containers (.opus, .ogg, .webm)
Opus audio shows up in three different container formats:
- .opus — pure Opus inside an OggS container. Most common from voice apps.
- .ogg — Ogg container that may hold Opus, Vorbis, or even FLAC. Run ffprobe to confirm which.
- .webm — Matroska-based container, common for browser MediaRecorder output and YouTube audio-only streams.
All three are converted with the same ffmpeg command — ffmpeg auto-detects the codec inside. The browser AudioUtils tool handles all three transparently.