WhisperPlus Documentation

repository·main·Indexed 24 days ago

https://github.com/kadirnar/whisper-plus

An enhanced toolkit for speech-to-text tasks featuring transcription, summarization, speaker diarization, and text-to-speech. It includes specialized pipelines for Apple MLX, high-performance quantization via Hqq and BitsAndBytes, and RAG-based video chatting using LanceDB or AutoLLM. Key features include the SpeechToTextPipeline, WhisperAutoCaptionPipeline for video captions, and LongTextSummarizationPipeline for extensive documents.

Tokens
5.4K
Snippets
18
Records
24
Agent score
84%

What's inside WhisperPlus

  1. Generate AutoCaptions for Video

    main

    Automatically generate and burn captions into a video file.

    System Dependencies:

    apt install imagemagick libmagick++-dev
    cat /etc/ImageMagick-6/policy.xml | sed 's/none/read,write/g'> /etc/ImageMagick-6/policy.xml

    Python Dependencies:

    pip install moviepy

    Usage: Use WhisperAutoCaptionPipeline with a video path.

    from whisperplus.pipelines.whisper_autocaption import WhisperAutoCaptionPipeline
    from whisperplus import download_youtube_to_mp4
    
    video_path = download_youtube_to_mp4(
        "https://www.youtube.com/watch?v=di3rHkEZuUw",
        output_dir="downloads",
        filename="test",
    )  # Optional
    
    caption = WhisperAutoCaptionPipeline(model_id="openai/whisper-large-v3")
    caption(video_path=video_path, output_path="output.mp4", language="english")
  2. Install WhisperPlus

    main

    To use WhisperPlus, install the package via pip. If you are working in a Jupyter Notebook, you may also need to apply nest_asyncio to handle asynchronous loops.

    pip install -U whisperplus
    # Additional dependencies for advanced features
    pip install git+https://github.com/huggingface/transformers
    pip install flash-attn --no-build-isolation
    !pip install -U whisperplus
    !pip install whisperplus git+https://github.com/huggingface/transformers
    !pip install flash-attn --no-build-isolation
  3. Perform Speaker Diarization

    main

    The ASRDiarizationPipeline combines Automatic Speech Recognition (ASR) with speaker diarization (identifying who spoke when).

    Prerequisites:

    1. You must accept the license terms for pyannote/speaker-diarization-3.1 and pyannote/segmentation-3.0 on Hugging Face.
    2. You must be logged in via huggingface_hub to access these models.

    Usage:

    • asr_model: The Whisper model to use for transcription.
    • diarizer_model: The Pyannote model for diarization.
    • num_speakers: The exact number of speakers (if known).
    • min_speaker / max_speaker: The range of speakers expected.
    • format_speech_to_dialogue: A utility to convert the raw diarization output into a readable dialogue format.
    from whisperplus.pipelines.whisper_diarize import ASRDiarizationPipeline
    from whisperplus import download_youtube_to_mp3, format_speech_to_dialogue
    
    audio_path = download_youtube_to_mp3("https://www.youtube.com/watch?v=mRB14sFHw2E")
    
    device = "cuda"  # cpu or mps
    pipeline = ASRDiarizationPipeline.from_pretrained(
        asr_model="openai/whisper-large-v3",
        diarizer_model="pyannote/speaker-diarization-3.1",
        use_auth_token=False,
        chunk_length_s=30,
        device=device,
    )
    
    output_text = pipeline(audio_path, num_speakers=2, min_speaker=1, max_speaker=2)
    dialogue = format_speech_to_dialogue(output_text)
    print(dialogue)
  4. Transcribe audio using Lightning Mlx Whisper

    main

    Use LightningWhisperMLX for a specialized MLX implementation that supports batch processing.

    from whisperplus.pipelines.lightning_whisper_mlx import LightningWhisperMLX
    from whisperplus import download_youtube_to_mp3
    
    url = "https://www.youtube.com/watch?v=1__CAdTJ5JU"
    audio_path = download_youtube_to_mp3(url)
    
    whisper = LightningWhisperMLX(model="distil-large-v3", batch_size=12, quant=None)
    output = whisper.transcribe(audio_path=audio_path)["text"]
  5. Summarize text with TextSummarizationPipeline

    main

    Use TextSummarizationPipeline to generate summaries from a transcript using models like facebook/bart-large-cnn.

    from whisperplus.pipelines.summarization import TextSummarizationPipeline
    
    summarizer = TextSummarizationPipeline(model_id="facebook/bart-large-cnn")
    summary = summarizer.summarize(transcript)
    print(summary[0]["summary_text"])
  6. Transcribe audio using Apple MLX

    main

    For optimized performance on Apple Silicon, use the mlx_whisper pipeline. This requires a model compatible with MLX (e.g., from the mlx-community on HuggingFace).

    from whisperplus.pipelines import mlx_whisper
    from whisperplus import download_youtube_to_mp3
    
    url = "https://www.youtube.com/watch?v=1__CAdTJ5JU"
    audio_path = download_youtube_to_mp3(url)
    
    text = mlx_whisper.transcribe(
        audio_path, path_or_hf_repo="mlx-community/whisper-large-v3-mlx"
    )["text"]
    print(text)
  7. Transcribe audio using SpeechToTextPipeline

    main

    The SpeechToTextPipeline allows for high-performance transcription using models from HuggingFace. You can use quantization configurations like HqqConfig or BitsAndBytesConfig to reduce memory usage. It supports flash_attention_2 for faster processing.

    from whisperplus import SpeechToTextPipeline, download_youtube_to_mp3
    from transformers import BitsAndBytesConfig, HqqConfig
    import torch
    
    url = "https://www.youtube.com/watch?v=di3rHkEZuUw"
    audio_path = download_youtube_to_mp3(url, output_dir="downloads", filename="test")
    
    hqq_config = HqqConfig(
        nbits=4,
        group_size=64,
        quant_zero=False,
        quant_scale=False,
        axis=0,
        offload_meta=False,
    )
    
    bnb_config = BitsAndBytesConfig(
        load_in_4bit=True,
        bnb_4bit_quant_type="nf4",
        bnb_4bit_compute_dtype=torch.bfloat16,
        bnb_4bit_use_double_quant=True,
    )
    
    pipeline = SpeechToTextPipeline(
        model_id="distil-whisper/distil-large-v3",
        quant_config=hqq_config,
        flash_attention_2=True,
    )
    
    transcript = pipeline(
        audio_path=audio_path,
        chunk_length_s=30,
        stride_length_s=5,
        max_new_tokens=128,
        batch_size=100,
        language="english",
        return_timestamps=False,
    )
    
    print(transcript)
  8. Summarize long text with LongTextSummarizationPipeline

    main

    For transcripts that exceed standard model context windows, use LongTextSummarizationPipeline.

    from whisperplus.pipelines.long_text_summarization import LongTextSummarizationPipeline
    
    summarizer = LongTextSummarizationPipeline(model_id="facebook/bart-large-cnn")
    summary_text = summarizer.summarize(transcript)
    print(summary_text)
  9. Generate Text-to-Speech (TTS)

    main

    Use TextToSpeechPipeline to convert text into audio using models like suno/bark.

    from whisperplus.pipelines.text2speech import TextToSpeechPipeline
    
    tts = TextToSpeechPipeline(model_id="suno/bark")
    audio = tts(text="Hello World", voice_preset="v2/en_speaker_6")
  10. View Whisper model performance benchmarks

    main

    Performance evaluations for Whisper models in this repository are based on the Mozilla-Foundation/Common-Voice-17-0 dataset. The benchmarks compare different quantization methods for the distil-whisper/distil-large-v3 model, specifically looking at performance metrics (likely WER/CER or similar, though the specific metric name is not defined in the table) using Hqq and bitsandbytes (Bnb) quantization.

    | Model                                | Metric Value |
    | ------------------------------------ | ------------ |
    | distil-whisper/distil-large-v3 + Hqq | 120.88       |
    | distil-whisper/distil-large-v3       | 120.48       |
    | distil-whisper/distil-large-v3 + Bnb | 120.14       |
  11. Transcribe using Apple MLX (Mac Silicon)

    main

    For users on Apple Silicon, you can use the mlx_whisper pipeline to leverage MLX for optimized transcription.

    from whisperplus.pipelines import mlx_whisper
    from whisperplus import download_youtube_to_mp3
    
    url = "https://www.youtube.com/watch?v=1__CAdTJ5JU"
    audio_path = download_youtube_to_mp3(url)
    
    text = mlx_whisper.transcribe(
        audio_path, path_or_hf_repo="mlx-community/whisper-large-v3-mlx"
    )["text"]
  12. Generate video captions with WhisperAutoCaptionPipeline

    main

    Downloads a YouTube video and uses WhisperAutoCaptionPipeline to generate and embed captions into the video file.

    Parameters:

    • url (str): The YouTube URL.
    • language (str): The language for captioning.
    • model_id (str): The Whisper model ID (defaults to openai/whisper-large-v3).

    Returns:

    • output: The path to the captioned video file.