Questa pagina spiega come aggiungere sottotitoli codificati e sottotitoli codificati chiusi a un video di output.
I sottotitoli codificati (o semplicemente sottotitoli) sono la rappresentazione visiva dell'audio di un video. I sottotitoli codificati sono in genere nella stessa lingua dell'audio e includono suoni di sottofondo e cambi di oratore.
I sottotitoli vengono in genere utilizzati per tradurre i dialoghi di un video in un'altra lingua. I sottotitoli codificati in genere non includono i suoni di sottofondo e i cambi di oratore.
Questa pagina utilizza il termine file di sottotitoli di input per fare riferimento a un file di testo che contiene sottotitoli codificati o sottotitoli. Fornisci questo file come input per un job.
Aggiungere sottotitoli codificati e sottotitoli a una configurazione del job
Consulta la sezione Input e output supportati per i formati dei file di sottotitoli codificati di input supportati. Per testare la configurazione, vengono forniti un file video di esempio e file di sottotitoli codificati di esempio.
Utilizza le informazioni nelle sezioni seguenti per aggiungere sottotitoli codificati e sottotitoli a una configurazione del job. Questa pagina presuppone che tu abbia familiarità con una JobConfig di base. Per ulteriori informazioni sulla creazione di job di transcodifica, vedi Creare e gestire job.
Aggiungi didascalie
Per creare un job che incorpora i sottotitoli codificati nel contenitore del file video di output, procedi nel seguente modo:
Aggiungi un array
inputs
all'inizio della configurazione del job.Aggiungi un oggetto
Input
all'arrayinputs
che definisce la chiave e l'URI per il video di input associato.Aggiungi un altro oggetto
Input
che includa il percorso del file di sottotitoli codificati di input.Aggiungi un array
editList
alla configurazione del job. Questo array viene utilizzato per aggiungere input alla sequenza temporale del video di output.Aggiungi un oggetto
EditAtom
all'arrayeditList
. Questo oggettoEditAtom
deve fare riferimento alle chiavi del video di input e dei sottotitoli codificati che hai aggiunto nell'arrayinputs
. Puoi designare unstartTimeOffset
e unendTimeOffset
per tagliare il video di input.Aggiungi i sottotitoli codificati ai contenitori di output aggiungendo un oggetto
textStream
all'arrayelementaryStreams
. È supportato un solo stream di testo incorporato, che viene aggiunto a tutti i video di output (poiché esiste una sola sequenza temporale di output).Utilizza l'array
mapping
nell'oggetto di configurazionetextStream
per fare riferimento alla chiave dell'oggettoEditAtom
.
La seguente configurazione di esempio incorpora i sottotitoli codificati CEA-608 in un video.
Puoi aggiungere questa configurazione a un modello di job o includerla in una configurazione di job ad hoc:
REST
Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
PROJECT_ID
: il tuo ID progetto Google Cloud elencato nelle impostazioni IAM.LOCATION
: la località in cui verrà eseguito il job. Utilizza una delle regioni supportate.Mostra localitàus-central1
us-west1
us-west2
us-east1
us-east4
southamerica-east1
northamerica-northeast1
asia-east1
asia-northeast1
asia-northeast3
asia-south1
asia-southeast1
australia-southeast1
europe-west1
europe-west2
europe-west4
me-west1
me-central1
me-central2
STORAGE_BUCKET_NAME
: il nome del bucket Cloud Storage che hai creato.STORAGE_INPUT_VIDEO
: il nome di un video nel tuo bucket Cloud Storage che stai transcodificando, ad esempiomy-vid.mp4
. Questo campo deve tenere conto di tutte le cartelle che hai creato nel bucket (ad esempioinput/my-vid.mp4
).STORAGE_CAPTIONS_FILE
: il nome di un file di sottotitoli codificati nel bucket Cloud Storage, ad esempiocaptions.srt
. Questo campo deve tenere conto di tutte le cartelle che hai creato nel bucket (ad esempioinput/captions.srt
).STORAGE_OUTPUT_FOLDER
: il nome della cartella di output nel bucket Cloud Storage in cui vuoi salvare gli output video codificati.
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID", "config": { ... }, "state": "PENDING", "createTime": CREATE_TIME, "ttlAfterCompletionDays": 30 }
gcloud
Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:
LOCATION
: la località in cui verrà eseguito il job. Utilizza una delle regioni supportate.Mostra localitàus-central1
us-west1
us-west2
us-east1
us-east4
southamerica-east1
northamerica-northeast1
asia-east1
asia-northeast1
asia-northeast3
asia-south1
asia-southeast1
australia-southeast1
europe-west1
europe-west2
europe-west4
me-west1
me-central1
me-central2
STORAGE_BUCKET_NAME
: il nome del bucket Cloud Storage che hai creato.STORAGE_INPUT_VIDEO
: il nome di un video nel tuo bucket Cloud Storage che stai transcodificando, ad esempiomy-vid.mp4
. Questo campo deve tenere conto di tutte le cartelle che hai creato nel bucket (ad esempioinput/my-vid.mp4
).STORAGE_CAPTIONS_FILE
: il nome di un file di sottotitoli codificati nel bucket Cloud Storage, ad esempiocaptions.srt
. Questo campo deve tenere conto di tutte le cartelle che hai creato nel bucket (ad esempioinput/captions.srt
).STORAGE_OUTPUT_FOLDER
: il nome della cartella di output nel bucket Cloud Storage in cui vuoi salvare gli output video codificati.
Salva i seguenti contenuti in un file denominato request.json
:
{ "config": { "inputs": [ { "key": "input0", "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_INPUT_VIDEO" }, { "key": "caption_input0", "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_CAPTIONS_FILE" } ], "editList": [ { "key": "atom0", "inputs": [ "input0", "caption_input0" ] } ], "elementaryStreams": [ { "key": "video-stream0", "videoStream": { "h264": { "heightPixels": 360, "widthPixels": 640, "bitrateBps": 550000, "frameRate": 60 } } }, { "key": "audio-stream0", "audioStream": { "codec": "aac", "bitrateBps": 64000 } }, { "key": "cea-stream0", "textStream": { "codec": "cea608", "mapping": [ { "atomKey": "atom0", "inputKey": "caption_input0", "inputTrack": 0 } ], "languageCode": "en-US", "displayName": "English" } } ], "muxStreams": [ { "key": "sd-hls", "container": "ts", "elementaryStreams": [ "video-stream0", "audio-stream0" ] }, { "key": "sd-dash", "container": "fmp4", "elementaryStreams": [ "video-stream0" ] }, { "key": "audio-dash", "container": "fmp4", "elementaryStreams": [ "audio-stream0" ] } ], "manifests": [ { "fileName": "manifest.m3u8", "type": "HLS", "muxStreams": [ "sd-hls" ] }, { "fileName": "manifest.mpd", "type": "DASH", "muxStreams": [ "sd-dash", "audio-dash" ] } ], "output": { "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_OUTPUT_FOLDER/" } } }
Esegui questo comando:
Linux, macOS o Cloud Shell
gcloud transcoder jobs create --location=LOCATION --file=request.json
Windows (PowerShell)
gcloud transcoder jobs create --location=LOCATION --file=request.json
Windows (cmd.exe)
gcloud transcoder jobs create --location=LOCATION --file=request.json
Dovresti ricevere una risposta simile alla seguente:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID", "config": { ... }, "state": "PENDING", "createTime": CREATE_TIME, "ttlAfterCompletionDays": 30 }
Go
Prima di provare questo esempio, segui le istruzioni di configurazione di Go nella guida rapida all'API Transcoder per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Transcoder per Go.
Per autenticarti all'API Transcoder, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configura l'autenticazione per un ambiente di sviluppo locale.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida all'API Transcoder per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Transcoder per Java.
Per autenticarti all'API Transcoder, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configura l'autenticazione per un ambiente di sviluppo locale.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js nella guida rapida all'API Transcoder per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Transcoder per Node.js.
Per autenticarti all'API Transcoder, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configura l'autenticazione per un ambiente di sviluppo locale.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida all'API Transcoder per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Transcoder per Python.
Per autenticarti all'API Transcoder, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configura l'autenticazione per un ambiente di sviluppo locale.
Aggiungere sottotitoli
Per creare un job che produce file di sottotitoli multilingue riprodotti da un manifest, segui questi passaggi:
Aggiungi un array
inputs
alla configurazione del job.Aggiungi un oggetto
Input
all'arrayinputs
che definisce la chiave e l'URI per il video di input associato.Aggiungi un altro oggetto
Input
che definisce l'URI del file di sottotitoli codificati di input.Aggiungi un array
editList
alla configurazione. Questo array viene utilizzato per aggiungere gli input alla sequenza temporale del video di output.Aggiungi un oggetto
EditAtom
all'arrayeditList
che fa riferimento agli oggetti nell'arrayinputs
per chiave. Puoi designare unstartTimeOffset
e unendTimeOffset
per tagliare il video di input.Aggiungi i sottotitoli codificati ai contenitori di output aggiungendo un oggetto
textStream
all'arrayelementaryStreams
.Per il file di sottotitoli codificati autonomo, specifica il contenitore nell'array
muxStream
; consulta gli oggetti con le chiavitext-vtt-en
etext-vtt-es
nella seguente configurazione. Per i sottotitoli incorporati, è necessario solo lo stream elementare.
La seguente configurazione genera più file WebVTT, uno per i sottotitoli in inglese e uno per i sottotitoli in spagnolo. I sottotitoli DASH nei file WebVTT vengono creati nel formato contenitore fMP4.
Puoi aggiungere questa configurazione a un modello di job o includerla in una configurazione di job ad hoc:
REST
Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
PROJECT_ID
: il tuo ID progetto Google Cloud elencato nelle impostazioni IAM.LOCATION
: la località in cui verrà eseguito il job. Utilizza una delle regioni supportate.Mostra localitàus-central1
us-west1
us-west2
us-east1
us-east4
southamerica-east1
northamerica-northeast1
asia-east1
asia-northeast1
asia-northeast3
asia-south1
asia-southeast1
australia-southeast1
europe-west1
europe-west2
europe-west4
me-west1
me-central1
me-central2
STORAGE_BUCKET_NAME
: il nome del bucket Cloud Storage che hai creato.STORAGE_INPUT_VIDEO
: il nome di un video nel tuo bucket Cloud Storage che stai transcodificando, ad esempiomy-vid.mp4
. Questo campo deve tenere conto di tutte le cartelle che hai creato nel bucket (ad esempioinput/my-vid.mp4
).STORAGE_SUBTITLES_FILE1
: il nome del file dei sottotitoli nel bucket Cloud Storage, ad esempiosubtitles-en.srt
per i sottotitoli in inglese. Questo campo deve tenere conto di tutte le cartelle che hai creato nel bucket (ad esempioinput/subtitles-en.srt
).STORAGE_SUBTITLES_FILE2
: il nome di un altro file di sottotitoli codificati nel bucket Cloud Storage, ad esempiosubtitles-es.srt
per i sottotitoli codificati in spagnolo. Questo campo deve tenere conto di tutte le cartelle che hai creato nel bucket (ad esempioinput/subtitles-es.srt
).STORAGE_OUTPUT_FOLDER
: il nome della cartella di output nel bucket Cloud Storage in cui vuoi salvare gli output video codificati.
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID", "config": { ... }, "state": "PENDING", "createTime": CREATE_TIME, "ttlAfterCompletionDays": 30 }
gcloud
Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:
LOCATION
: la località in cui verrà eseguito il job. Utilizza una delle regioni supportate.Mostra localitàus-central1
us-west1
us-west2
us-east1
us-east4
southamerica-east1
northamerica-northeast1
asia-east1
asia-northeast1
asia-northeast3
asia-south1
asia-southeast1
australia-southeast1
europe-west1
europe-west2
europe-west4
me-west1
me-central1
me-central2
STORAGE_BUCKET_NAME
: il nome del bucket Cloud Storage che hai creato.STORAGE_INPUT_VIDEO
: il nome di un video nel tuo bucket Cloud Storage che stai transcodificando, ad esempiomy-vid.mp4
. Questo campo deve tenere conto di tutte le cartelle che hai creato nel bucket (ad esempioinput/my-vid.mp4
).STORAGE_SUBTITLES_FILE1
: il nome del file dei sottotitoli nel bucket Cloud Storage, ad esempiosubtitles-en.srt
per i sottotitoli in inglese. Questo campo deve tenere conto di tutte le cartelle che hai creato nel bucket (ad esempioinput/subtitles-en.srt
).STORAGE_SUBTITLES_FILE2
: il nome di un altro file di sottotitoli codificati nel bucket Cloud Storage, ad esempiosubtitles-es.srt
per i sottotitoli codificati in spagnolo. Questo campo deve tenere conto di tutte le cartelle che hai creato nel bucket (ad esempioinput/subtitles-es.srt
).STORAGE_OUTPUT_FOLDER
: il nome della cartella di output nel bucket Cloud Storage in cui vuoi salvare gli output video codificati.
Salva i seguenti contenuti in un file denominato request.json
:
{ "config": { "inputs": [ { "key": "input0", "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_INPUT_VIDEO" }, { "key": "subtitle_input_en", "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_SUBTITLES_FILE1" }, { "key": "subtitle_input_es", "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_SUBTITLES_FILE2" } ], "editList": [ { "key": "atom0", "inputs": [ "input0", "subtitle_input_en", "subtitle_input_es" ] } ], "elementaryStreams": [ { "key": "video-stream0", "videoStream": { "h264": { "heightPixels": 360, "widthPixels": 640, "bitrateBps": 550000, "frameRate": 60 } } }, { "key": "audio-stream0", "audioStream": { "codec": "aac", "bitrateBps": 64000 } }, { "key": "vtt-stream-en", "textStream": { "codec": "webvtt", "languageCode": "en-US", "displayName": "English", "mapping": [ { "atomKey": "atom0", "inputKey": "subtitle_input_en" } ] } }, { "key": "vtt-stream-es", "textStream": { "codec": "webvtt", "languageCode": "es-ES", "displayName": "Spanish", "mapping": [ { "atomKey": "atom0", "inputKey": "subtitle_input_es" } ] } } ], "muxStreams": [ { "key": "sd-hls-fmp4", "container": "fmp4", "elementaryStreams": [ "video-stream0" ] }, { "key": "audio-hls-fmp4", "container": "fmp4", "elementaryStreams": [ "audio-stream0" ] }, { "key": "text-vtt-en", "container": "vtt", "elementaryStreams": [ "vtt-stream-en" ], "segmentSettings": { "segmentDuration": "6s", "individualSegments": true } }, { "key": "text-vtt-es", "container": "vtt", "elementaryStreams": [ "vtt-stream-es" ], "segmentSettings": { "segmentDuration": "6s", "individualSegments": true } } ], "manifests": [ { "fileName": "manifest.m3u8", "type": "HLS", "muxStreams": [ "sd-hls-fmp4", "audio-hls-fmp4", "text-vtt-en", "text-vtt-es" ] } ], "output": { "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_OUTPUT_FOLDER/" } } }
Esegui questo comando:
Linux, macOS o Cloud Shell
gcloud transcoder jobs create --location=LOCATION --file=request.json
Windows (PowerShell)
gcloud transcoder jobs create --location=LOCATION --file=request.json
Windows (cmd.exe)
gcloud transcoder jobs create --location=LOCATION --file=request.json
Dovresti ricevere una risposta simile alla seguente:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID", "config": { ... }, "state": "PENDING", "createTime": CREATE_TIME, "ttlAfterCompletionDays": 30 }
Go
Prima di provare questo esempio, segui le istruzioni di configurazione di Go nella guida rapida all'API Transcoder per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Transcoder per Go.
Per autenticarti all'API Transcoder, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configura l'autenticazione per un ambiente di sviluppo locale.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida all'API Transcoder per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Transcoder per Java.
Per autenticarti all'API Transcoder, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configura l'autenticazione per un ambiente di sviluppo locale.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js nella guida rapida all'API Transcoder per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Transcoder per Node.js.
Per autenticarti all'API Transcoder, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configura l'autenticazione per un ambiente di sviluppo locale.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida all'API Transcoder per l'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Transcoder per Python.
Per autenticarti all'API Transcoder, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configura l'autenticazione per un ambiente di sviluppo locale.
Riprodurre il tuo video
Per visualizzare i sottotitoli codificati o i sottotitoli su Windows, riproduci il video nell'app Film e TV. Assicurati di selezionare la traccia dei sottotitoli.
Per visualizzare i sottotitoli codificati su macOS o Linux, puoi riprodurre il video in Shaka Player. Assicurati di attivare i sottotitoli codificati dal menu Sottotitoli.
Per riprodurre il file multimediale generato in Shaka Player, completa i seguenti passaggi:
- Rendi leggibile pubblicamente il bucket Cloud Storage che hai creato.
- Per abilitare la condivisione delle risorse tra origini (CORS) in un bucket Cloud Storage, procedi nel seguente modo:
- Crea un file JSON contenente le seguenti informazioni:
[ { "origin": ["https://shaka-player-demo.appspot.com/"], "responseHeader": ["Content-Type", "Range"], "method": ["GET", "HEAD"], "maxAgeSeconds": 3600 } ]
-
Esegui questo comando dopo aver sostituito JSON_FILE_NAME con
il nome del file JSON che hai creato nel passaggio precedente:
gcloud storage buckets update gs://STORAGE_BUCKET_NAME --cors-file=JSON_FILE_NAME.json
- Crea un file JSON contenente le seguenti informazioni:
- Scegli uno dei file MP4 o manifest generati dal job di transcodifica nel bucket Cloud Storage. Fai clic su Copia URL nella colonna Accesso pubblico del file.
- Vai a Shaka Player, un lettore per live streaming online.
- Fai clic su Custom Content (Contenuti personalizzati) nella barra di navigazione in alto.
- Fai clic sul pulsante +.
Incolla l'URL pubblico del file nella casella Manifest URL (URL del manifest).
Digita un nome nella casella Name (Nome).
Fai clic su Salva.
Fai clic su Play (Riproduci).
Seleziona il pulsante con i tre puntini in basso a destra del player e attiva i sottotitoli codificati.
Esempio
Puoi utilizzare i seguenti file per un job di test:
- Video di input di esempio
- File di sottotitoli codificati di esempio per i sottotitoli codificati
- File di sottotitoli codificati di esempio per i sottotitoli in inglese
- File di sottotitoli codificati di esempio per i sottotitoli in spagnolo
Il file di sottotitoli codificati di input non deve contenere righe vuote tra le righe di testo.