What an M4A file is, how to open it, and how to turn it into MP3
Someone sends you a recording, it ends in `.m4a`, and either nothing opens it or the site you need to upload it to only accepts MP3. M4A is not a broken file β it is the container Apple reaches for, and Windows has been able to play it for years. Here is what is inside one, why double-clicking sometimes fails anyway, and the conversion command, with the byte counts I measured at each quality setting.
Drop an M4A straight in and cut the section you need. The file never leaves your browser.
What is actually in an M4A
.m4a names a container β a box for audio. What sits inside is almost always AAC. iPhone voice memos, recordings made on a Mac, and tracks bought from iTunes all land in this box. When a recording arrives from a phone and ends in .m4a, the sender was usually on iOS.
The container-versus-contents distinction is what makes this confusing. .mp4 is the same family of box with video in it; .m4a is the audio-only sibling. That is why renaming one to .mp4 often still plays β the internal structure is the same. It is also why renaming solves nothing when a form validates the format: the bytes never changed.
Windows plays M4A out of the box. Unlike HEIC, there is no Store extension to install. If a double-click does nothing, Windows is not failing to read the format β no program is associated with it. Right-click, Open with, Media Player, and it plays.
Converting to MP3 with what Windows already has
Windows ships a media pipeline (Media Foundation) that PowerShell can drive through WinRT. Nothing to download, nothing uploaded. Paste this into a PowerShell window and every M4A in the folder comes out as an MP3 beside it.
Add-Type -AssemblyName System.Runtime.WindowsRuntime
$ms = [System.WindowsRuntimeSystemExtensions].GetMethods()
$op = ($ms | Where-Object { $_.Name -eq 'AsTask' -and $_.GetParameters().Count -eq 1 -and $_.GetParameters()[0].ParameterType.Name -like 'IAsyncOperation*' })[0]
$ap = ($ms | Where-Object { $_.Name -eq 'AsTask' -and $_.GetParameters().Count -eq 1 -and $_.GetParameters()[0].ParameterType.Name -like 'IAsyncActionWithProgress*' })[0]
function Wait-Op($o, $t) { $x = $op.MakeGenericMethod($t).Invoke($null, @($o)); $x.Wait(-1) | Out-Null; $x.Result }
function Wait-Act($a) { $x = $ap.MakeGenericMethod([double]).Invoke($null, @($a)); $x.Wait(-1) | Out-Null }
[Windows.Storage.StorageFile, Windows.Storage, ContentType=WindowsRuntime] | Out-Null
[Windows.Storage.StorageFolder, Windows.Storage, ContentType=WindowsRuntime] | Out-Null
[Windows.Media.MediaProperties.MediaEncodingProfile, Windows.Media, ContentType=WindowsRuntime] | Out-Null
[Windows.Media.Transcoding.MediaTranscoder, Windows.Media, ContentType=WindowsRuntime] | Out-Null
$folderPath = "C:\Users\you\Music" # folder holding the .m4a files
$folder = Wait-Op ([Windows.Storage.StorageFolder]::GetFolderFromPathAsync($folderPath)) ([Windows.Storage.StorageFolder])
$profile = [Windows.Media.MediaProperties.MediaEncodingProfile]::CreateMp3("High")
Get-ChildItem "$folderPath\*.m4a" | ForEach-Object {
$src = Wait-Op ([Windows.Storage.StorageFile]::GetFileFromPathAsync($_.FullName)) ([Windows.Storage.StorageFile])
$dst = Wait-Op ($folder.CreateFileAsync([IO.Path]::ChangeExtension($_.Name, ".mp3"), 1)) ([Windows.Storage.StorageFile])
$t = New-Object Windows.Media.Transcoding.MediaTranscoder
$prep = Wait-Op ($t.PrepareFileTranscodeAsync($src, $dst, $profile)) ([Windows.Media.Transcoding.PrepareTranscodeResult])
if ($prep.CanTranscode) { Wait-Act ($prep.TranscodeAsync()); "$($_.Name) -> $($dst.Name)" }
else { "$($_.Name): $($prep.FailureReason)" }
}Change the folder path and that is the whole job. The original .m4a files are left alone. Each converted file prints a line; anything that could not be converted prints the reason instead.
The Wait-Op / Wait-Act helpers look like ceremony and are not. WinRT calls are asynchronous β skip the wait and you measure a file that is still being written. That is how a ten-second clip first came out as 4KB here.
How much smaller, measured
Starting from the same uncompressed 10-second WAV (1,764,044 bytes), converted with the encoders in Windows:
| Preset | M4A result | vs the WAV |
|---|---|---|
| High | 243,233 bytes | 7.3x smaller |
| Medium | 162,994 bytes | 10.8x |
| Low | 122,926 bytes | 14.4x |
One conclusion falls straight out of that: do not convert M4A to MP3 to save space. At the same preset the two are 0.6% apart. The only good reason to convert is that something on the other end only accepts MP3 β an upload form, an older car stereo, a hardware player.
What to know before converting
It is loss on top of loss. An M4A is already the result of throwing audio away. Encoding it to MP3 throws more away, so the result is worse than an MP3 made from the original would have been. Converting the 243,233-byte M4A here produced a 239,471-byte MP3 β a similar size holding twice-compressed audio.
Going back does not restore anything. Converting that M4A to WAV produced 1,921,106 bytes β larger than the 1,764,044-byte WAV it came from. A lossless container makes the file big again; it does not make the discarded audio reappear.
Keep the original. If there is any chance of editing again, do not delete the M4A β especially for a voice memo, which cannot be recaptured.
If you only need part of it, trim first
An hour-long meeting recording usually contains two useful minutes. Trimming before converting saves far more than any format choice: an hour at 192kbps is over 80MB, while two minutes is under 3MB. Cut first, then convert.
FAQ
Q. Can I just rename the .m4a to .mp3?
No. The extension is a label; the bytes decide the format. The contents are still AAC, so anything that validates the format rejects it.
Q. Does this work on Windows 10?
Yes. It calls media components that ship with Windows, so there is nothing to install. Paste the same block into PowerShell.
Q. Isn't M4A better quality than MP3?
At the same bitrate AAC generally holds up better than MP3. But Windows' High preset uses 192kbps for both, which is why the two files here came out within 0.6% of each other. Quality is not a reason to convert a file you already have as M4A.
Q. I moved an iPhone voice memo to Windows and it won't open.
That is usually a file association rather than a codec problem. Right-click, Open with, Media Player. If it still fails, check the file size β transfers sometimes truncate.
Q. CanTranscode comes back false.
Either the codec is missing or the file is protected. Older iTunes purchases (.m4p) carry DRM and cannot be converted this way.
Drop an M4A straight in and cut the section you need. The file never leaves your browser.