Step-by-step instructions
- 1
FFmpeg (command line)
Convert AAC to Opus: `ffmpeg -i input.aac -c:a libopus -b:a 96k output.opus`. For voice: `-b:a 32k`. For music: `-b:a 128k`. Enable VBR: add `-vbr on`. Opus in OGG container (most compatible): `ffmpeg -i input.aac -c:a libopus -b:a 96k output.ogg`. Batch: `for f in *.aac; do ffmpeg -i "$f" -c:a libopus -b:a 96k "${f%.aac}.opus"; done`.
Go to converter - 2
opusenc (reference Opus encoder)
opusenc needs WAV input: `ffmpeg -i input.aac -f wav pipe:1 | opusenc - output.opus`. Install: `brew install opus-tools` (Mac) or `sudo apt install opus-tools` (Ubuntu). For music: `opusenc --music --bitrate 96 input.wav output.opus`.
- 3
WebM container for browser use
For HTML5 audio players, Opus in WebM is standard: `ffmpeg -i input.aac -c:a libopus -b:a 128k output.webm`. Both .opus (Ogg) and .webm (WebM) are supported in Chrome and Firefox. Safari 17+ supports Opus in WebM.
- 4
Python pydub (scripted pipelines)
`pip install pydub`. Script: `from pydub import AudioSegment; audio = AudioSegment.from_file('input.aac'); audio.export('output.opus', format='opus', codec='libopus', parameters=['-b:a', '96k'])`. Pydub wraps FFmpeg — libopus must be compiled into FFmpeg.
Why convert AAC to Opus?
AAC dominated mobile audio for a decade. Opus is what the internet runs on today — Discord, Zoom, WebRTC, and every modern streaming protocol chose Opus for its unbeatable quality-per-bit.
Your files never leave your device
FormatDrop runs the conversion engine entirely inside your browser using WebAssembly. No file upload. No server. Nothing stored. You can verify this by opening DevTools → Network tab and watching: zero upload requests.
Frequently asked questions
Is Opus better than AAC for music?
Does converting AAC to Opus lose quality?
What container should Opus use — .opus or .ogg?
No account. No upload. Works in any browser.