How to Batch Convert Audio Files: FFmpeg and Browser Tools
Convert hundreds of audio files at once using FFmpeg commands or browser tools. Covers AIFF, WMA, and mixed-format library conversion with practical commands.
Single-file converters break down the moment you have a folder of 200 podcast episodes, a 5,000-track music library, or a back-catalog of session WAVs that all need to become FLAC. Batch conversion is its own discipline — different tooling, different speed considerations, different failure modes than one-off conversion. The right approach depends on file count, source format mix, whether metadata needs to survive, and how much CPU you can throw at the problem.
When Batch Conversion Is Worth Setting Up
A few signals that you have a batch problem rather than a single-file problem:
- Library migration. Moving from iTunes M4A to a Plex/Roon FLAC library, or shifting a Windows Media WMA library to MP3 for a non-Microsoft device.
- Podcast back-catalog. Re-encoding old episodes to a smaller bitrate after you switched bitrate strategy partway through a show.
- Sample-pack preparation. A producer downloading 1,200 royalty-free samples and needing them all at 48 kHz mono WAV for a hardware sampler.
- Archive normalization. Forensic, journalism, or research workflows where every recording must end up at the same sample rate, bit depth, and container for downstream tooling.
- Format consolidation after years of mixed sources. Old AIFFs from a Mac, WMAs ripped on Windows in 2008, MP3s from CDs, M4As from iTunes — all sitting in one folder.
For anything below ~30 files, a browser-based converter with multi-file queue support is usually fast enough. Beyond that, scripts and dedicated tools start paying for themselves quickly.
FFmpeg: The Universal Batch Converter
FFmpeg is free, open-source, and handles every audio format. Install it once and convert anything.
Install FFmpeg:
Batch convert a folder on macOS/Linux:
Convert all AIFF files to MP3: 'for f in *.aiff; do ffmpeg -i "$f" -q:a 2 "${f%.aiff}.mp3"; done'
Convert all WMA files to MP3: 'for f in *.wma; do ffmpeg -i "$f" -q:a 2 "${f%.wma}.mp3"; done'
Convert all WAV files to FLAC: 'for f in *.wav; do ffmpeg -i "$f" "${f%.wav}.flac"; done'
The '-q:a 2' flag produces approximately 190 kbps variable bitrate MP3. For fixed 320 kbps, use '-b:a 320k' instead.
Batch convert on Windows (Command Prompt):
Convert all WMA to MP3: 'for %f in (*.wma) do ffmpeg -i "%f" -q:a 2 "%~nf.mp3"'
Convert all AIFF to MP3: 'for %f in (*.aiff) do ffmpeg -i "%f" -q:a 2 "%~nf.mp3"'
Recursive batch conversion (all subfolders):
On macOS/Linux: 'find . -name "*.wma" -exec ffmpeg -i {} -q:a 2 {}.mp3 ;'
Note: this names files 'song.wma.mp3' — for cleaner naming, use a Python script or the find/sed combination.
GUI Tools for Non-Technical Users
fre:ac (Windows, Mac, Linux — free): Drag an entire folder, choose output format, run. Handles WMA, MP3, FLAC, AAC, OGG. Supports parallel processing (converts multiple files simultaneously). Good for most use cases.
dBpoweramp (Windows, Mac — $38): Professional-grade. Batch conversion with AccurateRip CD ripping, metadata preservation, format detection. Worth the price for large libraries.
XLD (Mac — free): Excellent for CD ripping and lossless conversion. Supports batch FLAC to MP3, WAV to FLAC, etc.
MediaHuman Audio Converter (Mac — free, Windows): Drag-and-drop batch converter with a simple interface. Handles most common format pairs.
Handling Mixed-Format Libraries
Old music libraries often contain a mix: some AIFF, some WMA, some MP3, some WAV. Convert all to FLAC for archiving (the lossless formats stay identical quality; the lossy formats stop accumulating generation loss). Then keep the FLAC library as your master and generate MP3 for devices as needed.
FFmpeg batch for a mixed library — convert everything to FLAC (skip files already FLAC): 'find . -type f ( -name ".aiff" -o -name ".wav" -o -name "*.m4a" ) -exec ffmpeg -i {} {}.flac ;'
Preserving Metadata During Batch Conversion
FFmpeg copies metadata (artist, album, track number, year) by default when converting between formats. Add '-map_metadata 0' explicitly if you want to ensure metadata is transferred: 'ffmpeg -i input.wma -map_metadata 0 -q:a 2 output.mp3'
fre:ac and dBpoweramp also preserve metadata by default.
Speed Considerations
FFmpeg processes sequentially by default (one file at a time). On macOS/Linux, use GNU Parallel for multi-core batch processing: 'find . -name "*.aiff" | parallel ffmpeg -i {} -q:a 2 {.}.mp3'
This runs one FFmpeg process per CPU core. On an 8-core machine converting 200 AIFFs, the wall time drops from roughly 30 minutes to about 4. Each parallel worker gets its own FFmpeg instance — the audio decoder is single-threaded per file but the OS schedules them across cores.
SoX as an FFmpeg Alternative
Sound eXchange (SoX) is the other major command-line audio swiss-army knife. It is older than FFmpeg, more focused on audio (no video at all), and sometimes preferred for sample-rate conversion because its rabbit resampler is class-leading. Install: 'brew install sox' on Mac, 'apt install sox' on Linux. Batch loop:
'for f in *.wav; do sox "$f" -r 48000 -c 1 "converted/${f%.wav}.wav"; done'
SoX cannot write MP3 without the LAME library compiled in (most Homebrew builds include it). For lossless-to-lossless conversions and high-quality sample-rate changes, SoX is often a better choice than FFmpeg.
Browser-Based Batch Queueing
AudioUtils, Online Audio Converter, and Convertio all support multi-file queueing: drop 20–50 files at once and the converter processes them sequentially in the same browser tab. AudioUtils runs FFmpeg via WebAssembly entirely in-page, so the queue does not upload anywhere — useful for sensitive content (legal recordings, unreleased music). Practical ceiling is around 100 files or 1 GB total before the tab gets sluggish; for libraries beyond that, scripts win.
Error Handling in Batch Loops
A single corrupt file in a 500-file batch will halt a naive shell loop. Add error tolerance:
'for f in *.wav; do ffmpeg -i "$f" -b:a 192k "${f%.wav}.mp3" 2>> errors.log || echo "FAILED: $f" >> errors.log; done'
The '|| echo' fallback logs failures and continues. The '2>>' redirect captures FFmpeg's stderr for diagnostics. Run 'wc -l errors.log' afterward to see how many files failed.
For mission-critical batches, validate output afterward: 'find . -name "*.mp3" -size -10k -ls' surfaces any output files smaller than 10 KB (likely encoding failures).
When Batch Conversion Goes Wrong
Common failures:
- Filename special characters. Spaces, parentheses, ampersands, and quotes break naive shell loops. Always wrap filename variables in double quotes ("$f") and use 'find -print0' with 'xargs -0' for paths with newlines.
- Sample-rate mismatch in a target format. Some MP3 encoders reject 96 kHz input. Force a downsample: '-ar 48000'.
- Metadata corruption. ID3v2.4 tags with embedded album art larger than 65 KB can break older players. Strip art with '-map_metadata 0 -map 0:a' if needed.
- Disk space. Converting 500 GB of WAV to FLAC saves space (~50%) but converting WAV to AAC at 256 kbps saves much more (~95%). Plan accordingly.
For platform-specific guidance, see how to convert audio on Mac, WMA to MP3 guide, and AIFF to MP3 guide. For the conceptual side of choosing target bitrates, see audio bitrate guide by use case. And when the batch problem is one long file rather than many — a 4-hour DJ set, a continuous lecture recording, an unsplit live album — split the audio into separate tracks before running the conversion loop so each output gets its own filename and metadata.