Questa pagina spiega come aggiungere sottotitoli e sottotitoli codificati a un video di output.
I sottotitoli codificati (o semplicemente i sottotitoli) rappresentano la rappresentazione visiva dell'audio di un video. I sottotitoli codificati sono generalmente nella stessa lingua dell'audio e includono suoni di sottofondo e modifiche della persona che parlano.
I sottotitoli vengono generalmente utilizzati per tradurre i dialoghi di un video in una lingua diversa. Solitamente i sottotitoli non includono suoni di sottofondo e modifiche delle persone che parlano.
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 alla configurazione di un lavoro
Consulta gli input e output supportati per i formati di file dei sottotitoli di input supportati. Ti vengono forniti un file video di esempio e dei file di sottotitoli codificati di input di esempio per testare la tua configurazione.
Utilizza le informazioni nelle sezioni seguenti per aggiungere sottotitoli e sottotitoli codificati a una configurazione del job. Questa pagina presuppone che tu abbia familiarità con un comando JobConfig di base. Per ulteriori informazioni sulla creazione di job di transcodifica, consulta Creazione e gestione dei job.
Aggiungi didascalie
Per creare un job che incorpora i sottotitoli nel contenitore del file video di output:
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 al file dei 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 che hai aggiunto nell'arrayinputs
. Puoi designare unstartTimeOffset
e unendTimeOffset
per tagliare il video di input.Aggiungi le didascalie ai container 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é è presente 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:
Aggiungi sottotitoli
Per creare un job che produca file di sottotitoli multilingue riprodotti da un manifest:
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 definisca l'URI del file dei sottotitoli di input.Aggiungi un array
editList
alla configurazione. Questo array viene utilizzato per aggiungere 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 le didascalie ai container di output aggiungendo un oggetto
textStream
all'arrayelementaryStreams
.Per il file di sottotitoli autonomo, specifica il container nell'array
muxStream
; visualizza gli oggetti con le chiavitext-vtt-en
etext-vtt-es
nella configurazione seguente. 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.
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, effettua le seguenti sostituzioni:
PROJECT_ID
: l'ID del tuo 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
STORAGE_BUCKET_NAME
: il nome del bucket Cloud Storage che hai creato.STORAGE_INPUT_VIDEO
: il nome di un video nel bucket Cloud Storage che stai transcodificando, ad esempiomy-vid.mp4
. Questo campo deve tenere conto di eventuali cartelle create nel bucket (ad esempio,input/my-vid.mp4
).STORAGE_SUBTITLES_FILE1
: nome del file dei sottotitoli nel bucket Cloud Storage, ad esempiosubtitles-en.srt
per i sottotitoli in lingua inglese. Questo campo deve tenere conto di eventuali cartelle create nel bucket (ad esempio,input/subtitles-en.srt
).STORAGE_SUBTITLES_FILE2
: il nome di un altro file di sottotitoli nel tuo bucket Cloud Storage, ad esempiosubtitles-es.srt
per i sottotitoli in spagnolo. Questo campo deve tenere conto di eventuali cartelle create nel bucket (ad esempio,input/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 uno qualsiasi dei dati di comando 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
STORAGE_BUCKET_NAME
: il nome del bucket Cloud Storage che hai creato.STORAGE_INPUT_VIDEO
: il nome di un video nel bucket Cloud Storage che stai transcodificando, ad esempiomy-vid.mp4
. Questo campo deve tenere conto di eventuali cartelle create nel bucket (ad esempio,input/my-vid.mp4
).STORAGE_SUBTITLES_FILE1
: nome del file dei sottotitoli nel bucket Cloud Storage, ad esempiosubtitles-en.srt
per i sottotitoli in lingua inglese. Questo campo deve tenere conto di eventuali cartelle create nel bucket (ad esempio,input/subtitles-en.srt
).STORAGE_SUBTITLES_FILE2
: il nome di un altro file di sottotitoli nel tuo bucket Cloud Storage, ad esempiosubtitles-es.srt
per i sottotitoli in spagnolo. Questo campo deve tenere conto di eventuali cartelle create nel bucket (ad esempio,input/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 disponibili nella guida rapida dell'API Transcoder sull'utilizzo delle librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Go per l'API Transcoder.
Per eseguire l'autenticazione all'API Transcoder, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java disponibili nella guida rapida dell'API Transcoder sull'utilizzo delle librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Java per l'API Transcoder.
Per eseguire l'autenticazione all'API Transcoder, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js disponibili nella guida rapida dell'API Transcoder sull'utilizzo delle librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Node.js per l'API Transcoder.
Per eseguire l'autenticazione all'API Transcoder, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python disponibili nella guida rapida dell'API Transcoder sull'utilizzo delle librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Python per l'API Transcoder.
Per eseguire l'autenticazione all'API Transcoder, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Riproduci il video
Per visualizzare i sottotitoli su Windows, riproduci il video nell'app Film. Assicurati di selezionare la traccia di sottotitoli.
Per visualizzare i sottotitoli su MacOS o Linux, puoi riprodurre il video in Shaka Player. Assicurati di attivare i sottotitoli dal menu Sottotitoli.
Per riprodurre il file multimediale generato in Shaka Player, completa i seguenti passaggi:
- Rendi pubblicamente leggibile il bucket Cloud Storage che hai creato.
- Per abilitare la condivisione delle risorse tra origini (CORS) in un bucket Cloud Storage, segui questi passaggi:
- Crea un file JSON contenente quanto segue:
[ { "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 creato nel passaggio precedente:
gsutil cors set JSON_FILE_NAME.json gs://STORAGE_BUCKET_NAME
- Crea un file JSON contenente quanto segue:
- Scegli uno dei file manifest o MP4 generati dal job di transcodifica nel bucket Cloud Storage. Fai clic su Copia URL nella colonna Accesso pubblico del file.
- Vai su Shaka Player, un player per il 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 puntini di sospensione nella parte inferiore destra del player e attiva i sottotitoli codificati.
Esempio
Per un job di test puoi utilizzare i seguenti file:
- Video di input di esempio
- File di sottotitoli di input di esempio per i sottotitoli codificati
- File di esempio di sottotitoli di input per i sottotitoli in inglese
- File di esempio di sottotitoli di input per i sottotitoli in spagnolo
Il file dei sottotitoli codificati di input non deve contenere righe vuote tra le righe di testo.