Questa pagina spiega come aggiungere i sottotitoli codificati automaticamente all'output utilizzando l'API Transcoder. Questa funzionalità ti consente di generare sottotitoli codificati dalle tracce audio, anche se la lingua non è nota, e di tradurli in varie lingue.
Configura questa funzionalità fornendo metadati aggiuntivi sugli asset di input utilizzando il campo attributes
all'interno di ogni elemento dell'array inputs
nella configurazione del job. Questo campo aiuta l'API Transcoder a comprendere le lingue presenti nelle tracce audio e come elaborarle.
Prima di iniziare
Questa pagina presuppone che tu abbia completato i passaggi descritti in Prima di iniziare.
Limitazioni
Questa funzionalità presenta le seguenti limitazioni:
Località supportate
Questa funzionalità è supportata in us-central1
e europe-west4
.
Formato di output
L'output per i sottotitoli generati automaticamente deve essere in formato WebVTT (webvtt
).
Modificare l'unione degli elenchi
Questa funzionalità non supporta l'utilizzo di un editList
per unire più clip video.
Esempi di configurazione
I seguenti esempi mostrano come configurare i sottotitoli codificati automatici per vari casi d'uso.
Mappatura fornita dall'utente
Questo metodo fornisce il controllo diretto specificando esattamente quale traccia di input utilizzare per generare i sottotitoli codificati.
Mappare esplicitamente le tracce di input ai flussi di sottotitoli codificati di output
Questo esempio mostra come utilizzare il campo mapping
all'interno di ogni textStream
per controllare con precisione quale traccia audio di input viene utilizzata per generare i sottotitoli in inglese e francese.
{
"config": {
"inputs": [
{
"key": "input0",
"uri": "gs://input-bucket/input.mp4",
"attributes": {
"trackDefinitions": [
{
"inputTrack": 1,
"languages": [
"en-US"
]
},
{
"inputTrack": 2,
"languages": [
"fr-FR"
]
}
]
}
}
],
"editList": [
{
"key": "atom0",
"inputs": [
"input0"
]
}
],
"elementaryStreams": [
{
"key": "video-stream0",
"videoStream": {
"h264": {
"frameRate": 30,
"widthPixels": 1280,
"heightPixels": 720,
"bitrateBps": 3200000,
"frameRateConversionStrategy": "DOWNSAMPLE"
}
}
},
{
"key": "audio-stream0",
"audioStream": {
"codec": "aac",
"bitrateBps": 64000,
"sampleRateHertz": 48000,
"channelCount": 2,
"channelLayout": [
"fl",
"fr"
]
}
},
{
"key": "vtt-stream-english",
"textStream": {
"codec": "webvtt",
"languageCode": "en-US",
"displayName": "English",
"mapping": [
{
"atomKey": "atom0",
"inputKey": "input0",
"inputTrack": 1
}
]
}
},
{
"key": "vtt-stream-french",
"textStream": {
"codec": "webvtt",
"languageCode": "fr-FR",
"displayName": "French",
"mapping": [
{
"atomKey": "atom0",
"inputKey": "input0",
"inputTrack": 2
}
]
}
}
],
"muxStreams": [
{
"container": "fmp4",
"elementaryStreams": [
"video-stream0"
],
"fileName": "video-only.m4s",
"key": "hd-video-only",
"segmentSettings": {
"segmentDuration": "6s"
}
},
{
"container": "fmp4",
"elementaryStreams": [
"audio-stream0"
],
"fileName": "audio-only.m4s",
"key": "audio-only",
"segmentSettings": {
"segmentDuration": "6s"
}
},
{
"key": "text-vtt-english",
"container": "vtt",
"elementaryStreams": [
"vtt-stream-english"
],
"segmentSettings": {
"individualSegments": true,
"segmentDuration": "6s"
}
},
{
"key": "text-vtt-french",
"container": "vtt",
"elementaryStreams": [
"vtt-stream-french"
],
"segmentSettings": {
"individualSegments": true,
"segmentDuration": "6s"
}
}
],
"manifests": [
{
"fileName": "manifest.m3u8",
"muxStreams": [
"hd-video-only",
"audio-only",
"text-vtt-english",
"text-vtt-french"
],
"type": "HLS"
}
],
"output": {
"uri": "gs://your-bucket/output/"
}
}
}
Lo stream vtt-stream-english
viene generato dalla traccia 1 di input0
a causa del mapping esplicito. Il flusso vtt-stream-french
viene generato dalla traccia 2 di input0
.
Mapping predefinito per l'API Transcoder
Questi esempi si basano sull'API per dedurre quale traccia audio utilizzare in base a attributes
fornito in inputs
. Si presume che le altre parti della configurazione (muxStreams
, manifests
, output
) siano simili all'esempio completo.
Una sola traccia audio con una lingua nota
Se il video di input ha una traccia audio (ad es. la traccia 1) e sai che è in inglese (en-US
), puoi generare i sottotitoli codificati in inglese. Puoi anche richiedere i sottotitoli in altre lingue, ad esempio in francese (fr-FR
), e l'API tradurrà la trascrizione in inglese.
{
"inputs": [
{
"key": "input0",
"uri": "gs://input-bucket/input.mp4",
"attributes": {
"trackDefinitions": [
{
"inputTrack": 1,
"languages": [
"en-US"
]
}
]
}
}
],
"elementaryStreams": [
{ "key": "video-stream0", "videoStream": { ... } },
{ "key": "audio-stream0", "audioStream": { ... } },
{
"key": "vtt-stream-english",
"textStream": {
"codec": "webvtt",
"languageCode": "en-US",
"displayName": "English"
}
},
{
"key": "vtt-stream-french",
"textStream": {
"codec": "webvtt",
"languageCode": "fr-FR",
"displayName": "French"
}
}
]
}
Lo stream dei sottotitoli in inglese (vtt-stream-english
) viene generato direttamente dalla traccia audio 1 definita, poiché i codici lingua corrispondono. Il flusso di sottotitoli in francese (vtt-stream-french
) viene prodotto trascrivendo prima l'audio in inglese della traccia 1 e poi traducendo il testo risultante in francese.
Più tracce audio con lingue note
Quando il file di input contiene più tracce audio in lingue diverse (ad es. francese sulla traccia 1, inglese sulla traccia 2), puoi specificare le lingue per ogni traccia.
{
"inputs": [
{
"key": "input0",
"uri": "gs://input-bucket/input.mp4",
"attributes": {
"trackDefinitions": [
{
"inputTrack": 1,
"languages": ["fr-FR"]
},
{
"inputTrack": 2,
"languages": ["en-US"]
}
]
}
}
],
"elementaryStreams": [
{ "key": "video-stream0", "videoStream": { ... } },
{ "key": "audio-stream0", "audioStream": { ... } },
{
"key": "vtt-stream-english",
"textStream": {
"codec": "webvtt",
"languageCode": "en-US",
"displayName": "English"
}
},
{
"key": "vtt-stream-french",
"textStream": {
"codec": "webvtt",
"languageCode": "fr-FR",
"displayName": "French"
}
}
]
}
In questa configurazione, i sottotitoli codificati vtt-stream-english
vengono generati dalla traccia audio 2 e i sottotitoli codificati vtt-stream-french
vengono generati dalla traccia audio 1, in base ai codici di lingua forniti nel file attributes
.
La lingua di output non corrisponde a nessuna traccia audio di input
Se la lingua dei sottotitoli codificati richiesta non corrisponde a nessuna lingua delle tracce definita, l'API utilizza la traccia audio disponibile per prima per la trascrizione e la traduzione.
{
"inputs": [
{
"key": "input0",
"uri": "gs://input-bucket/input.mp4",
"attributes": {
"trackDefinitions": [
{
"inputTrack": 1,
"languages": ["fr-FR"]
},
{
"inputTrack": 2,
"languages": ["en-US"]
}
]
}
}
],
"elementaryStreams": [
{ "key": "video-stream0", "videoStream": { ... } },
{ "key": "audio-stream0", "audioStream": { ... } },
{
"key": "vtt-stream-hindi",
"textStream": {
"codec": "webvtt",
"languageCode": "hi-IN",
"displayName": "Hindi"
}
}
]
}
Poiché non è definita alcuna traccia audio in hindi, i sottotitoli codificati vtt-stream-hindi
vengono generati trascrivendo la prima traccia audio (traccia 1, francese) e poi traducendo la trascrizione in hindi.
Singola traccia audio con lingue miste
Se una singola traccia audio contiene più lingue, elencale tutte nell'array languages
.
{
"inputs": [
{
"key": "input0",
"uri": "gs://input-bucket/input.mp4",
"attributes": {
"trackDefinitions": [
{
"inputTrack": 1,
"languages": ["en-US", "fr-FR"]
}
]
}
}
],
"elementaryStreams": [
{ "key": "video-stream0", "videoStream": { ... } },
{ "key": "audio-stream0", "audioStream": { ... } },
{
"key": "vtt-stream-english",
"textStream": {
"codec": "webvtt",
"languageCode": "en-US",
"displayName": "English"
}
},
{
"key": "vtt-stream-french",
"textStream": {
"codec": "webvtt",
"languageCode": "fr-FR",
"displayName": "French"
}
},
{
"key": "vtt-stream-hindi",
"textStream": {
"codec": "webvtt",
"languageCode": "hi-IN",
"displayName": "Hindi"
}
}
]
}
Tutti e tre gli stream VTT (inglese, francese e hindi) vengono generati dalla traccia audio 1. L'API trascriverà l'audio in più lingue e fornirà ogni flusso di output nella singola lingua specificata dal campo languageCode
.
L'API trascrive l'audio, rilevando potenzialmente più lingue nella traccia 1. Per ogni output textStream
, genera sottotitoli codificati solo nella lingua specificata dal campo languageCode
dello stream.
Rilevamento della lingua su una traccia audio specifica
Utilizza detectLanguages": true
quando la lingua di una traccia specifica è sconosciuta.
{
"inputs": [
{
"key": "input0",
"uri": "gs://input-bucket/input.mp4",
"attributes": {
"trackDefinitions": [
{
"inputTrack": 1,
"detectLanguages": true
}
]
}
}
],
"elementaryStreams": [
{ "key": "video-stream0", "videoStream": { ... } },
{ "key": "audio-stream0", "audioStream": { ... } },
{
"key": "vtt-stream-english",
"textStream": {
"codec": "webvtt",
"languageCode": "en-US",
"displayName": "English"
}
}
]
}
L'API rileva innanzitutto le lingue presenti nella traccia audio 1. Dopodiché, genera i sottotitoli in inglese, inclusa la traduzione se la lingua rilevata non è l'inglese.
Rilevamento della lingua sulla traccia audio predefinita
Se non sono noti né la lingua né il numero della traccia, l'API utilizza per impostazione predefinita la prima traccia audio disponibile.
{
"inputs": [
{
"key": "input0",
"uri": "gs://input-bucket/input.mp4",
"attributes": {
"trackDefinitions": [
{
"detectLanguages": true
}
]
}
}
],
"elementaryStreams": [
{ "key": "video-stream0", "videoStream": { ... } },
{ "key": "audio-stream0", "audioStream": { ... } },
{
"key": "vtt-stream-english",
"textStream": {
"codec": "webvtt",
"languageCode": "en-US",
"displayName": "English"
}
}
]
}
L'API analizza la prima traccia audio per rilevare le lingue e poi genera i sottotitoli codificati in inglese, traducendoli se necessario.
Specifica la lingua per la traccia audio predefinita
Se conosci la lingua, ma non il numero di traccia specifico, l'API presuppone che la prima traccia audio disponibile corrisponda alla lingua fornita.
{
"inputs": [
{
"key": "input0",
"uri": "gs://input-bucket/input.mp4",
"attributes": {
"trackDefinitions": [
{
"languages": ["en-US"]
}
]
}
}
],
"elementaryStreams": [
{ "key": "video-stream0", "videoStream": { ... } },
{ "key": "audio-stream0", "audioStream": { ... } },
{
"key": "vtt-stream-english",
"textStream": {
"codec": "webvtt",
"languageCode": "en-US",
"displayName": "English"
}
}
]
}
I sottotitoli in inglese (vtt-stream-english
) vengono generati dalla prima traccia audio dell'input, partendo dal presupposto che sia in inglese.
Domande frequenti
Che cosa succede se specifico sia languages
che detectLanguages
nello stesso trackDefinition
?
Puoi specificare solo uno dei campi languages
o detectLanguages
all'interno di un singolo trackDefinition
. Fornire entrambi nella stessa definizione è una configurazione non valida e genererà un errore.
Come fa l'API a scegliere quale traccia audio utilizzare se più trackDefinitions
corrispondono alla lingua di un textStream
?
Se nell'array inputs.attributes.trackDefinitions
sono presenti più trackDefinitions
che potrebbero corrispondere a languageCode
di un textStream
richiesto, l'API utilizzerà la traccia audio del primo trackDefinition
corrispondente nell'ordine dell'array. Questo vale solo quando non utilizzi il campo esplicito mapping
all'interno di textStream
.