Sottotitoli con conversione della voce in testo scritto
In questa guida si apprenderà come creare sottotitoli con la conversione della voce in testo scritto. La creazione di sottotitoli è il processo mediante il quale il contenuto audio di una trasmissione televisiva, un webcast, un film, un video, un evento live o un'altra produzione viene convertito in testo, che viene quindi visualizzato su uno schermo, un monitor o un altro sistema di visualizzazione.
I concetti principali includono come sincronizzare i sottotitoli con l'audio di input, applicare filtri per i contenuti volgari, ottenere risultati parziali, applicare personalizzazioni e identificare le lingue parlate per scenari multilingue. Questa guida illustra come creare sottotitoli per il parlato, ma non include l'ID voce o effetti audio come il suono delle campane.
Ecco alcuni scenari comuni inerenti alla creazione di sottotitoli:
- Corsi online e video didattici
- Eventi sportivi
- Chiamate vocali e videochiamate
Di seguito sono illustrati alcuni aspetti di cui tener conto durante la creazione di sottotitoli:
- Informare il pubblico che i sottotitoli vengono generati tramite un servizio automatico.
- Centrare i sottotitoli orizzontalmente sullo schermo, in un tipo carattere grande e ben visibile.
- Valutare se usare risultati parziali, quando iniziare a mostrare i sottotitoli e il numero di parole visualizzate contemporaneamente.
- Acquisire informazioni più dettagliate sui protocolli dei sottotitoli, ad esempio SMPTE-TT.
- Considerare formati di output quali SRT (SubRip Text) e WebVTT (Web Video Text Tracks), che possono essere caricati nella maggior parte dei lettori video, incluso VLC, e consentono di aggiungere automaticamente i sottotitoli al video.
Suggerimento
Provare Speech Studio e scegliere una clip video di esempio per visualizzare i risultati della creazione di sottotitoli elaborata in tempo reale o offline.
Provare Azure AI Video Indexer come dimostrazione del processo di acquisizione dei sottotitoli per i video caricati.
I sottotitoli possono essere creati sia per il parlato in tempo reale sia per il parlato preregistrato. Indipendentemente dal tipo di parlato che si ha di fronte, è possibile usare Speech SDK o l'interfaccia della riga di comando di Voce per riconoscere il contenuto vocale e ottenere le trascrizioni. In caso di video pre-registrati, è possibile usare anche l'API di trascrizione batch.
Formato di output dei sottotitoli
Il servizio Voce supporta formati di output quali SRT (SubRip Text) e WebVTT (Web Video Text Tracks), che possono essere caricati nella maggior parte dei lettori video, incluso VLC, e consentono di aggiungere automaticamente i sottotitoli al video.
Suggerimento
Il servizio Voce mette a disposizione filtri per espressioni volgari. È possibile specificare se schermare, rimuovere o mostrare le espressioni volgari.
Il formato di output timespan SRT (SubRip Text) è hh:mm:ss,fff
.
1
00:00:00,180 --> 00:00:03,230
Welcome to applied Mathematics course 201.
Il formato di output timespan WebVTT (Web Video Text Tracks) è hh:mm:ss.fff
.
WEBVTT
00:00:00.180 --> 00:00:03.230
Welcome to applied Mathematics course 201.
{
"ResultId": "8e89437b4b9349088a933f8db4ccc263",
"Duration": "00:00:03.0500000"
}
Inviare l'audio di input al servizio Voce
Per la creazione di sottotitoli in tempo reale, usare un microfono o un flusso di input audio anziché un file di input. Per esempi di riconoscimento vocale da un microfono, vedere i documenti Avvio rapido sul riconoscimento vocale e Riconoscimento vocale. Per altre informazioni sulla gestione dei flussi audio, vedere Come usare il flusso di input audio.
Per la creazione di sottotitoli per un audio preregistrato, inviare il file di input al servizio Voce. Per altre informazioni, vedere Come usare l'audio di input compresso.
Sincronizzazione dei sottotitoli con il parlato
È opportuno sincronizzare i sottotitoli con la traccia audio, sia in tempo reale che con audio preregistrato.
Il servizio Voce restituisce l'offset e la durata del parlato riconosciuto.
- Offset: offset nel flusso audio riconosciuto, espresso come durata. L'offset viene misurato in tick, a partire da
0
(zero) tick, associati al primo byte audio elaborato dall'SDK. Ad esempio, l'offset inizia all'avvio del riconoscimento, poiché è quando l'SDK avvia l'elaborazione del flusso audio. Un tick rappresenta cento nanosecondi o un decimilionesimo di secondo. - Durata: durata dell'espressione riconosciuta. La durata nei tick non include il tempo di silenzio iniziale o finale.
Per altre informazioni, vedere Ottenere i risultati del riconoscimento vocale.
Ottenere risultati parziali
Valutare quando iniziare a mostrare i sottotitoli e il numero di parole visualizzate contemporaneamente. I risultati del riconoscimento vocale continuano a essere soggetti a modifiche finché è in corso il riconoscimento di un'espressione. I risultati parziali vengono restituiti con ogni evento Recognizing
. Durante l'elaborazione di ogni parola, il servizio Voce valuta nuovamente l'espressione nel nuovo contesto e restituisce di nuovo il risultato migliore. Il nuovo risultato non corrisponde sempre al risultato precedente. La trascrizione completa e finale di un'espressione viene restituita con l'evento Recognized
.
Nota
La punteggiatura non è disponibile nei risultati parziali.
Per i sottotitoli di un input vocale pre-registrato o in tutti i casi in cui la latenza non è un problema, è possibile attendere la trascrizione completa di ogni espressione prima di visualizzare qualsiasi parola. Tenendo conto dell'offset finale e della durata di ogni parola in un'espressione, è possibile capire quando visualizzare le parole in modo che si adattino al ritmo della colonna sonora.
La creazione di sottotitoli in tempo reale presuppone alcuni compromessi in termini di latenza a vantaggio della precisione. È possibile scegliere di visualizzare il testo di ogni evento Recognizing
nel più breve tempo possibile. Tuttavia, se si è disposti ad accettare una certa latenza, è possibile migliorare l'accuratezza dei sottotitoli scegliendo di visualizzare il testo dell'evento Recognized
. Esiste anche un'opzione intermedia, definita con l'espressione "risultati parziali stabili".
È possibile richiedere che il servizio Voce restituisca meno eventi Recognizing
ma più accurati. Per eseguire questa operazione, è necessario impostare la proprietà SpeechServiceResponse_StablePartialResultThreshold
su un valore compreso tra 0
e 2147483647
. Il valore impostato corrisponde al numero di volte in cui una parola deve essere riconosciuta prima che il servizio Voce restituisca un evento Recognizing
. Se, ad esempio, si imposta il valore della proprietà SpeechServiceResponse_StablePartialResultThreshold
su 5
, il servizio Voce dovrà confermare il riconoscimento di una parola almeno cinque volte prima di restituire i risultati parziali con un evento Recognizing
.
speechConfig.SetProperty(PropertyId.SpeechServiceResponse_StablePartialResultThreshold, 5);
speechConfig->SetProperty(PropertyId::SpeechServiceResponse_StablePartialResultThreshold, 5);
speechConfig.SetProperty(common.SpeechServiceResponseStablePartialResultThreshold, 5)
speechConfig.setProperty(PropertyId.SpeechServiceResponse_StablePartialResultThreshold, 5);
speechConfig.setProperty(sdk.PropertyId.SpeechServiceResponse_StablePartialResultThreshold, 5);
[self.speechConfig setPropertyTo:5 byId:SPXSpeechServiceResponseStablePartialResultThreshold];
self.speechConfig!.setPropertyTo(5, by: SPXPropertyId.speechServiceResponseStablePartialResultThreshold)
speech_config.set_property(property_id = speechsdk.PropertyId.SpeechServiceResponse_StablePartialResultThreshold, value = 5)
spx recognize --file caption.this.mp4 --format any --property SpeechServiceResponse_StablePartialResultThreshold=5 --output vtt file - --output srt file -
La richiesta di risultati parziali più stabili riduce i casi di visualizzazione intermittente o di modifica del testo, ma può comportare un aumento della latenza determinata dall'attesa di risultati più attendibili.
Esempio di soglia parziale stabile
Nella sequenza di riconoscimento seguente, in cui non è impostata una soglia parziale stabile, il valore "math" viene riconosciuto come parola, ma il testo finale è "mathematics". In un altro punto, viene riconosciuto anche il valore "course 2", ma il testo finale è "course 201".
RECOGNIZING: Text=welcome to
RECOGNIZING: Text=welcome to applied math
RECOGNIZING: Text=welcome to applied mathematics
RECOGNIZING: Text=welcome to applied mathematics course 2
RECOGNIZING: Text=welcome to applied mathematics course 201
RECOGNIZED: Text=Welcome to applied Mathematics course 201.
Nell'esempio precedente, le trascrizioni erano additive e nessuna porzione di testo è stata eliminata. In altri casi, invece, si potrebbe avere la percezione che i risultati parziali fossero imprecisi. In entrambi i casi, i risultati parziali instabili apparivano con una visualizzazione a intermittenza.
Per questo esempio, se la soglia dei risultati parziali stabili è impostata su 5
, non viene modificata alcuna parola.
RECOGNIZING: Text=welcome to
RECOGNIZING: Text=welcome to applied
RECOGNIZING: Text=welcome to applied mathematics
RECOGNIZED: Text=Welcome to applied Mathematics course 201.
Identificazione della lingua
Se la lingua dell'input audio cambia, usare la funzionalità di identificazione della lingua in modo continuo. L'identificazione della lingua viene usata per identificare le lingue parlate nell'audio rispetto a un elenco di lingue supportate. Specificare fino a 10 lingue candidate, di cui almeno una sia quella prevista nell'input audio. Il servizio Voce restituisce la lingua in cui con maggiore probabilità è espresso l'input audio.
Personalizzazioni per migliorare l'accuratezza
Un elenco di frasi è un elenco di parole o frasi che l'utente fornisce immediatamente prima di avviare il riconoscimento vocale. L'aggiunta di una frase a un elenco ne aumenta l'importanza, rendendo così più probabile il riconoscimento.
Gli esempi di frasi includono:
- Nomi
- Posizioni geografiche
- Omonimi
- Parole o acronimi univoci per il settore o l'organizzazione di appartenenza
In alcune situazioni, il training di un modello personalizzato è probabilmente l'opzione migliore per garantire l'accuratezza. Se, ad esempio, si stanno creando i sottotitoli di una lezione di ortodonzia, è possibile eseguire il training di un modello personalizzato con i dati del dominio corrispondente.