How to split stereo channels in your browser with ffmpeg
- Step 1Open the tool — no install needed — The FFmpeg 8.1 WebAssembly core loads on demand the first time you run a job (it fetches the core assets, then caches them). No binary to download or add to PATH.
- Step 2Add a stereo file — Drop in any stereo
.wav,.mp3,.m4a,.flac,.ogg, or.opus. The file is read into the WASM filesystem in-page; nothing is uploaded. - Step 3Run the split — The tool executes
[0:a]channelsplit=channel_layout=stereo[left][right]and maps each channel to its own output. No flags or options to configure. - Step 4Collect two mono WAV outputs — Two files appear:
-1(left) and-2(right), each mono 16-bit PCM WAV at the source sample rate. Download all, or grab one. - Step 5Verify against your CLI expectations — The result matches what a local
ffmpeg ... channelsplit ... -map "[left]" left.wav -map "[right]" right.wavwould produce, except both outputs are PCM WAV here regardless of input. - Step 6Continue the pipeline in-browser — Re-encode with wav-to-mp3, resample with sample-rate-converter, or recombine with audio-merger — all on the same WASM engine, still no upload.
Browser FFmpeg vs local CLI
What you get here versus running channelsplit on a local FFmpeg install.
| Aspect | This tool (browser) | Local FFmpeg CLI |
|---|---|---|
| Filter run | channelsplit=channel_layout=stereo | channelsplit=channel_layout=stereo |
| Engine | FFmpeg 8.1 compiled to WASM | Native FFmpeg binary |
| Install | None — runs in the tab | Install + PATH + codecs |
| Output codec | Always WAV (pcm_s16le) | Your choice via -c:a |
| Output mapping | [left]→file 1, [right]→file 2 | Whatever you -map |
| Where files go | Stay in the browser (no upload) | Stay on your machine |
The exact graph
The fixed command this tool runs, mirrored to the equivalent CLI invocation.
| Step | What runs |
|---|---|
| Input | -i <yourfile> |
| Filter | -filter_complex "[0:a]channelsplit=channel_layout=stereo[left][right]" |
| Left out | -map "[left]" -c:a pcm_s16le <name>-channel.wav (file -1) |
| Right out | -map "[right]" -c:a pcm_s16le <name>-channel.wav (file -2) |
| Guard | Rejects input unless channel count is exactly 2 |
Tier limits
Audio family. Duration cap is per file and separate from the size cap.
| Tier | Max size | Max duration | Files/run |
|---|---|---|---|
| Free | 50 MB | 30 min | 1 |
| Pro | 200 MB | 120 min | 10 |
| Pro + Media | 100 GB | Unlimited | 100 |
| Developer | 100 GB | Unlimited | Unlimited |
Cookbook
What the browser engine runs, shown as the CLI equivalent you'd type locally. Output here is always WAV.
The exact in-browser invocation
This is the filter graph and mapping the tool runs for you. You don't type it — but here's what executes under the hood.
ffmpeg -i input.wav \ -filter_complex "[0:a]channelsplit=channel_layout=stereo[left][right]" \ -map "[left]" -c:a pcm_s16le input-channel.wav # -> file -1 -map "[right]" -c:a pcm_s16le input-channel.wav # -> file -2
From a locked-down work laptop
IT won't let you install FFmpeg, but the browser runs WASM fine. Same result, no admin rights.
Constraint: no software install allowed Drop stereo file -> run -> download two mono WAVs No binary touched the disk; nothing uploaded.
On a Chromebook or phone
No native FFmpeg available, but the WebAssembly core runs in mobile/Chrome OS browsers.
Device: Chromebook (no Linux container) FFmpeg 8.1 WASM loads in the tab -> split -> two WAV files saved to Downloads.
Why output is WAV even from an MP3
Locally you'd pick the codec; here it's fixed to PCM WAV. That avoids accidentally adding a lossy generation during the split.
Local CLI: -map "[left]" -c:a libmp3lame left.mp3 (lossy) This tool: -map "[left]" -c:a pcm_s16le ...-1.wav (lossless) Re-encode after with wav-to-mp3 if you want MP3.
Same stereo guard as channelsplit
Just like the CLI filter expects a stereo layout, this tool refuses non-stereo input rather than producing garbage.
Input: surround51.wav (6ch) Result: Error -> "Channel splitter requires a stereo input." Matches the CLI: channel_layout=stereo expects 2 channels.
Edge cases and what actually happens
First run is slower while the WASM core loads
ExpectedThe FFmpeg 8.1 WebAssembly core is fetched and initialised on the first job, then cached for subsequent runs. The first split therefore includes a one-time load; later splits start immediately.
Non-stereo input
Rejected (requires stereo)The tool guards on a channel count of exactly 2. Mono and multichannel files are rejected with Channel splitter requires a stereo input. — the same expectation as channel_layout=stereo on the CLI.
Output codec can't be chosen
By designUnlike a local CLI run where you pass -c:a, this tool always writes pcm_s16le WAV. This is intentional to keep the split lossless. Use wav-to-mp3 or bitrate-changer to re-encode.
Single-thread vs multi-thread WASM
SupportedThe engine uses a multi-threaded FFmpeg core where the browser supports the required cross-origin isolation, and falls back to single-thread otherwise. Channel splitting is fast either way since it does no heavy DSP.
Browser without WebAssembly / very old browser
Unsupported environmentThe engine requires a modern browser with WebAssembly. On an environment that lacks it, the core won't load. Use a current Chrome, Edge, Firefox, or Safari.
Core assets blocked by a strict network
Load errorIf your network blocks the CDN that serves the FFmpeg core, you may see a core-load error. The fix is network access to the core assets (or a self-hosted copy); the split logic itself is unchanged.
Joint-stereo or VBR MP3 input
SupportedFFmpeg decodes joint-stereo and VBR MP3 to discrete PCM before splitting, so the two output channels are correct. The WAV outputs carry no MP3 encoding state.
Expecting a ZIP download
By designThe two outputs are offered as separate downloads (Download all or per-file), not a single ZIP. Save both.
Frequently asked questions
Is this really FFmpeg, or a re-implementation?
It is real FFmpeg — version 8.1 compiled to WebAssembly and run in your browser. The channelsplit=channel_layout=stereo filter that executes is the same code path as a native FFmpeg build, just running in WASM.
Do I need to install anything?
No. The WASM core loads in the page on first use and is cached afterwards. There's no binary, PATH change, or codec pack to manage — handy on locked-down or admin-restricted machines.
Can I choose the output codec like I would with -c:a?
No — this tool fixes the output to 16-bit PCM WAV to keep the split lossless. For other formats, run the output through wav-to-mp3, wav-to-flac, or bitrate-changer.
What exact command does it run?
ffmpeg -i <file> -filter_complex "[0:a]channelsplit=channel_layout=stereo[left][right]" -map "[left]" -c:a pcm_s16le <out1> -map "[right]" -c:a pcm_s16le <out2>. File -1 is the left channel, -2 is the right.
Why does it reject my file?
The filter expects a stereo layout, so the tool requires exactly 2 channels and shows Channel splitter requires a stereo input. for mono or multichannel files. That mirrors how channel_layout=stereo behaves on the CLI.
Is my file uploaded to run FFmpeg?
No. The WebAssembly engine reads your file into an in-memory filesystem in the browser tab and processes it there. Nothing is sent to a server — the same privacy profile as running FFmpeg locally.
Will it work on a Chromebook or phone?
Yes, on a modern browser that supports WebAssembly. There's no native FFmpeg on those devices, which is exactly where the browser engine is most useful.
Is the first run slower?
Slightly — the core is downloaded and initialised the first time, then cached. Subsequent splits in the same session start right away.
Does it use multiple threads?
It uses a multi-threaded FFmpeg core when the browser provides the required cross-origin isolation, otherwise single-thread. Channel splitting is lightweight, so the difference is small for this operation.
Can I batch many files?
Per-run file counts follow your tier (Free 1, Pro 10, Pro + Media 100, Developer unlimited). The audio engine is a single WASM instance, so jobs serialise rather than running truly in parallel.
What if the core fails to load?
That's usually a network policy blocking the CDN serving the FFmpeg core. Allow access to the core assets (or self-host them). The split logic is unaffected once the core loads.
How big a file can it handle?
Free allows 50 MB / 30 minutes per file; Pro 200 MB / 120 minutes; Pro + Media 100 GB with unlimited duration. WASM also has practical memory limits, so extremely large uncompressed WAVs benefit from a higher tier and a capable machine.
Privacy first
Every JAD Audio tool runs entirely in your browser via FFmpeg (WebAssembly) and RNNoise. Your audio files never leave your device — verified by zero outbound network requests during processing.