whisper

Sprache-zu-Text-Transkription mit whisper.cpp, OpenAIs Whisper-Modell

Maintainer: tobilg

Installation und Laden

INSTALL whisper FROM community;
LOAD whisper;

Beispiel

-- Transcribe an audio file
D SELECT whisper_transcribe('audio.wav', 'tiny.en');
┌──────────────────────────────────────────────────┐
│ whisper_transcribe(...) │
varchar
├──────────────────────────────────────────────────┤
│ Hello, this is a test of the whisper extension. │
└──────────────────────────────────────────────────┘
-- Get detailed transcription segments with timestamps
D SELECT * FROM whisper_transcribe_segments('audio.wav', 'tiny.en');
┌────────────┬────────────┬──────────┬────────────────────┬────────────┬──────────┐
│ segment_id │ start_time │ end_time │ text │ confidence │ language
│ int32 │ double │ double │ varchar │ double │ varchar
├────────────┼────────────┼──────────┼────────────────────┼────────────┼──────────┤
00.002.50 │ Hello, this is a │ 0.95 │ en │
12.504.00 │ test of whisper. │ 0.92 │ en │
└────────────┴────────────┴──────────┴────────────────────┴────────────┴──────────┘
-- List available models
D SELECT model_name, size_mb, is_downloaded FROM whisper_list_models() LIMIT 3;
┌────────────┬─────────┬───────────────┐
│ model_name │ size_mb │ is_downloaded │
varchar │ int64 │ boolean
├────────────┼─────────┼───────────────┤
│ tiny │ 75 │ false │
tiny.en75 │ true │
│ base │ 142 │ false │
└────────────┴─────────┴───────────────┘

Über whisper

Eine DuckDB-Erweiterung für Sprache-zu-Text-Transkription mit whisper.cpp, dem C/C++-Port von OpenAIs Whisper-Modell.

Transkribieren Sie Audiodateien direkt aus SQL-Abfragen in DuckDB und verarbeiten und analysieren Sie Audiodaten zusammen mit Ihren übrigen Daten.

Funktionen

  • Audiodateien transkribieren (WAV, MP3, FLAC, OGG und weitere)
  • Live-Aufnahme und Transkription vom Mikrofon
  • Sprache-zu-SQL: natürliche Sprachfragen sprechen und Abfrageergebnisse erhalten
  • Unterstützung aller Whisper-Modelle (tiny, base, small, medium, large)
  • Detaillierte Transkriptionssegmente mit Zeitstempeln und Konfidenzwerten
  • Automatische Spracherkennung oder Angabe der Zielsprache
  • Funktioniert mit Dateipfaden, BLOB-Daten oder entfernten URLs

Schnellstart

Ein Modell herunterladen

Modelle müssen vor der Verwendung heruntergeladen werden. Sie liegen in ~/.duckdb/whisper/models/.

Terminal window
mkdir -p ~/.duckdb/whisper/models
curl -L -o ~/.duckdb/whisper/models/ggml-tiny.en.bin \
https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-tiny.en.bin

Verfügbare Modelle und Downloadstatus prüfen:

SELECT * FROM whisper_list_models();

Eine Audiodatei transkribieren

-- Simple transcription
SELECT whisper_transcribe('audio.wav', 'tiny.en');
-- Get detailed segments with timestamps
SELECT * FROM whisper_transcribe_segments('audio.wav', 'tiny.en');
-- Translate foreign audio to English
SELECT whisper_translate('german_speech.mp3', 'small');

Anwendungsbeispiele

Entfernte Audio transkribieren

INSTALL httpfs;
LOAD httpfs;
SELECT whisper_transcribe(content, 'tiny.en')
FROM read_blob('https://example.com/audio.mp3');

Mehrere Dateien stapelweise transkribieren

SELECT file, whisper_transcribe(file, 'tiny.en') as transcript
FROM glob('audio/*.wav');

In Transkriptionen suchen

SELECT * FROM whisper_transcribe_segments('meeting.wav', 'base.en')
WHERE text ILIKE '%action item%';

Untertitel erzeugen (SRT-Format)

SELECT
segment_id + 1 as id,
printf('%02d:%02d:%02d,%03d',
(start_time/3600)::int, ((start_time%3600)/60)::int,
(start_time%60)::int, ((start_time - start_time::int) * 1000)::int
) || ' --> ' ||
printf('%02d:%02d:%02d,%03d',
(end_time/3600)::int, ((end_time%3600)/60)::int,
(end_time%60)::int, ((end_time - end_time::int) * 1000)::int
) as timestamp,
trim(text) as text
FROM whisper_transcribe_segments('video.mp4', 'small.en');

Aufnahme (erfordert Mikrofon)

Audiogerät einrichten

Vor der Nutzung von Mikrofonaufnahme oder Sprachabfragen:

-- List all available audio input devices
SELECT * FROM whisper_list_devices();
-- Set the device ID (use a device_id from the list above)
SET whisper_device_id = 0;
-- Verify your microphone is working
SELECT whisper_mic_level(3);

