Convert AAC to WEBA — Free Online Tool
Convert AAC audio files to WEBA format, re-encoding from AAC's lossy compression into Opus audio inside a WebM container. Opus delivers excellent quality at low bitrates and is the preferred codec for browser-based audio streaming and WebRTC applications.
to
FFmpeg Command
Copy this command to run the same conversion locally with FFmpeg on your desktop. Download FFmpeg
Drop your AAC file here
or click to browse
Free — no uploads, no signups. Your files never leave your browser.
Settings
Note: Browser-based encoding uses approximate quality targets. For precise CRF compression, copy the FFmpeg command above and run it on your desktop.
Estimated output:
Conversion Complete!
DownloadHow It Works
AAC and Opus are both lossy codecs, so this conversion requires a full decode-then-encode cycle: FFmpeg first decodes the AAC-compressed audio back to raw PCM, then re-encodes it using the libopus encoder and wraps the result in a WEBA (audio-only WebM) container. Because both formats are lossy, this is a generation loss scenario — the audio is compressed twice, so some quality is sacrificed regardless of the output bitrate you choose. The -vn flag explicitly strips any video stream, which is appropriate since WEBA is a pure audio format. At matching bitrates like 128k, Opus generally outperforms AAC in perceptual quality, which partially offsets the generation loss for typical listening use cases.
What Each Flag Does
| Flag | What it does |
|---|---|
ffmpeg
|
Invokes the FFmpeg multimedia processing tool. In this browser-based tool, this runs via FFmpeg.wasm (WebAssembly) entirely in your browser without uploading your file to any server. On your desktop, this calls your locally installed FFmpeg binary. |
-i input.aac
|
Specifies the input file — your source AAC audio. FFmpeg will automatically detect the AAC codec and decode it to raw PCM audio internally before re-encoding to Opus. |
-c:a libopus
|
Sets the audio encoder to libopus, the open-source Opus codec library. This is what converts the decoded AAC audio into Opus compression, which is the standard audio codec for WEBA files and is natively supported by all modern browsers without licensing fees. |
-b:a 128k
|
Sets the target audio bitrate to 128 kilobits per second for the Opus encoder. At 128k, Opus typically delivers perceptually transparent quality for most music and voice content, partially compensating for any generational loss from decoding the original AAC. |
-vn
|
Explicitly disables any video stream in the output. This is a safety flag for AAC sources that may be embedded in containers with cover art or video tracks (such as M4A files), ensuring the output is a clean audio-only WEBA file as the format requires. |
output.weba
|
Specifies the output filename with the .weba extension. FFmpeg uses this extension to automatically select the audio-only WebM muxer, producing a WEBA file containing the Opus-encoded audio stream ready for browser playback. |
Common Use Cases
- Preparing podcast audio or narration tracks for use in browser-based media players and Progressive Web Apps that rely on native WebM/Opus support rather than AAC
- Converting iTunes or Apple Music exported AAC files into a format compatible with open-source and Linux-first web platforms that do not license AAC decoding
- Supplying Opus-encoded audio as a low-latency source for WebRTC or Web Audio API projects where AAC is not natively supported by the browser audio pipeline
- Reducing file size of AAC audio for web delivery without switching to MP3, since Opus at 96k often matches or exceeds AAC quality at 128k for voice and ambient content
- Creating WEBA audio assets for HTML5 games or interactive web experiences where the WebM ecosystem is the target delivery format
- Archiving or migrating an AAC-based audio library into an open, royalty-free format (Opus/WebM) to avoid licensing dependencies in future distribution pipelines
Frequently Asked Questions
Yes, some quality loss is unavoidable because both AAC and Opus are lossy codecs. Converting between two lossy formats requires decoding the AAC back to raw audio and then re-encoding it with Opus — a process called generational loss. However, Opus is a technically superior codec at equivalent bitrates, so at 128k the output often sounds comparable to the original AAC for most listeners, especially for voice content. To minimize degradation, use the highest bitrate your use case allows.
AAC is a patented format that requires licensing fees, which historically led open-source browsers like Firefox and Chromium on Linux to exclude native AAC support. Opus is royalty-free and was co-developed with browser vendors as an open standard, so it enjoys universal native support across all major browsers without licensing concerns. This is the primary practical reason to convert AAC to WEBA for web deployment.
Replace the 128k value in the -b:a 128k flag with your desired bitrate. Supported options for Opus in WEBA include 64k, 96k, 128k, 192k, 256k, and 320k. For voice-only content like podcasts, 64k or 96k is typically sufficient and produces smaller files. For music, 128k or 192k is recommended. Keep in mind that increasing the bitrate beyond the quality ceiling of the original AAC source will not recover lost detail.
Yes — WEBA (the audio-only WebM container) supports both Opus and Vorbis codecs. To use Vorbis instead, replace -c:a libopus with -c:a libvorbis in the command. However, Opus is the recommended choice for new content: it outperforms Vorbis at low and mid bitrates, has lower latency, and is the codec most browsers now optimize for in their WebM implementations. Vorbis is largely a legacy option within the WebM ecosystem.
FFmpeg will attempt to copy metadata tags from the AAC source into the WebM container, but compatibility is not guaranteed for all tag fields. Common tags like title, artist, and album typically survive, but AAC-specific or iTunes-specific metadata fields (such as cover art embedded via the M4A container) may not transfer correctly because WEBA is a stripped audio-only format with limited metadata support compared to M4A/AAC. If metadata preservation is critical, verify the output with a tag editor after conversion.
The single-file command shown here can be adapted for batch processing in a shell script. On Linux or macOS, you can run: for f in *.aac; do ffmpeg -i "$f" -c:a libopus -b:a 128k -vn "${f%.aac}.weba"; done. On Windows PowerShell, use: Get-ChildItem *.aac | ForEach-Object { ffmpeg -i $_.FullName -c:a libopus -b:a 128k -vn ($_.BaseName + '.weba') }. This is particularly useful for large libraries over 1GB that cannot be processed through the browser tool in a single session.
Technical Notes
The WEBA format is essentially an audio-only restriction of the WebM container, which is itself a subset of the Matroska (MKV) format. When encoding to libopus, FFmpeg internally uses the Opus Interactive Audio Codec at the specified constant bitrate target. Opus operates natively at 48kHz sample rate, so if your AAC source was encoded at 44.1kHz (common for iTunes content), FFmpeg will automatically resample the audio to 48kHz during encoding — this is normal and expected behavior, not an error. The -vn flag is included as a safeguard to explicitly discard any video stream, which is necessary because some AAC files (particularly those wrapped in M4A or MP4 containers with cover art treated as a video stream) might otherwise cause muxer errors when writing to WEBA. The output file size will vary from the input: at 128k, WEBA/Opus files are often slightly smaller than equivalent AAC files due to Opus's more efficient entropy coding. For very short clips (under a few seconds), Opus's frame overhead can cause the WEBA file to be proportionally larger than expected. Note that WEBA files have limited compatibility outside of web browsers — desktop media players like VLC support them, but Apple devices and older Android players may not play WEBA natively.