MP3 vs AAC vs Opus: Modern Audio Codec Comparison
Why the Codec You Choose Actually Matters
Most people pick an audio format the same way they pick a font — grab the first familiar option and move on. MP3 has been the default for so long that many users assume it's simply 'the audio format.' But codec choice has measurable consequences: file size, audio fidelity at low bitrates, device compatibility, and streaming costs all vary significantly between MP3, AAC, and Opus. Here's a concrete illustration. Take a 4-minute pop song. Encoded at 128 kbps, an MP3 file comes in around 3.7 MB. The same song encoded to AAC at 128 kbps sounds noticeably cleaner — roughly equivalent to MP3 at 160–192 kbps — while staying the same file size. Encode it to Opus at 96 kbps and you often get audio quality that beats both at a file size closer to 2.8 MB. Those differences compound fast when you're managing thousands of tracks, running a podcast network, or streaming audio over a mobile connection. This article breaks down the technical differences between these three codecs, explains where each one excels, and gives you specific settings to use when converting. The goal isn't to declare a universal winner — there isn't one — but to help you make an informed choice for your specific use case.
MP3: The Codec That Refuses to Retire
MP3 (MPEG-1 Audio Layer III) was standardized in 1993 and became commercially dominant by the late 1990s. Its patents expired fully by 2017, making it completely free to implement. That legal clarity, combined with three decades of hardware and software support, is the main reason MP3 is still everywhere. Technically, MP3 uses a psychoacoustic model to discard audio information that human hearing is least sensitive to — sounds masked by louder frequencies, very high frequencies above roughly 16 kHz, and transient detail. At high bitrates (256–320 kbps), the results are transparent to most listeners on most equipment. At 128 kbps, pre-echo artifacts on percussive sounds and a slight 'swirly' quality in complex passages become audible on good headphones. For practical encoding, Variable Bit Rate (VBR) almost always outperforms Constant Bit Rate (CBR) at equivalent average sizes. LAME's V0 preset (roughly 220–260 kbps average) is widely considered transparent for critical listening. V2 (roughly 170–210 kbps) is a solid balance of quality and size for general use. If you're targeting a specific CBR for legacy hardware — older car stereos, some fitness trackers — 192 kbps CBR is a safe floor. The honest limitation: MP3 handles stereo audio through a 'joint stereo' mode that can degrade stereo imaging at low bitrates. Below 128 kbps, MP3 degrades noticeably faster than its competitors. It also has no native support for gapless playback without special workarounds, which matters for live albums and DJ mixes.
AAC: The Intended Successor That Mostly Delivered
AAC (Advanced Audio Coding) was developed as the formal successor to MP3, standardized in 1997 as part of MPEG-4. Apple's adoption of AAC for iTunes in 2003 gave it the mainstream foothold it needed. Today, AAC is the native format for Apple Music, YouTube's audio streams, and most broadcast audio applications. The codec improves on MP3 in several measurable ways. It supports up to 48 audio channels (versus MP3's practical limit of 2), uses a more efficient filterbank (1024-point MDCT versus MP3's hybrid approach), and handles stereo more intelligently at low bitrates. In blind listening tests like those conducted by Hydrogenaudio, AAC at 128 kbps consistently scores closer to transparency than MP3 at the same bitrate. AAC has several profiles. AAC-LC (Low Complexity) is the standard choice for music and general audio — it's what iTunes and YouTube use. HE-AAC (High Efficiency AAC, also called AAC+) adds Spectral Band Replication to reconstruct high frequencies from lower-frequency data, making it effective at very low bitrates (32–64 kbps) for streaming speech or radio. HE-AAC v2 adds Parametric Stereo on top of that, useful for voice-only content at 24–32 kbps. For music, AAC-LC at 256 kbps is Apple's standard for iTunes purchases, and it's genuinely hard to distinguish from lossless on typical consumer equipment. For podcasts, AAC-LC at 96–128 kbps mono is a reasonable target. The main limitation is licensing: AAC is still patent-encumbered in some contexts, which is why it's absent from certain open-source Linux distributions by default and why some embedded systems skip it entirely.
Opus: The Engineering Achievement Nobody Talks About Enough
Opus is an open, royalty-free codec standardized by the IETF in 2012 (RFC 6716). It was developed primarily by Xiph.Org and Mozilla, and it combines two underlying technologies: SILK (originally developed by Skype for voice) and CELT (a low-latency music codec). The result is a single codec that handles everything from 6 kbps narrowband speech to 510 kbps high-fidelity stereo music, with algorithmic latency as low as 2.5 ms. In formal listening tests — including those run by the Opus team and independent evaluations — Opus at 96 kbps consistently matches or outperforms AAC-LC at 128 kbps for music. At 64 kbps, Opus is competitive with AAC at 96 kbps. These aren't marginal differences; they're meaningful savings for anyone paying for bandwidth or storage at scale. Opus is the default audio codec in WebRTC (the technology behind browser-based video calls), Discord, WhatsApp voice messages, and Spotify's internal infrastructure. It's natively supported in all major browsers via the HTML5 Audio API and in containers like WebM and Ogg. The catch is device compatibility. Opus has no native support in iOS's AVFoundation framework without a third-party library, and older Android versions (below 5.0) don't support it natively. Most dedicated music players — portable DAPs, car infotainment systems, smart TVs — don't recognize Opus files. If you're distributing audio to end users across unknown devices, Opus is still a risky default. For server-side processing, web delivery, or internal workflows where you control the playback environment, it's genuinely the best option at low-to-medium bitrates.
Head-to-Head: Quality, Bitrate, and File Size
Rather than vague claims, here are specific numbers based on published listening test data and encoder benchmarks. These figures use typical stereo music content encoded with reference encoders (LAME 3.100 for MP3, Apple's AAC encoder for AAC, libopus for Opus). At 64 kbps stereo: MP3 produces clearly audible artifacts — metallic reverb on cymbals, smeared transients. AAC-LC is acceptable for casual listening but still shows compression. Opus at 64 kbps is the clear winner; most listeners rate it close to 96 kbps MP3 in ABX tests. At 128 kbps stereo: MP3 is decent but not transparent. AAC-LC is close to transparent for most content. Opus at 128 kbps is effectively transparent for the vast majority of listeners and material. At 192 kbps stereo: All three codecs are essentially transparent on typical consumer equipment. The differences are academic. File size for a 60-minute audio file: MP3 at 128 kbps = ~55 MB. AAC-LC at 128 kbps = ~55 MB (same bitrate, better quality). Opus at 96 kbps = ~41 MB (similar perceived quality to AAC at 128 kbps). For speech content specifically, the gap widens further. HE-AAC at 48 kbps mono handles podcast-quality voice well. Opus at 32 kbps mono produces comparable or better results. For a 10-hour audiobook, that's the difference between roughly 216 MB and 144 MB — a 33% reduction with no perceptible quality loss. One important caveat: transcoding between lossy formats always degrades quality. Converting an MP3 to AAC or Opus doesn't recover information that was discarded during the original MP3 encoding. Always start from lossless (WAV, FLAC, AIFF) when quality matters.
Which Codec to Choose for Your Specific Use Case
The right codec depends on your distribution target, not on which one scores highest in abstract tests. For music distribution to end users (Bandcamp downloads, personal music libraries, USB drives): Use MP3 at LAME V0 or 320 kbps CBR. Universal compatibility is worth more than the marginal quality advantage of AAC or Opus when you can't control what device plays the file. For podcasts and spoken-word content: AAC-LC mono at 96 kbps is a solid, widely-compatible choice. Apple Podcasts, Spotify, and Pocket Casts all handle it cleanly. If your audience is primarily on Apple devices, AAC is the native format and will work without transcoding on their end. For web streaming and browser-based audio players: Opus in a WebM container is the technically superior option at any bitrate below 160 kbps. Pair it with an AAC or MP3 fallback for Safari users on older iOS versions if your analytics show significant traffic there. For archiving audio before distribution: Never archive in a lossy format. Store FLAC or WAV masters and encode to the delivery format as needed. CocoConvert supports FLAC-to-MP3, FLAC-to-AAC, and FLAC-to-Opus conversions if you need to generate delivery files from lossless masters. For voice communications and real-time audio: Opus, without question. Its low latency and efficient voice handling at 6–32 kbps is why every major VoIP application uses it. MP3 and AAC weren't designed for real-time use and have latency characteristics that make them unsuitable for interactive audio. For video game audio assets: AAC is common in Unity and Unreal Engine workflows. Opus is natively supported in Unity 2019.3 and later as a compressed audio format. MP3 works but offers no advantages over AAC in a game engine context.
Converting Between Formats with CocoConvert
CocoConvert handles MP3, AAC (M4A container), and Opus (OGG or WebM container) conversions with configurable bitrate settings. Here's what to know before you start. To convert a FLAC file to AAC: Upload your FLAC, select M4A as the output format, and choose your target bitrate. For music, 256 kbps AAC-LC is a sensible default. For voice content, 96 kbps mono will halve the file size with no meaningful quality loss for speech. CocoConvert uses the AAC-LC profile by default; HE-AAC is available for bitrates below 80 kbps. To convert to Opus: Select OGG Opus or WebM Opus as the output container. Set bitrate to 96 kbps for music or 32–48 kbps for voice. Opus encoding is handled by libopus, the reference implementation, so output quality is consistent with what you'd get from command-line tools. To convert to MP3: Select MP3, then choose VBR or CBR mode. For general use, VBR at the V2 quality level (equivalent to roughly 190 kbps average) is recommended over a fixed 192 kbps CBR — you get comparable quality at slightly smaller file sizes on average. A few honest limitations: CocoConvert currently doesn't support multi-channel (surround) AAC encoding beyond stereo. Batch conversion is available for Pro accounts, but free-tier users are limited to single-file uploads. For very large files (over 500 MB), the upload process can time out on slow connections — splitting audio into segments before uploading is a practical workaround. CocoConvert also doesn't offer audio normalization or loudness targeting (LUFS measurement) during conversion; if you need that, run your audio through a dedicated tool like FFmpeg or Auphonic before or after conversion. The format recommendation built into the converter interface defaults to MP3 for maximum compatibility, but the settings panel gives you full control. There's no single right answer — the numbers above should help you make the call that fits your actual workflow.