Convert OPUS to AAC

Converting OPUS to AAC produces a bare stream rather than a container, which is what prompt players, segmenters and elementary-stream ingest expect. If your requirement only says "AAC", read the first section — an M4A holds identical audio and is what most systems actually mean.

  • Where it runs In your browser. The file is never uploaded.
  • Lossy Some detail is traded for size. AAC cannot hold everything an OPUS can.
  • File size limit Up to 100 MB per file, free, without an account.
  • Worth knowing Both formats are compressed, so this is a second round of compression on audio that has already lost detail. Pick the highest quality band if the result is going to be edited or converted again.

Up to 100 files at once. Mixed formats are fine.

Two different files answer to the name AAC

The file this page writes is Audio Data Transport Stream framing: AAC frames one after another, each carrying a short header that repeats the sample rate, the channel configuration and the profile, with nothing wrapped around them. No index, no duration field, no metadata area. The other file called AAC is an M4A — the same encoded audio inside an MP4 container that carries all three.

Which one you need is not a matter of taste and cannot be inferred from the word. Documentation that names ADTS, an elementary stream, or a `.aac` extension means this page. Documentation that says "AAC audio" and expects a length, a title or a seek bar means the M4A. Sending the wrong one is the single most common failure in this conversion, and it usually surfaces as a player reporting the wrong duration rather than as an outright rejection.

The systems that genuinely want an elementary stream

ADTS exists so that a stream can begin at any frame. That property is what segmenters, playout automation, announcement and IVR players and embedded parsers are built around: they cut audio into pieces, start playing partway through, and hand fragments to a decoder that has no container to consult. A header on every frame is what makes that safe.

The same design supports concatenation. Two ADTS files whose sample rate and channel count match can be joined byte-wise and the result plays as one continuous file, with no re-encoding and therefore no additional loss. Prompt systems assemble sentences from fragments exactly this way. It is the strongest reason to prefer a bare stream when you have the choice, and it is worth checking that your fragments really do share parameters before relying on it.

Everything arrives at 48 kHz, and telephony wants far less

Opus runs on a fixed 48,000 Hz clock. A decoder reports that rate whatever the file was encoded from, so the AAC produced here is 48 kHz even when the source was a 16 kHz voice recording. Nothing on this page resamples, and that is deliberate — resampling is a decision with audible consequences and belongs in a tool where it can be heard.

It matters most in the direction this pair is often used. Telephony, IVR and announcement systems commonly specify 8,000 or 16,000 Hz, because that is what the transport carries, and a 48 kHz file will either be refused or resampled on ingest. Do it yourself in an editor or a batch tool after converting, so the result is checked rather than discovered when a prompt sounds wrong on a live line.

Where the Opus files came from, and what they are worth

Opus turns up in this position for three reasons. Messaging platforms and voice bots record in it, because it was designed for real-time speech and is what WebRTC mandates. Download tools produce it, because it is the best stream available without re-encoding. And synthesis and text-to-speech services increasingly emit it, for the same bandwidth reasons.

The source bitrate sets the ceiling on everything downstream. A prompt synthesised at 64 kbps or better converts to a 192 kbps AAC that no listener will fault. A voice note captured at 24 kbps for a phone call is already at the bottom of the codec's range, and no band on this page improves it — the highest setting only stops the second encoder adding to the damage.

96, 128 and 192 kbps, read against a system requirement

The Quality control resolves to a real bitrate inside the encoder, and AAC is offered a fixed set: Small file writes 96 kbps, Balanced 128, High quality 192. Nothing above 192 is available on this path, which is a limitation of the encoder rather than of the codec, and worth knowing if a specification names 256.

Requirements written for AAC are usually ceilings imposed by a transport rather than quality targets — 64 kbps because a channel is narrow, 128 because a budget was set years ago. Pick the band at or just under the figure named. Where nothing is specified, High quality is the right default for a second-generation encode, because the point of the headroom is that the encoder then contributes almost nothing of its own.

Mono prompts should stay mono, and usually are

Speech recorded for a system is normally mono at source, and it should stay that way: two identical channels convey the same information at twice the bitrate, and a prompt player that expects mono may reject or fold a stereo file unpredictably. Nothing here promotes a mono file to stereo, so a mono Opus produces a mono AAC.

The ADTS header records the channel configuration on every frame, which is what makes the concatenation trick above safe — a mono fragment cannot accidentally be joined to a stereo one without the mismatch showing. If a batch contains both, that inconsistency is worth resolving before conversion rather than after, because it is much easier to see in a source directory than in a stream of frames.

A raw stream cannot say how long it is

There is no duration anywhere in an ADTS file. Software that needs one estimates it, either by scanning every frame or by dividing the file size by an assumed bitrate, and variable-rate material defeats the arithmetic. That is why players sometimes report the wrong length for a `.aac` file or refuse to let you seek in it.

For a prompt system this is irrelevant, because the platform measures the audio when it ingests it and stores the figure in its own database. For anything where a person sees a progress bar it is a visible defect, and it is the clearest practical sign that a bare stream was the wrong deliverable. The M4A carries the duration in its header and does not have this problem.

