Esta página explica como adicionar legendas ocultas e legendas a um vídeo de saída.
Legendas (ou apenas legendas) são a exibição visual do áudio em um vídeo. Fechado as legendas geralmente estão no mesmo idioma do áudio e incluem informações de sons e mudanças nos alto-falantes.
As legendas geralmente são usadas para traduzir o diálogo de um vídeo para outro idioma. As legendas geralmente não incluem sons de fundo e mudanças de alto-falante.
Esta página usa o termo arquivo de legenda de entrada para se referir a um arquivo de texto que contém legendas. Forneça esse arquivo como uma entrada para um job.
Adicionar legendas a uma configuração de job
Consulte a entradas e saídas compatíveis para os formatos de arquivo de legenda de entrada compatíveis. Um arquivo de vídeo de amostra e exemplos de arquivos de legenda de entrada são fornecidos para você testar a configuração.
Use as informações nas seções a seguir para adicionar legendas a um trabalho configuração do Terraform. Nesta página, presume-se que você tenha familiaridade com um JobConfig. Para mais informações sobre como criar jobs de transcodificação, consulte Criar e gerenciar jobs.
Adicionar as legendas ocultas
Para criar um job que incorpore legendas ao contêiner do arquivo de vídeo de saída, faça o seguintes:
Adicione um Matriz
inputs
no início da configuração do job.Adicionar um objeto
Input
à matrizinputs
que define a chave e o URI da entrada associada vídeo.Adicionar outro
Input
que inclui o caminho para o arquivo de legenda de entrada.Adicione um
editList
à configuração do job. Ela é usada para adicionar entradas ao a linha do tempo de saída do vídeo.Adicionar um
EditAtom
à matrizeditList
. Isso ObjetoEditAtom
deve fazer referência às teclas do vídeo de entrada e das legendas adicionadas na matrizinputs
. Você pode designarstartTimeOffset
eendTimeOffset
para cortar o vídeo de entrada.Adicione as legendas aos contêineres de saída adicionando um objeto
textStream
à matrizelementaryStreams
. Somente um fluxo de texto incorporado é compatível e é adicionado a todos vídeos de saída (já que há apenas um cronograma de saída).Use o
mapping
natextStream
objeto de configuração para referenciar o ObjetoEditAtom
de dados.
O exemplo de configuração a seguir incorpora legendas descritivas CEA-608 em um vídeo.
É possível adicionar essa configuração a um modelo de job ou incluí-la em uma configuração de job ad-hoc:
Adicionar legendas
Para criar um job que produza arquivos de legendas em vários idiomas reproduzidos a partir de um manifesto, faça o seguinte:
Adicione um Matriz
inputs
à configuração do job.Adicionar um objeto
Input
à matrizinputs
que define a chave e o URI da entrada associada vídeo.Adicione outro objeto
Input
que defina o URI do arquivo de legenda de entrada.Adicione um
editList
à configuração. Essa matriz é usada para adicionar as entradas ao a linha do tempo de saída do vídeo.Adicionar um
EditAtom
objeto para a matrizeditList
que faz referência aos objetos no objetoinputs
matriz por chave. Você pode designarstartTimeOffset
eendTimeOffset
para cortar o vídeo de entrada.Adicione as legendas aos contêineres de saída
textStream
ao objetoelementaryStreams
matriz.Para o arquivo de legenda independente, especifique o contêiner na matriz
muxStream
; confira os objetos com as chavestext-vtt-en
etext-vtt-es
no configuração do Terraform. Para legendas incorporadas, você só precisa do córrego elementar.
A configuração a seguir gera vários arquivos WebVTT, um para o inglês. e outra em espanhol. As legendas DASH em arquivos WebVTT são criado no formato de contêiner fMP4.
É possível adicionar essa configuração a um modelo de job ou incluí-la em uma configuração de job ad-hoc:
REST
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_ID
: o ID do projeto do Google Cloud listado nas Configurações do IAMLOCATION
: o local onde seu job será executado. Usar uma das regiões com suporte.Mostrar locaisus-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
: o nome do bucket do Cloud Storage criado.STORAGE_INPUT_VIDEO
: o nome do vídeo no bucket do Cloud Storage que você está transcodificando, comomy-vid.mp4
. Este campo precisa considerar todas as pastas criadas no bucket (por exemplo,input/my-vid.mp4
).STORAGE_SUBTITLES_FILE1
: o nome do arquivo de legendas no bucket do Cloud Storage, comosubtitles-en.srt
para legendas em inglês. Este campo precisa considerar todas as pastas criadas no bucket (por exemplo,input/subtitles-en.srt
).STORAGE_SUBTITLES_FILE2
: o nome de outro arquivo de legendas no bucket do Cloud Storage, comosubtitles-es.srt
para legendas em espanhol. Este campo precisa considerar todas as pastas criadas no bucket (por exemplo,input/subtitles-es.srt
).STORAGE_OUTPUT_FOLDER
: o nome do no bucket do Cloud Storage em que você quer salvar as saídas de vídeo codificadas.
Para enviar a solicitação, expanda uma destas opções:
Você receberá uma resposta JSON semelhante a esta:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID", "config": { ... }, "state": "PENDING", "createTime": CREATE_TIME, "ttlAfterCompletionDays": 30 }
gcloud
Antes de usar os dados do comando abaixo, faça estas substituições:
LOCATION
: o local onde seu job será executado. Usar uma das regiões com suporte.Mostrar locaisus-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
: o nome do bucket do Cloud Storage criado.STORAGE_INPUT_VIDEO
: o nome do vídeo no bucket do Cloud Storage que você está transcodificando, comomy-vid.mp4
. Este campo precisa considerar todas as pastas criadas no bucket (por exemplo,input/my-vid.mp4
).STORAGE_SUBTITLES_FILE1
: o nome do arquivo de legendas no bucket do Cloud Storage, comosubtitles-en.srt
para legendas em inglês. Este campo precisa considerar todas as pastas criadas no bucket (por exemplo,input/subtitles-en.srt
).STORAGE_SUBTITLES_FILE2
: o nome de outro arquivo de legendas no bucket do Cloud Storage, comosubtitles-es.srt
para legendas em espanhol. Este campo precisa considerar todas as pastas criadas no bucket (por exemplo,input/subtitles-es.srt
).STORAGE_OUTPUT_FOLDER
: o nome da pasta de saída no bucket do Cloud Storage em que você quer salvar as saídas de vídeo codificadas.
Salve o conteúdo a seguir em um arquivo chamado 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
Você receberá uma resposta semelhante a esta:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID", "config": { ... }, "state": "PENDING", "createTime": CREATE_TIME, "ttlAfterCompletionDays": 30 }
Go
Antes de testar este exemplo, siga as instruções de configuração do Go na Guia de início rápido da API Transcoder usando bibliotecas de cliente. Para mais informações, consulte a API Go da API Transcoder documentação de referência.
Para autenticar na API Transcoder, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Java
Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido da API Transcoder: como usar bibliotecas de cliente. Para mais informações, consulte a API Java da API Transcoder documentação de referência.
Para autenticar na API Transcoder, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Node.js
Antes de testar esta amostra, siga as instruções de configuração do Node.js no Guia de início rápido da API Transcoder: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Transcoder Node.js.
Para autenticar na API Transcoder, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Python
Antes de testar este exemplo, siga as instruções de configuração do Python na Guia de início rápido da API Transcoder usando bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Transcoder Python.
Para autenticar na API Transcoder, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Assistir o vídeo
Para visualizar as legendas no Windows, reproduza o vídeo na guia App de TV. Marca selecione a faixa de legendas.
Para visualizar as legendas no MacOS ou no Linux, reproduza o vídeo no Shaka Player (link em inglês). Não se esqueça de ativar as legendas no menu Legendas.
Para reproduzir o arquivo de mídia gerado no Shaka Player (em inglês), conclua as seguintes etapas:
- Torne o bucket do Cloud Storage criado publicamente legível.
- Para ativar o compartilhamento de recursos entre origens
(CORS, na sigla em inglês) em um bucket do Cloud Storage, faça o seguinte:
- Crie um arquivo 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 arquivo JSON criado na etapa anterior:
gcloud storage buckets update gs://STORAGE_BUCKET_NAME --cors-file=JSON_FILE_NAME.json
- Crie um arquivo JSON que contenha o seguinte:
- Escolha um dos arquivos MP4 ou de manifesto gerados pelo job de transcodificação no bucket do Cloud Storage. Clique em Copiar URL na coluna Acesso público do arquivo.
- Acesse o Shaka Player, um player de transmissão ao vivo on-line.
- Clique em Conteúdo personalizado na barra de navegação superior.
- Clique no botão +.
Cole o URL público do arquivo na caixa URL do manifesto.
Digite um nome na caixa Nome.
Clique em Salvar.
Clique em Jogar
Selecione o botão de reticências no canto inferior direito do player e ative e legendas.
Exemplo
É possível usar os seguintes arquivos para um job de teste:
- Exemplo de vídeo de entrada
- Exemplo de arquivo de legenda de entrada para legendas
- Exemplo de arquivo de legenda de entrada para legendas em inglês
- Exemplo de arquivo de legenda de entrada para legendas em espanhol
O arquivo de legenda de entrada não pode conter linhas em branco entre as linhas de texto.