Allineare una trascrizione ai timestamp SRT
Trasformi una trascrizione definitiva in testo semplice e una mappa temporale esistente in sottotitoli SRT pronti all’uso.
Esegui gratis nel browser
Ogni timestamp diventa una battuta numerata, mentre la trascrizione fornisce le parole esatte visualizzate. Il testo di riferimento facoltativo indica quante parole spettano a ciascun segmento, così le correzioni ortografiche e di punteggiatura non alterano la struttura temporale originale. Il risultato usa codici temporali SRT standard, numerazione stabile, righe vuote tra i blocchi e un limite configurabile di caratteri per riga.
Prepari la trascrizione e la mappa temporale
Parta dalla trascrizione finale, esattamente come deve comparire nei sottotitoli. Gli spazi tra le parole vengono normalizzati, mentre ortografia, maiuscole e punteggiatura restano invariati. Fornisca quindi un elenco ordinato di timestamp. Ogni elemento richiede un inizio e una fine in secondi e diventa una battuta SRT. Può anche contenere testo di riferimento tratto dalla trascrizione originale. Lo strumento non copia quel testo nell’output: ne conta le parole e preleva lo stesso numero dalla trascrizione corretta. In questo modo Lei conserva i tempi automatici anche dopo aver corretto nomi o formulazioni. Senza testo di riferimento, ogni timestamp consuma una parola. I conteggi complessivi devono coprire l’intera trascrizione; parole residue o conteggi eccedenti producono un errore esplicito. Sono ammessi secondi decimali come 1.25 o 8.9.
Controlli la lunghezza delle righe
Imposti max_chars_per_line secondo i requisiti del flusso di consegna, del lettore, dell’emittente o delle linee guida di accessibilità. Il valore predefinito è 42 caratteri e l’intervallo accettato va da 8 a 120. Il ritorno a capo avviene solo tra parole. L’algoritmo aggiunge parole finché la successiva supererebbe il massimo, poi apre una nuova riga. Non modifica parole, non elimina punteggiatura e non inserisce trattini. Una singola parola più lunga del limite genera un errore chiaro, preservando la trascrizione. Lei potrà aumentare il valore o modificare consapevolmente quella parola. Ogni timestamp resta una sola battuta anche su più righe; durante la formattazione non vengono inventati né suddivisi tempi. Per ottenere due righe convenzionali, prepari segmenti abbastanza brevi rispetto al limite scelto. La capacità applica solo il massimo per riga.
Convalidi i tempi e utilizzi l’SRT
Prima di produrre i blocchi, lo strumento controlla ogni timestamp. Inizio e fine devono essere secondi finiti e non negativi, con la fine successiva all’inizio. Anche l’ordine deve essere cronologico: la battuta seguente non può iniziare prima che termini la precedente. Due battute adiacenti possono coincidere esattamente sul confine. Se compare una sovrapposizione o un intervallo invertito, l’elaborazione si ferma e indica l’elemento errato. Questo controllo evita che un file apparentemente corretto nasconda difetti interpretati diversamente dai lettori. I secondi vengono arrotondati al millisecondo e formattati come HH:MM:SS,mmm. La risposta comprende una stringa srt completa da copiare o salvare e un array blocks per applicazioni strutturate. La numerazione parte da uno e l’output è deterministico. Lo usi nel browser oppure chiami l’API per $0.002 in una pipeline multimediale automatizzata.
Casi d'uso
Applicare correzioni editoriali
Mantenga i tempi della trascrizione automatica sostituendo il testo con una versione corretta e approvata.
Convertire tempi per parola in SRT
Trasformi un timestamp per parola in battute SRT valide senza formattare manualmente tempi o numerazione.
Rispettare i limiti di riga
Disponga il testo entro un massimo noto prima di importarlo in un lettore o sistema di montaggio.
Domande frequenti
Quanto costa una richiesta API?
Ogni richiesta API costa $0.002. La versione nel browser è utilizzabile interattivamente senza inviare il lavoro a un modello remoto.
Il testo di riferimento appare nei sottotitoli?
No. Stabilisce soltanto quante parole riceve un timestamp; il testo visibile proviene sempre dalla trascrizione.
I timestamp possono sovrapporsi?
No. Ogni battuta deve finire dopo l’inizio e la successiva deve cominciare alla fine della precedente o più tardi.
Che cosa accade se i conteggi non coincidono?
La richiesta non riesce se restano parole non assegnate o se i timestamp richiedono più parole di quelle disponibili.
Una parola lunga viene divisa per rispettare il limite?
No. Una parola che supera max_chars_per_line causa un errore e preserva il testo da modifiche silenziose.
Come vengono formattate le frazioni di secondo?
I secondi sono arrotondati al millisecondo più vicino e usano la virgola prevista dallo standard SRT.
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/audio/audio-to-text-srt-align \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"transcript":"Welcome to the demonstration. This subtitle wraps cleanly.","timestamps":[{"start":0,"end":2.4,"text":"Welcome to the demonstration."},{"start":2.4,"end":5.2,"text":"This subtitle wraps cleanly."}]}'const res = await fetch("https://api.kit.forhosting.com/audio/audio-to-text-srt-align", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"transcript": "Welcome to the demonstration. This subtitle wraps cleanly.",
"timestamps": [
{
"start": 0,
"end": 2.4,
"text": "Welcome to the demonstration."
},
{
"start": 2.4,
"end": 5.2,
"text": "This subtitle wraps cleanly."
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/audio/audio-to-text-srt-align",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"transcript": "Welcome to the demonstration. This subtitle wraps cleanly.",
"timestamps": [
{
"start": 0,
"end": 2.4,
"text": "Welcome to the demonstration."
},
{
"start": 2.4,
"end": 5.2,
"text": "This subtitle wraps cleanly."
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/audio/audio-to-text-srt-align", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"transcript":"Welcome to the demonstration. This subtitle wraps cleanly.","timestamps":[{"start":0,"end":2.4,"text":"Welcome to the demonstration."},{"start":2.4,"end":5.2,"text":"This subtitle wraps cleanly."}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"transcript":"Welcome to the demonstration. This subtitle wraps cleanly.","timestamps":[{"start":0,"end":2.4,"text":"Welcome to the demonstration."},{"start":2.4,"end":5.2,"text":"This subtitle wraps cleanly."}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/audio/audio-to-text-srt-align", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"transcript": "Welcome to the demonstration. This subtitle wraps cleanly.",
"timestamps": [
{
"start": 0,
"end": 2.4,
"text": "Welcome to the demonstration."
},
{
"start": 2.4,
"end": 5.2,
"text": "This subtitle wraps cleanly."
}
]
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "audio.audio_to_text_srt_align",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Limiti
max_items | 10000 |
max_chars | 500000 |
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |