WebM → MP3
WebM to MP3 converter
The audio track is pulled out of the Matroska/WebM container — normally Opus, sometimes Vorbis — and re-encoded to MP3. Any video track is discarded.
…or drag files and folders here. Add as many as you like — everything is processed on this device.
.m4v .mkv .mov .mp4 .oga .ogg .opus .qt .weba .webm
In one paragraph
WebM is what the browser itself produces. Anything recorded with MediaRecorder — Loom-style screen capture, a voice note in a web app, an OBS browser output, a downloaded stream — tends to arrive as .webm with an Opus track inside. Most desktop audio software and almost all portable hardware will not open it.
This page reads the Matroska structure, extracts the audio, and writes an MP3. It works even in Safari, which has partial WebM support, because the decoding happens in a self-hosted WebAssembly engine rather than in the browser’s media stack.
Does this change the audio quality?
Opus is the most efficient lossy codec in common use, so a 64 kbps Opus track can sound like a 128 kbps MP3. Transcoding to MP3 always needs a higher bitrate than the source to avoid adding audible damage on top of the Opus encode.
- Browser recordings are frequently 48 kHz mono at a variable bitrate. Converting to stereo doubles the file size without adding information.
- MediaRecorder output sometimes has no duration in its header, so progress is estimated from bytes processed until the stream ends.
- A .webm containing only video is reported as unsupported instead of producing a silent MP3.
A worked example
Turning a week of browser voice notes into podcast-ready audio
- Drop all the .webm recordings into the queue.
- Choose the Podcast/voice preset: mono, 96 kbps, normalised to −16 LUFS.
- Watch the per-file loudness measurement — recordings made at different mic distances end up at the same perceived level.
- Download the ZIP; the manifest records the measured input loudness and the gain applied to each file.
Give Opus sources some headroom
Because Opus is more efficient than MP3, encode one step above what looks equivalent: a 64 kbps Opus voice track deserves 96–128 kbps MP3, and a 128 kbps Opus music track deserves 192 kbps. Going lower stacks MP3 artefacts on top of Opus artefacts, which is where transcoded audio starts to sound obviously processed.
Supported formats, limits and browser notes
Sonic Batch decodes with the browser when it can (faster, no engine download) and falls back to the self-hosted WebAssembly engine when it cannot. Every combination below works in every listed browser; the column only tells you which decoder does the work.
| Input | What it is | Chrome | Firefox | Safari | iOS |
|---|---|---|---|---|---|
| WebM | Open container used by browser recorders and YouTube downloads. Audio is Opus or Vorbis. | Native | Native | Partial | Partial |
| MOV | QuickTime video from iPhone and DSLR cameras. Audio is normally AAC or PCM. | Partial | Engine | Native | Native |
| MP4 | The standard video container. Its audio track is almost always AAC. | Native | Partial | Native | Native |
| Opus | The best-sounding lossy codec below 128 kbps. Used by WhatsApp, Discord and YouTube. | Native | Native | Partial | Partial |
| OGG | Royalty-free lossy codec. Standard in game engines, Godot, Unity and Wikimedia. | Native | Native | Engine | Engine |
| Output | Encoder | Bitrates / depth | Sample rates | Tags |
|---|---|---|---|---|
| MP3 | libmp3lame | 32–320 kbps | 8–48 kHz | Yes + artwork |
- Max per file
- 400.0 MB
- Max per queue
- 4.00 GB
- Max duration
- 4:00:00
- Max archive
- 1.50 GB
These are enforced ceilings, checked before any decoding starts, not measured maximums — a file over the limit is rejected rather than allowed to exhaust the tab’s memory. Real-world capacity is lower on older phones, which is why the scheduler runs one file at a time on iOS and Safari.
Where your audio goes
Nowhere. Your file is read from disk into this browser tab with the File API, decoded and encoded by code running in that same tab, and handed back to you as a download. It is never transmitted.
That is a structural property of the application, not a policy promise: there are no API routes, no server actions and no third-party processing services in this project, so there is nothing capable of receiving a file. The page’s Content-Security-Policy also restricts connections to this origin, and the automated test suite includes a browser test that fails if any network request during import, preview, conversion or download carries media bytes.
The trade-off, stated plainly:results live in your tab’s memory until you download them. Closing or reloading the page discards them. There is nothing on a server to recover, because nothing was ever put there.
Troubleshooting
The recording plays in Chrome but the duration jumps around.
MediaRecorder writes WebM without a duration element in some browsers. The player estimates as it goes. Conversion is not affected — the output MP3 gets a correct duration written from the decoded sample count.
The audio is very quiet.
Browser microphone capture often lands around −30 dBFS. Turn on Normalise with the LUFS mode and a −16 LUFS target rather than raising the bitrate.
A file failed with an unknown codec.
Matroska can carry codecs WebM does not officially allow, including AC-3 from some capture tools. The per-file error names the codec it found so you know what you are dealing with.
Frequently asked questions
Is WebM audio the same as Opus?
Not quite: WebM is the container and Opus is usually the codec inside it. Vorbis also appears in older files. Sonic Batch shows the detected codec for each file before you convert.
Can I keep it as Opus instead?
If the goal is a small file and your playback software supports it, yes — use the batch converter and choose Opus as the output, which is a remux-quality path rather than a re-encode where possible.
Does the video get uploaded while it is being read?
No. The file is read from disk into the tab with the File API. Nothing is transmitted; the app has no server endpoint that accepts media.
Why is my 20 MB WebM taking longer than a 20 MB WAV?
WAV needs no decoding — the samples are already there. WebM has to be demuxed and the Opus stream decoded before the MP3 encoder can start.