Sposti i tempi dei sottotitoli SRT in millisecondi
Sposti tutti i sottotitoli di un file SRT con un unico valore esatto: uno spostamento di -1500 millisecondi porta una riga da 00:00:05,000 a 00:00:03,500, mentre testi e numerazione restano intatti. Gratis nel Suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
Esempio risolto
- Scostamento (ms)
- -1500
- Voci
- 2
La temporizzazione dei sottotitoli può risultare sempre anticipata o ritardata anche quando ogni singolo blocco è corretto. Questo strumento sposta un intero file SRT con un unico valore con segno, espresso in millisecondi, senza riscrivere le battute né cambiarne l’ordine. I valori positivi ritardano i sottotitoli; quelli negativi li anticipano. Ogni timestamp che diventerebbe negativo viene limitato a zero. Il parser convalida ciascun blocco numerato e segnala i timestamp malformati invece di restituire silenziosamente un file danneggiato.
Scelga lo spostamento da un punto di sincronizzazione affidabile
Individui anzitutto un evento chiaro vicino all’inizio del video, per esempio una porta che si chiude, l’avvio di una frase o la comparsa di un titolo. Confronti quell’evento con il sottotitolo corrispondente e misuri la differenza in millisecondi. Se il sottotitolo compare prima dell’evento, usi un valore positivo per ritardarlo.
Se compare dopo, usi un valore negativo per anticiparlo. Prima di confermare una modifica globale, ripeta il controllo verso la fine del programma. Quando la differenza resta costante, un solo spostamento è la correzione adatta.
Quando cresce nel tempo, è probabile che vi siano una deriva di riproduzione o una conversione della frequenza dei fotogrammi, problemi che uno spostamento costante non risolve. Invii il testo SRT completo e l’intero con segno. Il risultato conserva numeri e righe delle didascalie, sostituendo tutti gli intervalli validi.
Comprenda la convalida e il limite a zero
Ogni blocco SRT deve contenere un indice numerico, una riga temporale e almeno una riga di testo. Minuti e secondi devono essere compresi tra zero e cinquantanove. Lo strumento rifiuta un blocco se la riga non rispetta questa struttura, se uno dei timestamp è malformato oppure se la fine originale precede l’inizio.
Questo comportamento rigoroso impedisce trasformazioni parziali che sembrano riuscite ma nascondono blocchi danneggiati. Un valore negativo viene applicato separatamente ai due estremi. Di conseguenza, un blocco interamente precedente all’entità di un grande spostamento negativo può ridursi a durata zero all’inizio.
È il limite previsto, non un errore aritmetico. Controlli i primi blocchi dopo un forte anticipo.
Usi con cautela il file spostato nel flusso di lavoro
Conservi il file originale e salvi il risultato con un nome diverso finché non lo avrà controllato sul video corretto. Verifichi dialoghi, musica e cambi di scena in più punti, senza affidarsi soltanto a un blocco iniziale. L’operazione cambia esclusivamente i timestamp: non traduce il testo, non rinumera i blocchi, non corregge l’ortografia, non inventa sottotitoli mancanti e non compensa la deriva.
Le interruzioni di riga nelle didascalie restano intatte, quindi i sottotitoli su più righe mantengono la disposizione prevista. Il risultato normalizza i fine riga e separa i blocchi in modo uniforme, compatibile con i comuni lettori SRT. Poiché l’algoritmo è deterministico e non utilizza rete, casualità o modelli, gli stessi dati e lo stesso valore producono sempre un risultato identico.
Nei processi in serie, registri lo spostamento insieme alla versione esatta del video.
Casi d'uso
Correggere un ritardo audio costante
Ritardi tutti i sottotitoli quando un’impostazione di multiplexing o riproduzione li mostra prima del parlato.
Compensare un’introduzione rimossa
Anticipi ogni blocco dopo la rimozione di una sigla, un conto alla rovescia o una sequenza iniziale di durata fissa.
Normalizzare un file di consegna
Applichi una correzione editoriale misurata e ottenga tempi SRT uniformi prima di preparare i sottotitoli per la pubblicazione.
Domande frequenti
Devo usare uno spostamento positivo o negativo?
Usi un valore positivo per mostrare i sottotitoli più tardi e uno negativo per mostrarli prima.
Questo strumento corregge la deriva dei sottotitoli?
No. Un valore costante corregge una differenza costante. Una differenza crescente richiede una correzione di velocità o fotogrammi.
Il testo o la numerazione cambiano?
No. Numeri e righe restano invariati; vengono sostituiti solo i tempi e normalizzati i fine riga e gli spazi fra blocchi.
Che cosa succede se un blocco contiene un tempo non valido?
L’intera richiesta termina con un errore di input che identifica il blocco interessato; non viene restituito un file parziale.
Che fine fanno i sottotitoli che inizierebbero prima dello zero?
Vengono fermati a 00:00:00,000. Con un forte spostamento negativo, una riga che inizia e finisce presto può restare senza durata: ricontrolli i primi sottotitoli ed elimini o riallinei quelli che non si vedono più.
Strumenti correlati
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/video/subtitle-srt-shift \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"srt":"1\n00:00:01,250 --> 00:00:03,500\nOpening line.\n\n2\n00:00:05,000 --> 00:00:07,250\nSecond line.","offset_ms":-1500}'const res = await fetch("https://api.kit.forhosting.com/video/subtitle-srt-shift", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"srt": "1\n00:00:01,250 --> 00:00:03,500\nOpening line.\n\n2\n00:00:05,000 --> 00:00:07,250\nSecond line.",
"offset_ms": -1500
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/video/subtitle-srt-shift",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"srt": "1\n00:00:01,250 --> 00:00:03,500\nOpening line.\n\n2\n00:00:05,000 --> 00:00:07,250\nSecond line.",
"offset_ms": -1500
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/video/subtitle-srt-shift", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"srt":"1\\n00:00:01,250 --> 00:00:03,500\\nOpening line.\\n\\n2\\n00:00:05,000 --> 00:00:07,250\\nSecond line.","offset_ms":-1500}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"srt":"1\n00:00:01,250 --> 00:00:03,500\nOpening line.\n\n2\n00:00:05,000 --> 00:00:07,250\nSecond line.","offset_ms":-1500}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/video/subtitle-srt-shift", 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
{
"srt": "1\n00:00:01,250 --> 00:00:03,500\nOpening line.\n\n2\n00:00:05,000 --> 00:00:07,250\nSecond line.",
"offset_ms": -1500
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "video.subtitle_srt_shift",
"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_mb | 500 |
max_minutes | 60 |
max_megapixels | 3.9 |
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. |
Note tecniche
Scelga lo spostamento da un punto di sincronizzazione affidabile
Lo salvi come nuovo file `.srt` e lo confronti con l’originale prima di sostituire materiali di produzione.
Comprenda la convalida e il limite a zero
I valori usano il formato standard `ore:minuti:secondi,millisecondi`, con due o più cifre per le ore, due per minuti e secondi ed esattamente tre per i millisecondi. Se un risultato scende sotto zero, diventa esattamente `00:00:00,000`.
Usi con cautela il file spostato nel flusso di lavoro
Può eseguirlo nel browser oppure automatizzarlo tramite API al costo di $0.002 per richiesta.
Domande tecniche
Che cosa accade se un timestamp scende sotto zero?
Quel limite iniziale o finale viene portato a `00:00:00,000`; non viene mai generato un tempo negativo.
Quanto costa una richiesta API?
Il prezzo dell’API è $0.002 per richiesta. La stessa operazione deterministica è disponibile anche nel browser.