Nothing survives the crossing except the audio

Opus is carried in an Ogg container holding Vorbis comments — an open list of uppercase keys with text values — and a synthesised prompt or an exported recording quite often has a useful description in there. ADTS has no metadata area at all, so every field is dropped and the result carries only sound.

In this context that is usually correct: prompts are identified by path and by the platform's own record, not by embedded tags. Where the description matters — a licence, an attribution, a version number for a prompt set — copy it into the file name or a manifest before converting, or use the M4A target, which has atoms for all of it and holds identical audio.

A prompt set converted in one pass, with nothing transmitted

Files are capped at 100 MB each — for Opus that is hours of speech — and a hundred can be dropped at once and taken back as a ZIP, which fits how prompt sets and bot recordings actually arrive. The work is processor time on your own machine rather than bandwidth, so a large batch is worth starting and leaving.

Opus decodes natively in every browser because WebRTC made it mandatory. Chrome, Edge and Safari also encode AAC natively; Firefox does not, so a WebAssembly encoder is fetched once there. That package is the only thing that crosses the network — recorded calls, customer prompts and anything else in the batch stay on the machine, which you can confirm in developer tools while a conversion runs.

How to convert an OPUS file into an AAC stream

  1. Check whether the system wants ADTS or an M4A — the audio inside them is identical.
  2. Drop the OPUS files onto this page and pick a band; High quality writes 192 kbps.
  3. Download the AAC, and resample afterwards if the platform needs 8 or 16 kHz.

OPUS and AAC compared: two lossy codecs, two delivery shapes

OPUS compared with AAC
OPUSAAC
Full nameOpus AudioAdvanced Audio Coding
File extension.opus.aac
Media typeaudio/opusaudio/aac
CompressionLossy — file size is bought with qualityLossy — file size is bought with quality
First published20121997
Published byXiph.OrgMPEG
SpecificationRFC 6716ISO/IEC 13818-7
LicensingOpen standardOpen standard
Standing todayCurrentCurrent
Audio channelsup to 255up to 48
Opens in a browserCurrent browsersEvery browser
Considered insteadMP3MP3

What is lost

OPUS defines up to 255 audio channels and AAC up to 48. A surround mix is folded down rather than carried across.

Opening the result

AAC opens in every current browser. OPUS has narrower browser support than that. If the file is going onto a web page or into a form, that is usually the whole reason for the conversion.

VLC and FFmpeg read both OPUS and AAC, so there is a way to check the result against the original without a second tool.

File size and quality

Both OPUS and AAC are lossy, so this is a second compression on top of the first. It is worth starting from the original if there is one; each round trip costs a little more than the last.

What each format is for

OPUS is Xiph.Org's format, published in 2012. The specification is RFC 6716, and it is worth reading if the file has to outlive the tool that wrote it.

AAC comes from MPEG and dates from 1997, specified as ISO/IEC 13818-7. VLC, FFmpeg and iTunes all read it.

AAC was published in 1997 and OPUS in 2012. The older one is generally the safer file to hand to somebody; the newer one usually does the job in fewer bytes.

OPUS to AAC: streams, containers and system requirements

Does "AAC" mean a .aac file or an .m4a?

Usually an M4A, despite the wording. A bare .aac file is an elementary stream with no container, no duration and no metadata; systems that ingest streams — segmenters, prompt players, embedded parsers — want exactly that, and everything else wants the M4A. If the documentation names ADTS or an elementary stream, use this page. If it only says AAC, the M4A is the safer delivery.

What sample rate will the AAC have?

48,000 Hz. Opus runs on a fixed 48 kHz clock and a decoder reports that rate whatever was encoded, so the AAC inherits it and nothing here resamples. Telephony and IVR systems frequently want 8,000 or 16,000 Hz, which this conversion cannot produce — resample in an editor or a batch tool afterwards, or the platform will do it on ingest and charge you a step for it.

Can I join several AAC prompts into one file?

Yes, and this is the practical reason ADTS exists. Each frame carries its own header repeating the sample rate and channel configuration, so two streams with matching parameters can be concatenated byte-wise and the result plays as one file with no re-encoding at all. Prompt systems and announcement players rely on that. It only works when the rate and channel count match exactly.

How much does the second encode cost?

A real amount, and the low band is where it shows. Opus already discarded detail and AAC discards more with different rules, spending part of its budget on the first encoder's artefacts. On speech at High quality — 192 kbps — the result is indistinguishable in a prompt or an announcement. On a voice note encoded at 24 kbps to begin with, nothing on this page improves it.

Are the tags kept?

No. The output is a raw stream with no metadata area at all, so the Ogg's Vorbis comments and any embedded artwork are dropped. For prompts and system audio that is irrelevant, because the file name and the platform's own database carry the identity. If anything about the file needs a title, convert to M4A instead — the audio inside is identical.

Is the audio uploaded?

No. Opus decodes natively in every browser. Chrome, Edge and Safari have an AAC encoder built in and use it directly; Firefox does not, so a WebAssembly encoder is fetched once there and never on other pages. The audio never crosses the network. Files are capped at 100 MB each and a hundred can be dropped in one pass.

More about these formats