Esta página explica como adicionar legendas a um vídeo de saída.
As legendas (ou apenas legendas) são a apresentação visual do áudio num vídeo. Normalmente, as legendas estão no mesmo idioma que o áudio e incluem sons de fundo e alterações de orador.
As legendas são normalmente usadas para traduzir o diálogo de um vídeo para um idioma diferente. Normalmente, as legendas não incluem sons de fundo nem mudanças de orador.
Esta página usa o termo ficheiro de legendas de entrada para se referir a um ficheiro de texto que contém legendas. Fornece este ficheiro como entrada para uma tarefa.
Adicione legendas a uma configuração de tarefa
Consulte as entradas e saídas suportadas para ver os formatos de ficheiros de legendas de entrada suportados. É fornecido um ficheiro de vídeo de exemplo e ficheiros de legendas de entrada de exemplo para testar a sua configuração.
Use as informações nas secções seguintes para adicionar legendas a uma configuração de tarefa. Esta página pressupõe que está familiarizado com uma JobConfig básica. Para mais informações sobre a criação de tarefas de transcodificação, consulte Criar e gerir tarefas.
Adicione legendas
Para criar uma tarefa que incorpore legendas no contentor do ficheiro de vídeo de saída, faça o seguinte:
Adicione uma matriz
inputs
ao início da configuração do trabalho.Adicione um objeto
Input
à matrizinputs
que define a chave e o URI do vídeo de entrada associado.Adicione outro objeto
Input
que inclua o caminho para o ficheiro de legendas de entrada.Adicione uma matriz à configuração da tarefa.
editList
Esta matriz é usada para adicionar entradas à cronologia do vídeo de saída.Adicione um objeto
EditAtom
ao conjuntoeditList
. Este objetoEditAtom
tem de referenciar as chaves do vídeo de entrada e das legendas que adicionou na matrizinputs
. Pode designar umstartTimeOffset
e umendTimeOffset
para cortar o vídeo de entrada.Adicione as legendas aos contentores de saída adicionando um
textStream
objeto à matrizelementaryStreams
. Só é suportada uma stream de texto incorporada, que é adicionada a todos os vídeos de saída (uma vez que só existe uma cronologia de saída).Use a matriz
mapping
no objeto de configuraçãotextStream
para fazer referência à chave do objetoEditAtom
.
A configuração de exemplo seguinte incorpora legendas CEA-608 num vídeo.
Pode adicionar esta configuração a um modelo de tarefa ou incluí-la numa configuração de tarefa ad hoc:
REST
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
PROJECT_ID
: o ID do projeto indicado nas definições de IAM. Google CloudLOCATION
: a localização onde a tarefa vai ser executada. Usar uma das regiões suportadas.Mostrar localizaçõesus-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
: o nome do contentor do Cloud Storage que criou.STORAGE_INPUT_VIDEO
: o nome de um vídeo no seu contentor do Cloud Storage que está a transcodificar, comomy-vid.mp4
. Este campo deve ter em conta todas as pastas que criou no contentor (por exemplo,input/my-vid.mp4
).STORAGE_CAPTIONS_FILE
: o nome de um ficheiro de legendas no seu contentor do Cloud Storage, comocaptions.srt
. Este campo deve ter em conta todas as pastas que criou no contentor (por exemplo,input/captions.srt
).STORAGE_OUTPUT_FOLDER
: O nome da pasta de saída no seu contentor do Cloud Storage onde quer guardar as saídas de vídeo codificadas.
Para enviar o seu pedido, expanda uma destas opções:
Deve receber uma resposta JSON semelhante à seguinte:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID", "config": { ... }, "state": "PENDING", "createTime": CREATE_TIME, "ttlAfterCompletionDays": 30 }
gcloud
Antes de usar qualquer um dos dados de comandos abaixo, faça as seguintes substituições:
LOCATION
: a localização onde a tarefa vai ser executada. Usar uma das regiões suportadas.Mostrar localizaçõesus-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
: o nome do contentor do Cloud Storage que criou.STORAGE_INPUT_VIDEO
: o nome de um vídeo no seu contentor do Cloud Storage que está a transcodificar, comomy-vid.mp4
. Este campo deve ter em conta todas as pastas que criou no contentor (por exemplo,input/my-vid.mp4
).STORAGE_CAPTIONS_FILE
: o nome de um ficheiro de legendas no seu contentor do Cloud Storage, comocaptions.srt
. Este campo deve ter em conta todas as pastas que criou no contentor (por exemplo,input/captions.srt
).STORAGE_OUTPUT_FOLDER
: O nome da pasta de saída no seu contentor do Cloud Storage onde quer guardar as saídas de vídeo codificadas.
Guarde o seguinte conteúdo num ficheiro denominado 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/" } } }
Execute o seguinte comando:
Linux, macOS ou 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
Deve receber uma resposta semelhante à seguinte:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID", "config": { ... }, "state": "PENDING", "createTime": CREATE_TIME, "ttlAfterCompletionDays": 30 }
Go
Antes de experimentar este exemplo, siga as Goinstruções de configuração no guia de início rápido da API Transcoder com bibliotecas cliente. Para mais informações, consulte a documentação de referência da API TranscoderGo.
Para se autenticar na API Transcoder, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Java
Antes de experimentar este exemplo, siga as Javainstruções de configuração no guia de início rápido da API Transcoder com bibliotecas cliente. Para mais informações, consulte a documentação de referência da API TranscoderJava.
Para se autenticar na API Transcoder, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Node.js
Antes de experimentar este exemplo, siga as Node.jsinstruções de configuração no guia de início rápido da API Transcoder com bibliotecas cliente. Para mais informações, consulte a documentação de referência da API TranscoderNode.js.
Para se autenticar na API Transcoder, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Python
Antes de experimentar este exemplo, siga as Pythoninstruções de configuração no guia de início rápido da API Transcoder com bibliotecas cliente. Para mais informações, consulte a documentação de referência da API TranscoderPython.
Para se autenticar na API Transcoder, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Adicione legendas
Para criar uma tarefa que produza ficheiros de legendas em vários idiomas reproduzidos a partir de um manifesto, faça o seguinte:
Adicione uma matriz
inputs
à configuração da tarefa.Adicione um objeto
Input
à matrizinputs
que define a chave e o URI do vídeo de entrada associado.Adicione outro objeto
Input
que defina o URI do ficheiro de legendas de entrada.Adicione uma matriz à configuração.
editList
Esta matriz é usada para adicionar as entradas à cronologia do vídeo de saída.Adicione um objeto
EditAtom
à matrizeditList
que faz referência aos objetos na matrizinputs
por chave. Pode designar umstartTimeOffset
e umendTimeOffset
para cortar o vídeo de entrada.Adicione as legendas aos contentores de saída adicionando um
textStream
objeto à matrizelementaryStreams
.Para o ficheiro de legendas autónomo, especifique o contentor na matriz
muxStream
; consulte os objetos com as chavestext-vtt-en
etext-vtt-es
na seguinte configuração. Para legendas incorporadas, só precisa da stream elementar.
A configuração seguinte gera vários ficheiros WebVTT, um para legendas em inglês e outro para legendas em espanhol. As legendas DASH em ficheiros WebVTT são criadas no formato de contentor fMP4.
Pode adicionar esta configuração a um modelo de tarefa ou incluí-la numa configuração de tarefa ad hoc:
REST
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
PROJECT_ID
: o ID do projeto indicado nas definições de IAM. Google CloudLOCATION
: a localização onde a tarefa vai ser executada. Usar uma das regiões suportadas.Mostrar localizaçõesus-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
: o nome do contentor do Cloud Storage que criou.STORAGE_INPUT_VIDEO
: o nome de um vídeo no seu contentor do Cloud Storage que está a transcodificar, comomy-vid.mp4
. Este campo deve ter em conta todas as pastas que criou no contentor (por exemplo,input/my-vid.mp4
).STORAGE_SUBTITLES_FILE1
: o nome do ficheiro de legendas no seu contentor do Cloud Storage, comosubtitles-en.srt
para legendas em inglês. Este campo deve ter em conta todas as pastas que criou no contentor (por exemplo,input/subtitles-en.srt
).STORAGE_SUBTITLES_FILE2
: o nome de outro ficheiro de legendas no seu contentor do Cloud Storage, comosubtitles-es.srt
para legendas em espanhol. Este campo deve ter em conta todas as pastas que criou no contentor (por exemplo,input/subtitles-es.srt
).STORAGE_OUTPUT_FOLDER
: O nome da pasta de saída no seu contentor do Cloud Storage onde quer guardar as saídas de vídeo codificadas.
Para enviar o seu pedido, expanda uma destas opções:
Deve receber uma resposta JSON semelhante à seguinte:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID", "config": { ... }, "state": "PENDING", "createTime": CREATE_TIME, "ttlAfterCompletionDays": 30 }
gcloud
Antes de usar qualquer um dos dados de comandos abaixo, faça as seguintes substituições:
LOCATION
: a localização onde a tarefa vai ser executada. Usar uma das regiões suportadas.Mostrar localizaçõesus-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
: o nome do contentor do Cloud Storage que criou.STORAGE_INPUT_VIDEO
: o nome de um vídeo no seu contentor do Cloud Storage que está a transcodificar, comomy-vid.mp4
. Este campo deve ter em conta todas as pastas que criou no contentor (por exemplo,input/my-vid.mp4
).STORAGE_SUBTITLES_FILE1
: o nome do ficheiro de legendas no seu contentor do Cloud Storage, comosubtitles-en.srt
para legendas em inglês. Este campo deve ter em conta todas as pastas que criou no contentor (por exemplo,input/subtitles-en.srt
).STORAGE_SUBTITLES_FILE2
: o nome de outro ficheiro de legendas no seu contentor do Cloud Storage, comosubtitles-es.srt
para legendas em espanhol. Este campo deve ter em conta todas as pastas que criou no contentor (por exemplo,input/subtitles-es.srt
).STORAGE_OUTPUT_FOLDER
: O nome da pasta de saída no seu contentor do Cloud Storage onde quer guardar as saídas de vídeo codificadas.
Guarde o seguinte conteúdo num ficheiro denominado 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/" } } }
Execute o seguinte comando:
Linux, macOS ou 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
Deve receber uma resposta semelhante à seguinte:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID", "config": { ... }, "state": "PENDING", "createTime": CREATE_TIME, "ttlAfterCompletionDays": 30 }
Go
Antes de experimentar este exemplo, siga as Goinstruções de configuração no guia de início rápido da API Transcoder com bibliotecas cliente. Para mais informações, consulte a documentação de referência da API TranscoderGo.
Para se autenticar na API Transcoder, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Java
Antes de experimentar este exemplo, siga as Javainstruções de configuração no guia de início rápido da API Transcoder com bibliotecas cliente. Para mais informações, consulte a documentação de referência da API TranscoderJava.
Para se autenticar na API Transcoder, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Node.js
Antes de experimentar este exemplo, siga as Node.jsinstruções de configuração no guia de início rápido da API Transcoder com bibliotecas cliente. Para mais informações, consulte a documentação de referência da API TranscoderNode.js.
Para se autenticar na API Transcoder, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Python
Antes de experimentar este exemplo, siga as Pythoninstruções de configuração no guia de início rápido da API Transcoder com bibliotecas cliente. Para mais informações, consulte a documentação de referência da API TranscoderPython.
Para se autenticar na API Transcoder, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Ver vídeo
Para ver as legendas no Windows, reproduza o vídeo na app Filmes e TV. Certifique-se de que seleciona a faixa de legendas.
Para ver as legendas no MacOS ou Linux, pode ver o vídeo no Shaka Player. Certifique-se de que ativa as legendas no menu Legendas.
Para reproduzir o ficheiro multimédia gerado no Shaka Player, conclua os seguintes passos:
- Torne o contentor do Cloud Storage que criou publicamente legível.
- Para ativar a partilha de recursos de origem cruzada (CORS) num contentor do Cloud Storage, faça o seguinte:
- Crie um ficheiro JSON que contenha o seguinte:
[ { "origin": ["https://shaka-player-demo.appspot.com/"], "responseHeader": ["Content-Type", "Range"], "method": ["GET", "HEAD"], "maxAgeSeconds": 3600 } ]
-
Execute o seguinte comando depois de substituir JSON_FILE_NAME pelo nome do ficheiro JSON que criou no passo anterior:
gcloud storage buckets update gs://STORAGE_BUCKET_NAME --cors-file=JSON_FILE_NAME.json
- Crie um ficheiro JSON que contenha o seguinte:
- Escolha um dos ficheiros MP4 ou de manifesto gerados pela tarefa de transcodificação no contentor do Cloud Storage. Clique em Copiar URL na coluna Acesso público do ficheiro.
- Navegue para Shaka Player, um leitor de streams em direto online.
- Clique em Conteúdo personalizado na barra de navegação superior.
- Clique no botão +.
Cole o URL público do ficheiro na caixa URL do manifesto.
Introduza um nome na caixa Nome.
Clique em Guardar.
Clique em Jogar.
Selecione o botão de reticências na parte inferior direita do leitor e ative as legendas.
Exemplo
Pode usar os seguintes ficheiros para uma tarefa de teste:
- Vídeo de entrada de exemplo
- Ficheiro de legendas de entrada de exemplo para legendas
- Ficheiro de legendas de entrada de exemplo para legendas em inglês
- Ficheiro de legendas de entrada de exemplo para legendas em espanhol
O ficheiro de legendas de entrada não pode conter linhas em branco entre as linhas de texto.