← All posts
AudioPublished · 8 min read

Convert WAV to MP3 on Windows with nothing installed

You trim a clip, the file lands as `.wav`, and ten seconds of it is 1.7MB. That is awkward to email and worse to put on a phone. WAV stores sound uncompressed, so the size is arithmetic, not a bug. The good news: Windows already contains an MP3 encoder, so a folder of WAVs can become MP3s with nothing installed. Below is the command, the sizes I measured at each quality setting, and what online converters actually do with your file.

Free tool featured in this guide
Audio cutter — keep just the part you want

Cuts a selection and saves it as lossless WAV. When that file is too big to send, this guide turns it into an MP3.

Open the free tool →

Why the WAV is so big

WAV stores samples as-is, with no compression, so the size is pure arithmetic. At CD quality (44,100Hz, 16-bit, stereo) that is 176,400 bytes per second — about 1.7MB for ten seconds. The test file I generated for this guide is exactly 1,764,044 bytes.

Nothing is thrown away, which is why WAV is the right container while you are still editing. It is only a problem when the file has to travel: mail attachments, messengers and phone storage all care about the difference, so finished files usually ship as MP3.

ℹ️

That is also why an in-browser trimmer gives you WAV. Browsers have no MP3 encoder. Ask Chrome what MediaRecorder supports and the only audio containers that come back true are WebM/Opus and MP4/AAC — audio/mpeg is false. Emitting MP3 means shipping an encoder with the page, so tools that promise no-install and no-upload write WAV instead.

Three routes. If the audio should not leave your machine, the first one is the answer.

Route 1 — the encoder already in Windows

Windows includes a media pipeline (Media Foundation) with an MP3 encoder, and PowerShell can drive it through WinRT. Nothing to download. Paste this block into a PowerShell window and every WAV in the folder comes out as an MP3 beside it.

powershell
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 .wav files
$folder  = Wait-Op ([Windows.Storage.StorageFolder]::GetFolderFromPathAsync($folderPath)) ([Windows.Storage.StorageFolder])
$profile = [Windows.Media.MediaProperties.MediaEncodingProfile]::CreateMp3("High")

Get-ChildItem "$folderPath\*.wav" | 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. Originals are left alone; an .mp3 appears next to each .wav. Every file prints a line like clip1.wav -> clip1.mp3, and anything that could not be converted prints the reason instead.

⚠️

The Wait-Op / Wait-Act helpers at the top look like ceremony but they are the point: WinRT calls are asynchronous, and without waiting you measure a file that is still being written. That is how I first got a 4KB "result" from a ten-second clip.

The three quality presets, measured

Swap CreateMp3("High") for Medium or Low to change quality. Same 1,764,044-byte source, three runs:

PresetBitrateResultvs the WAV
High192 kbps · 48 kHz241,775 bytes7.3× smaller
Medium128 kbps · 44.1 kHz160,976 bytes11×
Low96 kbps · 44.1 kHz120,936 bytes14.6×

Use High for music; Medium is plenty for speech. One detail worth knowing: High also resamples to 48 kHz. If the source is 44.1 kHz and you would rather keep it there, Medium stays at 44.1.

Four places this goes wrong. Work out where it stopped and the fix is obvious.

Route 2 — an online converter

For one file in a hurry, the converter sites in the search results are quick. Just know what they do: they upload your file, convert it on a server, and hand back a download. Fine for a song. Worth a second thought for a meeting recording, a phone call, or anything with a family member's voice in it.

There is no client-side alternative for this direction, for the reason above — no MP3 encoder in the browser. A "no-upload WAV to MP3 converter" essentially does not exist. If uploading is not acceptable, route 1 or 3 is the honest answer.

Route 3 — an audio editor, if this repeats

If you are also trimming, fading and adjusting levels, keep an editor around. Audacity is the common free choice and exports MP3 directly; ffmpeg is the command-line equivalent. Both need installing, so for a one-off, route 1 is less work.

Before you convert

It is one-way. MP3 saves space by discarding detail your ears are least likely to miss. Converting the MP3 back to WAV restores the file size, not the sound.

Keep the original. If there is any chance of re-editing, hold on to the WAV. Editing an MP3 and saving as MP3 again compresses twice, and it shows.

If size is the real goal, look at length first. Five minutes at 192kbps is about 7MB; trimming to the 30 seconds you actually need cuts that tenfold before any encoding decision. Trim first, then convert.

FAQ

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. Can I get something other than MP3?

Yes — CreateM4a in place of CreateMp3 produces M4A (AAC), which suits Apple devices better.

Q. Does the MP3 sound worse than the WAV?

Strictly, yes. At 192kbps the difference is hard to hear on normal playback gear. The usual practice is to keep the WAV as the editing master and share the MP3.

Q. The command is long — do I have to paste it every time?

No. Save it as wav2mp3.ps1, edit the folder path once, and run the file from PowerShell from then on.

Q. Why can't the browser tool just give me an MP3?

Because browsers have no MP3 encoder. In Chrome, the only audio types MediaRecorder reports as supported are WebM/Opus and MP4/AAC. Producing MP3 means bundling an encoder into the page, so no-install, no-upload tools save WAV instead.

Free tool featured in this guide
Audio cutter — keep just the part you want

Cuts a selection and saves it as lossless WAV. When that file is too big to send, this guide turns it into an MP3.

Open the free tool →

More posts