How to batch convert MP3 files to WAV
Converting one file is trivial. Converting two hundred is a different problem. Here are three methods that actually run, and how to tell which one fits the job in front of you.
Contents
Converting a single MP3 to WAV takes seconds. A folder of two hundred is a different kind of task, and clicking through them one at a time stops being realistic almost immediately. Whether you are standardising a sample library, preparing episodes for post-production or moving an archive into a lossless format, you want a method that scales.
When batch conversion is the right move
- Sample libraries. A library in one consistent uncompressed format behaves predictably across hosts and projects.
- Podcast archives. Editing and broadcast workflows are built around uncompressed audio; converting the archive once prepares all of it.
- Collaboration handoffs. Stems and source files sent to another engineer are expected as
WAV. - Archival. Long-term preservation favours formats that are not tied to a lossy reconstruction step.
Worth stating up front so nothing below oversells itself: converting MP3 to WAV changes the container, not the content. What the encoder discarded is gone. Batch conversion gives you consistency and compatibility across a collection — see what actually differs between the two formats for why that distinction matters.
Method 1: in the browser
The simplest route needs no setup at all. Open the converter in any modern browser and add your files. Conversion runs locally using WebAssembly, so nothing is uploaded — the audio never leaves the machine it is already on.
This suits small batches and one-off jobs, and it is the only method here that works on a device where you cannot install software. For confidential material it has a specific advantage: there is no server in the path to trust, which the privacy article covers in detail. For a directory of several hundred files, one of the command-line methods below will be quicker.
Method 2: ffmpeg on the command line
If you are comfortable in a terminal, ffmpeg is the standard tool for this and will chew through a large directory quickly.
Install it first. On macOS with Homebrew, brew install ffmpeg. On Debian or Ubuntu, sudo apt install ffmpeg. On Windows, download a build from the official ffmpeg site and add it to your PATH.
Then move into the folder holding your MP3 files and run the loop for your shell.
macOS and Linux
for f in *.mp3; do ffmpeg -i "$f" "${f%.mp3}.wav"; done
Windows Command Prompt
for %f in (*.mp3) do ffmpeg -i "%f" "%~nf.wav"
Both do the same thing: iterate over every file ending in .mp3 in the current directory, hand each one to ffmpeg as input, and write a WAV alongside it. The ${f%.mp3} expansion — and %~nf on Windows — strips the extension so the output keeps the original name.
Two things to watch. Output lands in the same directory unless you say otherwise, so create a destination folder and write into it if you want the originals kept separate. And if any filename contains spaces, keep the quotes exactly as written above.
Method 3: Python with pydub
Reach for a script when the job is more than a format change — resampling, channel conversion, level normalisation, or picking out a subset of files by name.
Install the library with pip install pydub. It shells out to ffmpeg for decoding, so ffmpeg needs to be installed as well.
from pydub import AudioSegment
import os
input_dir = "./mp3_files"
output_dir = "./wav_files"
os.makedirs(output_dir, exist_ok=True)
for filename in os.listdir(input_dir):
if filename.endswith(".mp3"):
audio = AudioSegment.from_mp3(os.path.join(input_dir, filename))
audio.export(
os.path.join(output_dir, filename.replace(".mp3", ".wav")),
format="wav",
)
print(f"Converted: {filename}")
Save it as convert.py, point input_dir and output_dir at your own folders, and run python convert.py.
The value here is what you can insert before the export call. audio.set_frame_rate(48000) resamples, audio.set_channels(1) folds to mono, and audio.normalize() adjusts level. Each of those is one line in the same loop, which is the whole reason to script it rather than run ffmpeg directly.
Choosing between the three
| Method | Setup required | Practical batch size | Best for |
|---|---|---|---|
| Browser | None | Small batches | Occasional jobs, confidential audio, machines you cannot install on |
| ffmpeg | Install ffmpeg | Whole directories | Straight format conversion at volume |
| Python and pydub | Python, pydub and ffmpeg | Whole directories | Conversion plus resampling, mono folding or normalisation |
If you need a handful of files right now, the browser is the shortest path. If this is a recurring task or the collection is large, the few minutes spent installing ffmpeg pay for themselves on the first run. And if the conversion is one step inside a longer preparation routine, write the script — you will run it more than once. When the destination is a session rather than an archive, preparing files for a DAW covers what to do next.