Aufnehmen und transkribieren

-- Record for 5 seconds
SELECT whisper_record(5, 'tiny.en');
-- Record until silence (max 30 seconds)
SELECT whisper_record_auto(30);
-- Record and translate to English
SELECT whisper_record_translate(5, 'small');

Sprache-zu-SQL (experimentell)

Sprechen Sie natürliche Fragen zu Ihren Daten und erhalten Sie SQL-Abfrageergebnisse.

Erfordert lokal laufenden text-to-sql-proxy.

-- Create test data
CREATE TABLE customers (id INT, name VARCHAR, revenue DECIMAL);
INSERT INTO customers VALUES (1, 'Acme', 100000), (2, 'Beta', 50000);
-- Get SQL from voice (doesn't execute)
SELECT whisper_voice_to_sql();
-- Execute voice query directly
FROM whisper_voice_query();
-- Include generated SQL in results
FROM whisper_voice_query_with_sql();

Verfügbare Modelle

Model Size Description
tiny/tiny.en ~75MB Fastest
base/base.en ~142MB Fast
small/small.en ~466MB Good balance
medium/medium.en ~1.5GB High quality
large-v1/v2/v3 ~2.9GB Best quality
large-v3-turbo ~1.6GB Fast + accurate

Modelle mit der Endung .en sind für Englisch optimiert.

Unterstützte Audioformate

Die Erweiterung nutzt FFmpeg zur Audiodecodierung: WAV, MP3, FLAC, OGG/Vorbis, AAC/M4A und viele weitere. Audio wird automatisch auf 16 kHz Mono konvertiert, wie von Whisper verlangt.

Funktionsreferenz

Transkriptionsfunktionen

  • whisper_transcribe(audio, [model]) - Transkribiert Audio und gibt den vollständigen Text zurück
  • whisper_translate(audio, [model]) - Übersetzt Audio aus beliebiger Sprache ins Englische
  • whisper_transcribe_segments(audio, [model], [language], [translate]) - Liefert eine Tabelle von Segmenten mit Zeitstempeln

Aufnahmefunktionen

  • whisper_list_devices() - Listet verfügbare Audioeingabegeräte
  • whisper_record(duration_seconds, [model], [device_id]) - Nimmt auf und transkribiert
  • whisper_record_auto(max_seconds, [silence_seconds], [model], [threshold], [device_id]) - Nimmt bis zur Stille auf
  • whisper_record_translate(duration_seconds, [model], [device_id]) - Nimmt auf und übersetzt ins Englische
  • whisper_mic_level(duration_seconds, [device_id]) - Mikrofonpegel prüfen

Sprache-zu-SQL-Funktionen

  • whisper_voice_to_sql([model], [device_id]) - Nimmt Sprache auf und gibt erzeugtes SQL zurück
  • whisper_voice_query([model], [device_id]) - Nimmt Sprache auf, erzeugt SQL und führt es aus
  • whisper_voice_query_with_sql([model], [device_id]) - Wie oben, mit SQL-Spalten

Modellverwaltungsfunktionen

  • whisper_list_models() - Listet alle verfügbaren Modelle und den Downloadstatus
  • whisper_download_model(model_name) - Gibt Download-Anweisungen zurück

Hilfsfunktionen

  • whisper_version() - Gibt Versionsinformationen zu Erweiterung und whisper.cpp zurück
  • whisper_check_audio(file_path) - Prüft, ob eine Audiodatei gelesen werden kann
  • whisper_audio_info(file_path) - Gibt Metadaten der Audiodatei zurück
  • whisper_get_config() - Gibt die aktuellen Whisper-Konfigurationseinstellungen zurück

Konfiguration

Einstellungen über übliche SET-Anweisungen:

-- Model settings
SET whisper_model = 'small.en';
SET whisper_model_path = '/custom/path/models';
SET whisper_language = 'en';
SET whisper_threads = 4;
-- Recording settings
SET whisper_device_id = 0;
SET whisper_max_duration = 30;
SET whisper_silence_duration = 2;
SET whisper_silence_threshold = 0.005;
-- Voice query settings
SET whisper_text_to_sql_url = 'http://localhost:8080/generate-sql';
SET whisper_text_to_sql_timeout = 60;
SET whisper_voice_query_show_sql = true;
-- View all whisper settings
SELECT * FROM duckdb_settings() WHERE name LIKE 'whisper_%';

Die vollständige Dokumentation finden Sie im GitHub-Repository.

Hinzugefügte Funktionen

Diese Erweiterung fügt keine Funktionen hinzu.

Überladene Funktionen

Diese Erweiterung fügt keine Funktionsüberladungen hinzu.

Hinzugefügte Typen

Diese Erweiterung fügt keine Typen hinzu.

Hinzugefügte Einstellungen

Diese Erweiterung fügt keine Einstellungen hinzu.