How to resample audio to 16 khz for openai whisper — free
- Step 1Know the target: 16 kHz mono WAV — Whisper runs at 16 kHz mono. That is the shape to aim for — a 16 kHz, single-channel WAV.
- Step 2Pick the path that reaches 16 kHz — The in-browser sample-rate-converter outputs 44.1 kHz only. To hit 16 kHz, use JAD's programmatic API (
sampleRate: 16000) or, for audio inside a video, video-to-wav, which has a 16 kHz option. - Step 3Drop or submit your source — Provide your recording (
.wav,.mp3,.m4a,.flac,.ogg,.opus, or a video for video-to-wav). The source rate is detected automatically. - Step 4Set 16 kHz (and mono) — On the API set
sampleRate: 16000; for mono, set channels to 1 (or use channel-splitter / a mono export). Whisper prefers a single channel. - Step 5Get your 16 kHz file — Download/receive the 16 kHz WAV. Confirm the rate reads 16,000 Hz before batching.
- Step 6Send to Whisper — Upload the pre-resampled 16 kHz mono file to the Whisper API. Smaller payload, no server-side resample surprises, identical transcription quality.
Whisper's expected input vs your raw recording
Whisper internally resamples to 16 kHz mono; sending that shape avoids redundant conversion and large uploads.
| Property | Typical raw recording | Whisper-preferred | How JAD reaches it |
|---|---|---|---|
| Sample rate | 44.1 / 48 kHz | 16 kHz | Programmatic API (16000) or video-to-wav 16 kHz |
| Channels | Stereo | Mono | API channels=1 or channel-splitter |
| Format | MP3 / M4A / WAV | WAV (PCM) | WAV output from the rate tools |
| Where converted | Whisper's server | Your device, beforehand | FFmpeg WASM, no upload |
Which JAD path gives a true 16 kHz file
Verified against the client, processor, and MCP schema. The in-browser sample-rate page cannot output 16 kHz.
| Path | Reaches 16 kHz? | Mono? | Notes |
|---|---|---|---|
| In-browser sample-rate-converter | No (44.1 kHz fixed) | Preserves source | No rate picker on the page |
| video-to-wav tool | Yes (16 kHz option) | Channels selectable | Best for audio inside a video |
| Programmatic API | Yes (sampleRate 16000) | channels=1 | Full ladder 8–192 kHz |
| channel-splitter | n/a | Produces single channels | Pair with a rate step for 16 kHz mono |
Tier limits for this tool
From lib/tier-limits.ts (audio family). Duration is a separate cap from file size.
| Tier | Max file size | Max duration | Files per 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
Whisper-prep recipes. The honest note throughout: the in-browser sample-rate page outputs 44.1 kHz, so 16 kHz comes from the API or video-to-wav.
Interview MP3 → 16 kHz mono WAV (API path)
A 48 kHz stereo interview MP3 is the classic Whisper input. Target 16 kHz mono to slash the upload size without hurting transcription.
Source: interview.mp3 48,000 Hz, 2ch
API: { sampleRate: 16000, channels: 1, format: "wav" }
Output: interview.wav 16,000 Hz, 1ch, 16-bit PCM
Upload size: a small fraction of the original.Audio inside a video → 16 kHz with video-to-wav
When the source is a video file, video-to-wav extracts and resamples in one step and exposes a 16 kHz option.
Source: lecture.mp4 (48 kHz audio track) video-to-wav → 16 kHz, mono Output: lecture.wav 16,000 Hz, 1ch → ready for Whisper
What the in-browser page actually gives you
Drop a file on the sample-rate-converter page and you get 44.1 kHz — not 16 kHz. Useful for knowing why your 'Whisper file' is the wrong rate.
Page input: podcast.wav 48,000 Hz Page output: podcast.wav 44,100 Hz ← NOT 16 kHz For Whisper, use the API or video-to-wav instead.
Stereo → mono for the model
Whisper prefers mono. If your file is stereo, fold to mono as part of the prep so you are not sending two channels of the same speech.
stereo_call.wav 16,000 Hz, 2ch → channels=1 (API) → 16,000 Hz, 1ch or channel-splitter to isolate one channel.
Batch prep before bulk transcription
For thousands of clips, pre-resampling to 16 kHz mono saves real bandwidth and time. The programmatic API is the right tool for batches.
for each clip:
API { sampleRate: 16000, channels: 1, format: "wav" }
then POST each 16 kHz mono WAV to Whisper.
Result: smaller payloads, no per-file server resample.Edge cases and what actually happens
Using the in-browser page to make a 16 kHz file
Wrong outputThe web sample-rate-converter outputs 44.1 kHz with no picker, so it will not produce the 16 kHz file Whisper wants. Use the programmatic API (sampleRate: 16000) or video-to-wav's 16 kHz option instead.
Forgetting to fold to mono
SuboptimalWhisper prefers mono. A 16 kHz stereo file is twice the size for no transcription benefit. Set channels to 1 in the API or use channel-splitter.
Whisper resamples anyway — is prep pointless?
Still worth itWhisper resamples server-side regardless, but pre-resampling cuts your upload size and removes a step you do not control. For batches and slow links the bandwidth saving is the whole point; transcription quality is unchanged.
Upsampling a low-rate clip to 16 kHz
No accuracy gainIf your source is already below 16 kHz (e.g. an 8 kHz phone recording), upsampling to 16 kHz adds no new detail and does not improve transcription — Whisper handles the lower rate fine.
Source longer than the tier duration cap
RejectedFree caps at 30 minutes, Pro at 120 minutes — separate from the MB cap. Long lectures may exceed the minutes limit; split with audio-splitter before prepping, which also helps stay under Whisper's own per-request size limit.
Heavy background noise in the recording
Pre-clean firstResampling does not denoise. For noisy speech, run ai-noise-reducer (RNNoise) before resampling — cleaner input often improves transcription accuracy more than the rate change does.
Quiet or uneven levels
Optional stepIf the recording is very quiet, normalising can help downstream tools. Use loudness-normalizer before resampling; resampling itself does not change levels.
Expecting FLAC/Opus output for Whisper
Use WAVWAV (PCM) is the safest, most predictable input. The rate tools output WAV; that is exactly what you want for transcription rather than a compressed format that has to be decoded again.
Safari can't preview the source
PreservedSafari's Web Audio decoder may not render the on-page preview for some FLAC/Opus files, but FFmpeg decodes them independently, so conversion still works.
Frequently asked questions
What sample rate does Whisper want?
16 kHz mono. Whisper resamples to that internally, so providing a 16 kHz mono file means no redundant server-side conversion and a much smaller upload.
Can JAD's in-browser tool make a 16 kHz file?
Not the sample-rate-converter page — it outputs 44.1 kHz WAV with no rate picker. Reach 16 kHz through JAD's programmatic API (sampleRate: 16000) or, for video sources, video-to-wav, which has a 16 kHz option.
Why pre-resample if Whisper does it anyway?
To cut upload size and transfer time, and to control the conversion yourself. For one file it barely matters; for batch transcription over a normal connection, sending 16 kHz mono instead of 48 kHz stereo is a large, real saving. Transcription quality is the same either way.
Does Whisper need mono specifically?
It prefers mono and works on a single channel internally. A stereo 16 kHz file is just twice the size for the same result, so fold to mono with the API (channels=1) or channel-splitter.
Will downsampling to 16 kHz hurt transcription accuracy?
No — 16 kHz is Whisper's native rate. You only discard frequency content above 8 kHz, which carries little speech intelligibility. The audible speech band is fully preserved.
Should I upsample an 8 kHz phone call to 16 kHz?
No need. Upsampling adds no real detail. Whisper handles an 8 kHz file fine; converting up just makes the file bigger without improving accuracy.
What output format should I send?
WAV (PCM). It is uncompressed and unambiguous, which is ideal for a transcription pipeline. The rate tools output WAV by design.
Is my audio uploaded during prep?
The conversion runs locally via FFmpeg WebAssembly, so the raw file is processed in your browser. (The Whisper upload itself, of course, goes to OpenAI — but you control exactly what you send.)
How do I handle a 2-hour recording?
Free tier caps at 30 minutes and Pro at 120 minutes per file (separate from MB). Long recordings should be split with audio-splitter first — which also keeps you under Whisper's per-request size limit.
My audio is noisy — fix that before or after resampling?
Before. Run ai-noise-reducer (RNNoise speech model) on the speech first, then resample. Cleaner input frequently helps transcription more than the rate change itself.
Does resampling change loudness?
No. Rate conversion does not touch levels. If the recording is too quiet, normalise separately with loudness-normalizer.
Which tools complete the Whisper-prep chain?
video-to-wav (16 kHz from video), channel-splitter (mono), ai-noise-reducer (denoise), audio-splitter (chunking), plus the downsample guide.
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.