Audio

WhisperX vs faster-whisper vs a hosted speech API

WhisperX, faster-whisper, and a hosted speech-to-text API all turn audio into text. faster-whisper is a CTranslate2 runtime for Whisper models. WhisperX adds alignment and speaker diarization on top of that family. A hosted API (for example OpenAI transcriptions) runs the model in someone else's account. Pick from timestamps, speakers, and where the file may go.

Updated · Part of What is Whisper?

Three ways to transcribe

The model family is Whisper. The product differences are runtime, alignment, diarization, and whether bytes leave the machine.

faster-whisper

faster-whisper (SYSTRAN) reimplements OpenAI Whisper on CTranslate2. You load a Whisper model size and transcribe locally, typically faster than the original OpenAI Whisper Python implementation, with the same model names. It does not, by itself, assign speakers. With word_timestamps=True it also returns word times. Repo: https://github.com/SYSTRAN/faster-whisper

WhisperX

WhisperX (m-bain) is Whisper plus forced alignment, which adds word-level timestamps, and optional speaker diarization. Transcription, alignment, and diarization are separate steps: alignment runs with or without diarization. The default diarization pipeline on WhisperX 3.8+ is pyannote/speaker-diarization-community-1, which needs an accepted HF token. Repo: https://github.com/m-bain/whisperX

Hosted speech-to-text APIs

A hosted API uploads audio and returns text. OpenAI's transcriptions endpoint is one documented hosted path, with model whisper-1. Deepgram, AssemblyAI, Gladia, and others are also hosted STT products. This page does not rank them or quote prices. The shared trait: the file leaves your process, you do not manage CUDA, and word-level speakers depend on that vendor's API.

How to choose

Start from speakers, timestamps, and data-residency, not from a WER bake-off this page did not run.

  • Pick faster-whisper when you want local Whisper text and speed, and you do not need speakers.
  • Pick WhisperX when you need word timestamps and speaker labels on a machine you control.
  • Pick a hosted API when you do not want to run models, or the vendor's SLA is the contract.

Last reviewed

Facts on this page were checked against vendor documentation on 2026-10-28. Product surfaces move; treat version names and APIs as directional and follow the official links in Related.

WhisperX vs faster-whisper vs a hosted API (last reviewed: Oct 2026)

WhisperX vs faster-whisper vs a hosted API (last reviewed: Oct 2026)
faster-whisperWhisperXHosted API (e.g. OpenAI whisper-1)
What it isCTranslate2 runtime for Whisper modelsWhisper plus alignment and optional diarizationHTTP transcription in a vendor account
Word timestampsYes, with word_timestamps=TrueYes, from forced alignmentVendor-dependent; not the same as WhisperX word_segments
SpeakersNoYes, with a pyannote diarization pipelineOnly if that vendor's API includes diarization
Where bytes goYour processYour process (plus HF for the diarizer weights)The vendor
GPUOptional; CTranslate2 CPU and GPU pathsOptional; CUDA defaults differ from CPUNone for you
Official sourcehttps://github.com/SYSTRAN/faster-whisperhttps://github.com/m-bain/whisperXVendor transcription docs; OpenAI documents model whisper-1

Where Pixeltable fits

Use Pixeltable when transcription is a computed column on an Audio (or extracted Video soundtrack) you store, so insert transcribes that file and unchanged rows stay cached. Local path: whisper.transcribe or whisperx.transcribe. Hosted path: openai.transcriptions(audio, model='whisper-1'). Pixeltable is not a speech model. Keep faster-whisper or WhisperX as the local engine; keep a hosted API when the file may leave the box. Cookbook: Transcribe speech and identify speakers with WhisperX. How-to: transcribe audio uploads and make them searchable.

import pixeltable as pxt
from pixeltable.functions.video import extract_audio
from pixeltable.functions.whisperx import transcribe
TableModel = pxt.model_base()
class Clips(TableModel, name='clips'):
title: pxt.String
video: pxt.Video
audio = extract_audio(video, format='wav')
transcript = transcribe(
audio, model='tiny.en', language='en', diarize=True
)

Questions

Is WhisperX the same as faster-whisper?

No. faster-whisper is a Whisper runtime. WhisperX uses that family and adds alignment and optional pyannote diarization. The whisperx.transcribe UDF documents both diarize=False and diarize=True.

Do I need a Hugging Face token for WhisperX?

Not for diarize=False. Yes for the default diarization pipeline on WhisperX 3.8+, after you accept the pyannote model terms. Pixeltable reads HF_TOKEN. Docs: the WhisperX cookbook in Related.

When should I use a hosted API instead?

When you do not want to install CUDA or Whisper weights, or the vendor's model is the contract. openai.transcriptions with model='whisper-1' is the documented hosted path. Other STT vendors can be a UDF you write.

Can I search the transcript after?

Yes, if you store segments as rows and declare an embedding index on the text. The WhisperX cookbook splits segments with list_iterator and indexes text. The audio how-to uses audio_splitter plus whisper.transcribe.

Next step

Install the Pixeltable skill, or sign up for Cloud and run the same file on a hosted database.