Come trascrivere una registrazione di Zoom, Meet o Teams distinguendo chi parla

Esporta la registrazione (MP4 o M4A), invia il suo URL a POST /transcribe con include_diarization su true, e ogni passaggio torna con un’etichetta speaker e i tempi di inizio e fine. Poi passa la trascrizione etichettata al tuo LLM per verbale e azioni. L’API trascrive registrazioni che fornisci tu; non entra in una riunione in corso.

Ottieni una chiave API Guida rapida Lingue supportate

Ultimo aggiornamento: · Markdown

Trascrivere la registrazione distinguendo chi parla

Puoi caricare il file con POST /upload (fino a 100 MiB; per registrazioni più lunghe, estrai l'audio con ffmpeg) oppure usare un URL pubblico, e poi avviare il lavoro. Il parametro num_speakers è facoltativo: impostalo se sai già quante persone hanno parlato.

curl https://app.kolwrite.com/transcribe \
  -H "x-api-key: $KOLWRITE_API_KEY" -H "Content-Type: application/json" \
  -d '{"audio_url": "https://example.com/weekly-sync.mp4", "model": "oracle", "language": "auto",
       "include_diarization": true, "num_speakers": 4, "output_format": "json"}'

Per sapere quando è pronta, interroga GET /transcribe/{jobId} oppure imposta webhook_url per ricevere una chiamata sul tuo server appena finisce di elaborare una riunione lunga.

Ogni intervento riporta chi sta parlando, i tempi e le singole parole:

{
  "jobId": "34c63d45-4cb5-473b-bc60-25c175e69c57",
  "status": "COMPLETED",
  "result": {
    "language": "en",
    "segments": [
      {
        "start": 1.0,
        "end": 3.75,
        "text": "Hello everyone and welcome to the show.",
        "speaker": "Speaker 1",
        "words": [
          { "start": 1.0, "end": 1.35, "word": "Hello" },
          { "start": 1.4, "end": 1.75, "word": "everyone" }
        ]
      }
    ]
  }
}

Assegnare i nomi agli interlocutori

Le etichette assegnate a chi parla sono generiche (Speaker 1, Speaker 2). Sta poi a te associarle alle persone reali, aiutandoti ad esempio con la lista dei partecipanti o sentendo chi si presenta per primo. Basta una piccola mappatura nel codice per renderlo esplicito:

minutes.py

# minutes.py — turn the diarized result into text an LLM can summarize
NAMES = {"Speaker 1": "Dana", "Speaker 2": "Omar", "Speaker 3": "Lee"}  # you decide who is who


def clock(seconds):
    m, s = divmod(int(seconds), 60)
    h, m = divmod(m, 60)
    return f"{h}:{m:02}:{s:02}" if h else f"{m}:{s:02}"


def meeting_text(result):
    lines = []
    for segment in result["segments"]:
        who = NAMES.get(segment.get("speaker"), segment.get("speaker", "Unknown"))
        lines.append(f'[{clock(segment["start"])}] {who}: {segment["text"]}')
    return "\n".join(lines)


PROMPT = """Below is a meeting transcript with timestamps. Write: (1) a five-line summary,
(2) decisions, (3) action items as "owner - task - [timestamp]". Use only what is in the transcript.

"""
# Send PROMPT + meeting_text(result) to the model you use.

Estrarre il verbale e le attività

KolWrite ti fornisce la trascrizione completa di tempi ed etichette per chi parla; per generare i riassunti e la lista delle azioni puoi affidarti all’LLM che usi di solito. Conviene lasciare i timestamp nel testo, così ogni azione potrà rimandare al momento esatto in cui è stata detta. Ricordati anche di chiedere al modello di basarsi solo su quello che c’è nella trascrizione.

Chiamate registrate con un interlocutore per canale

Se hai la registrazione stereo di una telefonata (per esempio con l'operatore sul canale sinistro e il cliente sul destro), non ti serve la diarizzazione: puoi separare chi parla direttamente in base al canale. Questa funzione supporta da 2 a 8 canali e non può essere usata insieme a include_diarization.

{
  "audio_url": "https://example.com/support-call.wav",
  "model": "oracle",
  "channel_speaker_separation": "standard",
  "channel_labels": { "0": "Agent", "1": "Customer" },
  "output_format": "json"
}

Se gli interlocutori si parlano spesso sopra, usa overlap invece di standard. In questo caso la tariffa del modello viene calcolata sul valore più alto tra la durata totale del file e la somma del parlato rilevato sui vari canali.

Quanto costa

LavoroModelloCosto
Riunione di un'ora con interlocutorioracle1,44 US$
La stessa riunione, con diarizzazione Pro per audio difficileoracle + pro_diarization1,68 US$
30 minuti, audio difficile, diarizzazione Prooracle_max + pro_diarization1,92 US$

La diarizzazione base e la separazione standard dei canali sono incluse nel prezzo. Trovi le tariffe in /llms/pricing.md.

Cosa tenere a mente prima di usare le trascrizioni

  • Durante le riunioni si condividono dati personali. Ricordati di avvisare i partecipanti che stai registrando e trascrivendo la chiamata, e proteggi i testi trascritti con la stessa cura che riservi ai file audio.
  • Distinguere chi parla diventa più complicato se le persone si sovrappongono, hanno voci molto simili o usano microfoni di bassa qualità. Quando l'audio è difficile, prova ad attivare pro_diarization oppure usa la separazione per canali.
  • Se la riunione si svolge in una sola lingua, imposta esplicitamente il parametro language. Il rilevamento automatico, infatti, seleziona un'unica lingua per l'intero file.
  • Prima di prendere decisioni operative basandoti sul verbale, fai sempre controllare a una persona i nomi propri, le cifre e i punti concordati.

Domande e risposte

Come trascrivo una registrazione di Zoom con i nomi dei partecipanti?

Scarica la registrazione e inviala a POST /transcribe con include_diarization: true. L’API distingue chi parla con etichette come Speaker 1 e Speaker 2; sta poi al tuo codice associarle ai nomi reali.

Può collegarsi a una chiamata su Google Meet o Teams?

No. KolWrite lavora solo su file registrati, non trascrive in tempo reale e non partecipa alle riunioni in corso.

Genera anche il verbale e l’elenco delle attività?

Ricevi la trascrizione completa dei tempi e delle etichette di chi parla. Poi passa questo testo al tuo LLM per fargli scrivere il verbale e le azioni da svolgere.

Come si gestiscono le telefonate a due?

Se le due voci sono registrate su canali audio separati, usa channel_speaker_separation insieme a channel_labels invece della diarizzazione.

Quali lingue sono supportate per le riunioni?

Tutte le 100 presenti nell’elenco delle lingue, inclusi arabo ed ebraico. Se durante la riunione si parla una sola lingua, imposta il parametro language.