whisper.cpp VS whisperX

Compare whisper.cpp vs whisperX and see what are their differences.


WhisperX: Automatic Speech Recognition with Word-level Timestamps (& Diarization) (by m-bain)
Our great sponsors
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • WorkOS - The modern identity platform for B2B SaaS
  • SaaSHub - Software Alternatives and Reviews
whisper.cpp whisperX
187 24
29,353 8,773
- -
9.8 8.7
7 days ago 1 day ago
C Python
MIT License BSD 4-Clause "Original" or "Old" License
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.


Posts with mentions or reviews of whisper.cpp. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2024-03-31.


Posts with mentions or reviews of whisperX. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2024-03-31.
  • Deploying whisperX on AWS SageMaker as Asynchronous Endpoint
    2 projects | dev.to | 31 Mar 2024
    import os # Directory and file paths dir_path = './models-v1' inference_file_path = os.path.join(dir_path, 'code/inference.py') requirements_file_path = os.path.join(dir_path, 'code/requirements.txt') # Create the directory structure os.makedirs(os.path.dirname(inference_file_path), exist_ok=True) # Inference.py content inference_content = '''# inference.py # inference.py import io import json import logging import os import tempfile import time import boto3 import torch import whisperx DEVICE = 'cuda' if torch.cuda.is_available() else 'cpu' s3 = boto3.client('s3') def model_fn(model_dir, context=None): """ Load and return the WhisperX model necessary for audio transcription. """ print("Entering model_fn") logging.info("Loading WhisperX model") model = whisperx.load_model(whisper_arch=f"{model_dir}/guillaumekln/faster-whisper-large-v2", device=DEVICE, language="en", compute_type="float16", vad_options={'model_fp': f"{model_dir}/whisperx/vad/pytorch_model.bin"}) print("Loaded WhisperX model") print("Exiting model_fn with model loaded") return { 'model': model } def input_fn(request_body, request_content_type): """ Process and load audio from S3, given the request body containing S3 bucket and key. """ print("Entering input_fn") if request_content_type != 'application/json': raise ValueError("Invalid content type. Must be application/json") request = json.loads(request_body) s3_bucket = request['s3bucket'] s3_key = request['s3key'] # Download the file from S3 temp_file = tempfile.NamedTemporaryFile(delete=False) s3.download_file(Bucket=s3_bucket, Key=s3_key, Filename=temp_file.name) print(f"Downloaded audio from S3: {s3_bucket}/{s3_key}") print("Exiting input_fn") return temp_file.name def predict_fn(input_data, model, context=None): """ Perform transcription on the provided audio file and delete the file afterwards. """ print("Entering predict_fn") start_time = time.time() whisperx_model = model['model'] logging.info("Loading audio") audio = whisperx.load_audio(input_data) logging.info("Transcribing audio") transcription_result = whisperx_model.transcribe(audio, batch_size=16) try: os.remove(input_data) # input_data contains the path to the temp file print(f"Temporary file {input_data} deleted.") except OSError as e: print(f"Error: {input_data} : {e.strerror}") end_time = time.time() elapsed_time = end_time - start_time logging.info(f"Transcription took {int(elapsed_time)} seconds") print(f"Exiting predict_fn, processing took {int(elapsed_time)} seconds") return transcription_result def output_fn(prediction, accept, context=None): """ Prepare the prediction result for the response. """ print("Entering output_fn") if accept != "application/json": raise ValueError("Accept header must be application/json") response_body = json.dumps(prediction) print("Exiting output_fn with response prepared") return response_body, accept ''' # Write the inference.py file with open(inference_file_path, 'w') as file: file.write(inference_content) # Requirements.txt content requirements_content = '''speechbrain==0.5.16 faster-whisper==0.7.1 git+https://github.com/m-bain/whisperx.git@1b092de19a1878a8f138f665b1467ca21b076e7e ffmpeg-python ''' # Write the requirements.txt file with open(requirements_file_path, 'w') as file: file.write(requirements_content)
  • OpenVoice: Versatile Instant Voice Cloning
    7 projects | news.ycombinator.com | 29 Mar 2024
    Whisper doesn't, but WhisperX <https://github.com/m-bain/whisperX/> does. I am using it right now and it's perfectly serviceable.

    For reference, I'm transcribing research-related podcasts, meaning speech doesn't overlap a lot, which would be a problem for WhisperX from what I understand. There's also a lot of accents, which are straining on Whisper (though it's also doing well), but surely help WhisperX. It did have issues with figuring number of speakers on it's own, but that wasn't a problem for my use case.

  • FLaNK 15 Jan 2024
    21 projects | dev.to | 15 Jan 2024
  • Subtitle is now open-source
    3 projects | news.ycombinator.com | 24 Nov 2023
    I've had good results with whisperx when I needed to generate captions. https://github.com/m-bain/whisperX

    There is currently a problem with diarization, but otherwise, it is SOTA.

  • Insanely Fast Whisper: Transcribe 300 minutes of audio in less than 98 seconds
    8 projects | news.ycombinator.com | 14 Nov 2023

    WhisperX with the new model. It's not fast.

  • Distil-Whisper: distilled version of Whisper that is 6 times faster, 49% smaller
    14 projects | news.ycombinator.com | 31 Oct 2023
    How much faster in real wall-clock time is this in batched data than https://github.com/m-bain/whisperX ?
  • Whisper Turbo: transcribe 20x faster than realtime using Rust and WebGPU
    3 projects | news.ycombinator.com | 12 Sep 2023
    Neat to see a new implementation, although I'll note that for those looking for a drop-in replacement for the whisper library, I believe that both faster-whisper https://github.com/guillaumekln/faster-whisper and https://github.com/m-bain/whisperX are easier (PyTorch-based, doesn't require a web browser), and a lot faster (WhisperX is up to 70X realtime).
  • [D] What is the most efficient version of OpenAI Whisper?
    7 projects | /r/MachineLearning | 12 Jul 2023
    Whisper X: https://github.com/m-bain/whisperX. Uses Faster Whisper under-the-hood, so same speed-ups.
  • Universal Speech Model
    5 projects | news.ycombinator.com | 29 Mar 2023
    just found out about this today, maybe it's helpful:


  • ChatGPT and Whisper APIs
    15 projects | news.ycombinator.com | 1 Mar 2023

What are some alternatives?

When comparing whisper.cpp and whisperX you can also consider the following projects:

faster-whisper - Faster Whisper transcription with CTranslate2

Whisper - High-performance GPGPU inference of OpenAI's Whisper automatic speech recognition (ASR) model

bark - 🔊 Text-Prompted Generative Audio Model

whisper - Robust Speech Recognition via Large-Scale Weak Supervision

llama.cpp - LLM inference in C/C++

NeMo - NeMo: a framework for generative AI

TensorRT - NVIDIA® TensorRT™ is an SDK for high-performance deep learning inference on NVIDIA GPUs. This repository contains the open source components of TensorRT.

insanely-fast-whisper - Incredibly fast Whisper-large-v3

llama - Inference code for Llama models

text-generation-webui - A Gradio web UI for Large Language Models. Supports transformers, GPTQ, AWQ, EXL2, llama.cpp (GGUF), Llama models.