Convert M4A to AAC — Free Online Tool

Convert M4A files to raw AAC audio by stripping the MPEG-4 container while keeping the underlying AAC audio stream. This is useful when you need a bare .aac file for streaming pipelines, broadcast systems, or devices that require containerless AAC rather than the iTunes-style M4A wrapper.

FFmpeg Command

Copy this command to run the same conversion locally with FFmpeg on your desktop. Download FFmpeg

Free — no uploads, no signups. Your files never leave your browser.

Estimated output:

Conversion Complete!

Download

How It Works

M4A is essentially an MPEG-4 container (.mp4) holding an AAC audio stream — the audio data inside is already AAC-encoded. However, this conversion cannot simply remux (copy) the stream without re-encoding, because raw .aac files use the ADTS (Audio Data Transport Stream) byte format, while M4A stores AAC in the MPEG-4 file format (MP4FF) with a different framing structure. FFmpeg re-encodes the audio using its built-in AAC encoder at the target bitrate (128k by default), producing a self-contained ADTS stream that can be parsed frame-by-frame without a container. This means there is a generation of lossy re-encoding involved, so choosing a bitrate equal to or higher than the source is advisable to minimize quality loss.

What Each Flag Does

Flag What it does
ffmpeg Invokes the FFmpeg command-line tool. In the browser-based version of this tool, the same FFmpeg logic runs via WebAssembly (FFmpeg.wasm), so the command shown is exactly what you would run on your local machine to reproduce the conversion.
-i input.m4a Specifies the input file — an M4A file containing an AAC audio stream wrapped in an MPEG-4 container. FFmpeg reads the MP4FF structure, locates the audio track, and decodes the AAC bitstream for re-encoding.
-c:a aac Selects FFmpeg's built-in AAC encoder to re-encode the decoded audio into ADTS-framed AAC. This is necessary because the MP4FF framing used inside M4A is incompatible with the raw ADTS bitstream format expected in a .aac file — a straight stream copy is not possible here.
-b:a 128k Sets the target audio bitrate to 128 kilobits per second for the re-encoded AAC output. Since the M4A source is already lossy AAC, using a bitrate at or above the original's bitrate helps minimize the quality impact of this second encoding pass.
output.aac Defines the output filename with the .aac extension, which tells FFmpeg to write a raw ADTS AAC bitstream. This containerless format is suitable for streaming ingest pipelines and hardware decoders but lacks support for metadata or chapters.

Common Use Cases

  • Preparing AAC audio for HLS (HTTP Live Streaming) segmenters or broadcast encoders that ingest raw ADTS AAC streams rather than M4A/MP4 files
  • Supplying audio to embedded systems or hardware decoders (such as automotive or IoT devices) that support ADTS AAC but cannot parse the MPEG-4 container format
  • Stripping iTunes-specific metadata and the MP4 container from purchased or ripped M4A music before ingesting into a DAW or audio processing pipeline that expects raw bitstreams
  • Creating bare AAC files for use in certain Android MediaCodec or WebRTC implementations that specifically require ADTS-framed AAC input
  • Archiving or distributing spoken-word audio (podcasts, audiobooks with chapters) in a simpler containerless format when chapter metadata is no longer needed
  • Testing and debugging AAC decoder implementations where a minimal, container-free bitstream is easier to inspect than an MP4-wrapped file

Frequently Asked Questions

Yes, there will be a small quality loss because this conversion re-encodes the audio rather than simply copying the stream. The M4A container stores AAC in MP4FF framing, while a .aac file requires ADTS framing — these are incompatible at the bitstream level, so FFmpeg must decode and re-encode. To minimize degradation, set the output bitrate (-b:a) to match or exceed the original M4A's bitrate. Re-encoding AAC at the same bitrate typically introduces only subtle artifacts, but for archival purposes you may prefer to keep the original M4A.
Although both formats carry AAC audio, the bitstream packaging is different. M4A wraps AAC in MPEG-4 File Format (MP4FF) with LATM/LOAS or raw_stream framing and stores decoder configuration in a side-channel 'esds' atom. Raw .aac files use ADTS (Audio Data Transport Stream), where each frame is self-describing with a sync word and header. FFmpeg cannot simply copy (-c:a copy) M4A-packaged AAC into an ADTS .aac file because the frame headers must be reconstructed, which requires a full decode-and-encode cycle.
No. Raw ADTS AAC files have no container structure to hold metadata, so chapter markers, track titles, artist names, artwork, and all iTunes-style tags present in the M4A will be lost. If preserving this metadata is important, consider keeping the original M4A or converting to a container format like MP4 or MKV that supports both AAC audio and rich metadata. The .aac format is purely an audio bitstream with no sidecar data support.
Replace the value after -b:a in the command. For example, to encode at 192 kbps use: ffmpeg -i input.m4a -c:a aac -b:a 192k output.aac. Available options include 64k, 96k, 128k, 192k, 256k, and 320k. Since this conversion involves re-encoding an already-lossy source, choosing a bitrate below the original M4A's bitrate will noticeably reduce quality, while going higher will not recover lost detail but will produce a larger file.
Yes, with a simple shell loop. On Linux or macOS: for f in *.m4a; do ffmpeg -i "$f" -c:a aac -b:a 128k "${f%.m4a}.aac"; done. On Windows Command Prompt: for %f in (*.m4a) do ffmpeg -i "%f" -c:a aac -b:a 128k "%~nf.aac". Each file is processed sequentially, and the output filename is derived from the input by replacing the .m4a extension with .aac.
Compatibility is more limited than M4A. Most dedicated audio players (VLC, foobar2000, Windows Media Player) can play ADTS .aac files. However, web browsers do not natively support raw .aac as a source element — they expect AAC wrapped in an MP4 or fragmented MP4 container. For web playback, M4A (or .mp4 with AAC) is the better choice. Raw .aac is best suited for technical pipelines like streaming ingest, hardware decoders, and broadcast tools rather than end-user playback.

Technical Notes

The key technical distinction in this conversion is the difference between ADTS-framed AAC (the .aac file format) and MP4FF-wrapped AAC (used inside .m4a). ADTS frames each include a 7- or 9-byte sync header containing sampling rate, channel count, and frame length, making the stream self-synchronizing and seekable at the frame level without an index. MP4FF stores this information once in the file's 'esds' box and uses a separate 'stts'/'stsc' index for seeking, which is more efficient for random access but requires the full container to be parsed. FFmpeg's built-in AAC encoder (used here as -c:a aac) is a native implementation that is freely available in all builds; the higher-quality libfdk_aac encoder exists but requires a separately compiled FFmpeg build due to licensing. For most M4A sources encoded at 128k or above, the built-in encoder at matching bitrate produces transparent or near-transparent results for typical listening. Note that gapless playback metadata (iTunSMPB tags used in M4A for seamless album playback) cannot be represented in raw ADTS AAC, so gapless album rips may have audible gaps or pops at track boundaries after conversion.

Related Tools