Cookies for analytics and advertising
We use cookies for analytics and advertising, both sent to Google. Refusing changes nothing you can see.Read the privacy page
Converting AAC to OGG gives a web player or an application a second source for clients that cannot decode AAC — a distribution-built Chromium, an open-source player shipping only free codecs. The Ogg written here holds an Opus stream, which every current browser reads, and the conversion runs in your own tab.
Up to 100 files at once. Mixed formats are fine.
They convert one after another and download together as a ZIP.
AAC to OGG
Ogg is a container and the registry lists three codecs it can hold — Vorbis, Opus and FLAC. Convention has attached `.ogg` to Vorbis for twenty-five years because that pairing came first, so a file with this extension is widely assumed to be Vorbis. This converter writes Opus, and a developer wiring up a fallback chain needs to know which one is arriving.
For the job on this page it is the better outcome. Opus was published as RFC 6716 in 2012 and outperforms Vorbis at every bitrate. The container is where the support question actually sits: Safari read nothing at all inside an Ogg wrapper until 18.4 in March 2025, so an `.ogg` source of either codec is a fallback for Chrome, Edge and Firefox rather than for everything. Among the clients that do open the container, Opus has the broader modern support of the two. What it will not satisfy is a build check or an ingest rule that names Vorbis specifically.
The gap is narrower than the folklore suggests and it has not closed. Chrome, Edge, Safari and released Firefox builds all decode AAC. What does not, reliably, is Chromium as packaged by several Linux distributions: those builds are compiled without the proprietary codec set for licensing reasons, and anything embedding an engine built the same way inherits the limitation.
The same reasoning produces open-source players and desktop applications that ship free codecs only. If your audience includes Linux desktops, self-hosted deployments or anyone running a distribution build, a second source costs one conversion and removes an entire class of silent failure. If your audience is phones and mainstream browsers, AAC alone is already sufficient and this page is solving a problem you do not have.
Worth stating rather than leaving to be discovered. The `ogg` and `opus` targets on this site both write an Opus stream in an Ogg container through the same encoder, so the audio produced by this page and by the AAC-to-OPUS page is identical. The extension is the entire difference.
Which one to pick is therefore a question about your tooling, not about the file. Asset pipelines, static-site plugins, upload forms and content-type checks frequently accept one name and not the other, and audio elements in the wild are more often written with `.ogg` because that convention is older. Pick whichever your build expects, and rename freely afterwards — the stream is legal under both.
A file with a `.aac` extension is an Audio Data Transport Stream: a run of AAC frames each carrying a short header, with no container around them. There is no index, no duration field and no metadata area. Files in this shape usually come out of a segmenter, a capture, an encoder configured for streaming, or a command-line tool asked for raw output.
That absence has one consequence for web work. Some players report the wrong length for an ADTS stream or refuse to seek in it, because the duration has to be estimated by scanning rather than read from a header. The Ogg produced here does carry that structure, which occasionally makes the fallback behave better than the primary — an argument for shipping the AAC in an M4A rather than raw, if you control the build.
A browser picking between source elements uses the declared type to decide what to attempt, and it does so before fetching anything. The registry records `audio/ogg` for this extension, and that is what belongs in the type attribute and in the header your server sends.
Getting it wrong produces the failure this exercise was meant to prevent: a client downloads a file it cannot decode, fails, and either falls through slowly or not at all. Serve the Ogg with a correct content type, list it after the AAC source rather than before it so capable clients take the better-supported file first, and test with a build that genuinely lacks AAC rather than assuming from a codec table.
The AAC already discarded parts of the recording permanently, and Opus now discards a further helping using a different model — spending part of its budget faithfully reproducing the first encoder's artefacts rather than the original sound. That is the standard cost of any lossy-to-lossy conversion and no setting removes it.
For a fallback that a minority of users will ever hear, Balanced at 64 kbps is a defensible engineering decision and keeps the extra asset small. For anything that will be a primary source on some platforms, High quality at 128 kbps is the right call: Opus at that rate is generous, and the point of giving the second encoder room is that it then contributes almost nothing of its own.
The three bands resolve inside the encoder: Small file writes 38 kbps, Balanced 64 and High quality 128. Anyone judging by MP3 numbers will read 64 kbps and expect something unpleasant. Opus at 64 kbps is a comfortable stereo music bitrate, and at 38 kbps speech is completely clear — the same codec runs messaging voice notes at 16 to 32.
For interface sounds, notification tones, short stingers and voice prompts, Small file is often correct rather than cheap, and on a page loading dozens of assets the difference is measurable in load time. For music beds and anything with sustained content, Balanced or High quality. The file sizes follow directly: a four-minute asset lands near 1.1 MB, 1.9 MB and 3.8 MB.
Ogg carries metadata as Vorbis-style comments — a plain list of uppercase keys with text values — and it is a perfectly good place to put a title, a licence or an attribution. The problem in this direction is upstream: a bare ADTS stream has no metadata area at all, so there is nothing to copy across and the result arrives with an empty comment header.
For build assets that is usually irrelevant, since the file name and the manifest carry the identity. Where it does matter — a downloadable clip, a Creative-Commons asset that must credit a source — the tags have to be written into the Ogg afterwards with a tagger, and doing it at this point in the chain is the right moment because they will then survive any further copying.
Opus is the only audio target on this site that fetches no encoder, because every browser had to implement it for calls, and your machine already decodes AAC. A conversion starts the moment a file lands and the network stays idle throughout, which you can confirm in developer tools while a batch runs.
Files are capped at 100 MB each and a hundred can be dropped at once, coming back as a ZIP — which is the usual shape of this job, since fallbacks are generated for a whole asset directory rather than one file. For unreleased product audio, the fact that nothing is transmitted is worth more than the convenience.
| AAC | OGG | |
|---|---|---|
| Full name | Advanced Audio Coding | Ogg Audio |
| File extension | .aac | .ogg, .oga |
| Media type | audio/aac | audio/ogg |
| Compression | Lossy — file size is bought with quality | Lossy — file size is bought with quality |
| First published | 1997 | 2000 |
| Published by | MPEG | Xiph.Org |
| Specification | ISO/IEC 13818-7 | RFC 3533 |
| Licensing | Open standard | Open standard |
| Standing today | Current | Current |
| Audio channels | up to 48 | — |
| Opens in a browser | Every browser | Current browsers |
| Considered instead | MP3, OPUS | MP3, OPUS |
Current browsers read OGG; older ones do not. It is the less portable of the two, so it is worth being sure the program at the other end accepts it before sending one.
OGG is a container rather than a single format. What actually plays is the codec inside it — usually Vorbis, Opus and FLAC — which is why two files with the same extension can behave differently on the same device.
VLC reads both AAC and OGG, so there is a way to check the result against the original without a second tool.
AAC is MPEG's format, published in 1997. The specification is ISO/IEC 13818-7, and it is worth reading if the file has to outlive the tool that wrote it.
OGG comes from Xiph.Org and dates from 2000, specified as RFC 3533. Audacity, VLC and foobar2000 all read it.
Opus. This converter writes an Ogg container with an Opus stream inside, which is exactly what RFC 7845 specifies and a valid .ogg file — but it is not Vorbis. Chrome, Edge and Firefox have decoded Opus in Ogg for years and Safari has since 18.4, so as a fallback source it works on anything current. A tool or a test that checks for Vorbis by name will not accept it.
Fewer than they used to, and not none. Chrome, Edge, Safari and released Firefox builds all decode AAC. What can fail is Chromium as packaged by some Linux distributions, which is compiled without the proprietary codec set, and any application that embeds a browser engine built the same way. Opus in an Ogg container is decoded by all of them, and by Safari from 18.4 onwards, which is why it is the format to fall back to rather than the one to lead with.
It is the identical conversion. Both targets produce Opus in an Ogg container through the same encoder; only the file extension differs. Choose the .ogg page when your build tooling, upload form or type check wants that name, and the .opus one when it wants that. Nothing about the audio changes between them.
Some, unavoidably. The AAC already discarded detail and Opus discards a further helping with different rules. For a fallback source that most listeners will never hear, Balanced at 64 kbps is sensible; for a primary asset, High quality at 128 kbps leaves the encoder enough room that it adds little of its own. Opus is efficient enough that 128 kbps is generous rather than marginal.
The registry records audio/ogg for the .ogg extension, and that is what a source element should declare. Browsers use the type hint to decide which source to attempt before downloading it, so declaring it correctly is the difference between a clean fallback and a player that fetches a file it cannot play. Serve it with the same header from your web server.
No. The AAC is decoded by your own machine and Opus is the one audio target that needs no encoder download, so the conversion begins immediately and contacts nothing. Files are capped at 100 MB each and a hundred can be dropped in one pass, which is the usual shape of an asset folder, and returned together as a ZIP.