Esta página explica como inserir sobreposições em vídeos transcodificados. Uma sobreposição
consiste numa imagem inserida sobre o vídeo de saída e pode
ser opcionalmente esbatida durante um período especificado. Para inserir uma sobreposição, use a matriz overlays
no modelo JobConfig
.
Consulte a lista de formatos de ficheiros de imagem suportados.
Carregue uma imagem para o Cloud Storage
Para começar, faça o seguinte para carregar uma imagem de sobreposição para o seu contentor do Cloud Storage:
- Na Google Cloud consola, aceda à página do navegador do Cloud Storage.
Aceda à página do navegador do armazenamento na nuvem - Clique no nome do seu contentor para o abrir.
- Clique em Carregar ficheiros.
- Selecione um ficheiro de imagem para carregar a partir do seu computador local.
Crie uma sobreposição
Pode criar dois tipos de sobreposições: estáticas ou animadas. Ambos os tipos de sobreposições usam uma imagem estática. Pode mostrar ou ocultar sobreposições estáticas. As sobreposições animadas suportam animações de aparecimento e desaparecimento gradual da imagem.
Pode inserir várias sobreposições num único vídeo de saída.
Crie uma sobreposição estática
No objeto image
, use o campo uri
para especificar a imagem de sobreposição no Cloud Storage. No objeto resolution
, defina os valores x e y de 0 a 1,0. Um valor de 0 mantém a resolução da imagem de origem para essa dimensão; um valor de 1,0 estica a imagem para corresponder à dimensão do vídeo de saída. Por exemplo, use os valores x: 1
e y:
0.5
para esticar a imagem de sobreposição na largura total e metade da altura do vídeo de saída.
Na matriz animations
, crie um objeto animationStatic
com coordenadas x e y de 0 a 1,0. Estas coordenadas baseiam-se na resolução do vídeo de saída. Use os valores x: 0
e y: 0
para posicionar o canto superior esquerdo da sobreposição no canto superior esquerdo do vídeo de saída. Especifique quando a sobreposição deve aparecer na cronologia do vídeo de saída através do campo startTimeOffset
.
Para remover a animação estática, crie um animationEnd
objeto. Especifique quando a animação deve terminar (ou seja, a sobreposição deve desaparecer) na cronologia do vídeo de saída através do campo startTimeOffset
.
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 do 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_INPUT_OVERLAY
: O nome da imagem no contentor do Cloud Storage que está a usar para a sobreposição, comomy-overlay.png
. Este campo deve ter em conta todas as pastas que criou no contentor (por exemplo,input/my-overlay.png
).STORAGE_OUTPUT_FOLDER
: o nome da pasta 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
- Crie um ficheiro
request.json
que defina os campos da tarefa. Faça as seguintes substituições para o comandogcloud
:- STORAGE_BUCKET_NAME: o nome do contentor do Cloud Storage que criou.
- STORAGE_INPUT_VIDEO: O nome do vídeo no contentor do Cloud Storage que está a transcodificar, como
my-vid.mp4
. Este campo deve ter em conta todas as pastas que criou no contentor (por exemplo,input/my-vid.mp4
). - STORAGE_INPUT_OVERLAY: o nome do ficheiro de imagem no contentor do Cloud Storage que está a usar para a sobreposição, como
my-overlay.png
. Este campo deve ter em conta todas as pastas que criou no contentor (por exemplo,input/my-overlay.png
). - LOCATION: a localização onde
a sua tarefa vai ser executada. Use uma localização da lista seguinte.
Mostrar localizações
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_OUTPUT_FOLDER: O nome da pasta do Cloud Storage onde quer guardar os resultados de vídeo codificados.
{ "config": { "inputs": [ { "key": "input0", "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_INPUT_VIDEO" } ], "elementaryStreams": [ { "key": "video-stream0", "videoStream": { "h264": { "heightPixels": 360, "widthPixels": 640, "bitrateBps": 550000, "frameRate": 60 } } }, { "key": "audio-stream0", "audioStream": { "codec": "aac", "bitrateBps": 64000 } } ], "muxStreams": [ { "key": "sd", "container": "mp4", "elementaryStreams": [ "video-stream0", "audio-stream0" ] } ], "output": { "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_OUTPUT_FOLDER/" }, "overlays": [ { "image": { "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_INPUT_OVERLAY", "resolution": { "x": 1, "y": 0.5 }, "alpha": 1 }, "animations": [ { "animationStatic": { "xy": { "x": 0, "y": 0 }, "startTimeOffset": "0s" } }, { "animationEnd": { "startTimeOffset": "10s" } } ] } ] } }
- Execute o seguinte comando:
Deve ver uma resposta semelhante à seguinte:gcloud transcoder jobs create --location=LOCATION --file="request.json"
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID", "config": { ... }, "state": "PENDING", "createTime": CREATE_TIME, "ttlAfterCompletionDays": 30 }
C#
Antes de experimentar este exemplo, siga as C#instruçõ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 TranscoderC#.
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.
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.
PHP
Antes de experimentar este exemplo, siga as PHPinstruçõ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 TranscoderPHP.
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.
Ruby
Antes de experimentar este exemplo, siga as Rubyinstruçõ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 TranscoderRuby.
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.
No vídeo de saída, a sobreposição estática tem as seguintes características:
- Aparece no início da cronologia e é visível durante 10 segundos.
- Estica a largura total e metade da altura do vídeo de saída.
- Está posicionado no canto superior esquerdo do vídeo de saída.
Veja o vídeo de saída de exemplo para esta configuração. Este vídeo usa uma imagem de sobreposição de amostra.
Crie uma sobreposição animada
No objeto image
, use o campo uri
para especificar a imagem de sobreposição no Cloud Storage. No objeto resolution
, defina os valores x e y de 0 a 1,0. Um valor de 0 mantém a resolução da imagem de origem para essa dimensão; um valor de 1,0 estica a imagem para corresponder à dimensão do vídeo de saída. Por exemplo, use os valores x: 0
e y: 0
para manter a resolução original da imagem de sobreposição.
Na matriz animations
, crie um objeto animationFade
com um fadeType
de
FADE_IN
. Defina as coordenadas x e y de 0 a 1,0. Estas coordenadas baseiam-se na resolução do vídeo de saída. Use os valores x: 0.5
e y: 0.5
para
posicionar o canto superior esquerdo da sobreposição no centro do vídeo de saída.
Especifique quando a sobreposição deve começar a aparecer na cronologia do vídeo de saída
usando o campo startTimeOffset
. A sobreposição deve estar totalmente visível no momento definido no campo endTimeOffset
.
Para esbater a sobreposição, crie outro objeto animationFade
. Desta vez, defina o fadeType
como FADE_OUT
. Introduza as coordenadas da posição e as horas de início e fim, como antes.
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 do 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_INPUT_OVERLAY
: O nome da imagem no contentor do Cloud Storage que está a usar para a sobreposição, comomy-overlay.png
. Este campo deve ter em conta todas as pastas que criou no contentor (por exemplo,input/my-overlay.png
).STORAGE_OUTPUT_FOLDER
: o nome da pasta 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
- Crie um ficheiro
request.json
que defina os campos da tarefa. Faça as seguintes substituições para o comandogcloud
:- STORAGE_BUCKET_NAME: o nome do contentor do Cloud Storage que criou.
- STORAGE_INPUT_VIDEO: O nome do vídeo no contentor do Cloud Storage que está a transcodificar, como
my-vid.mp4
. Este campo deve ter em conta todas as pastas que criou no contentor (por exemplo,input/my-vid.mp4
). - STORAGE_INPUT_OVERLAY: o nome do ficheiro de imagem no contentor do Cloud Storage que está a usar para a sobreposição, como
my-overlay.png
. Este campo deve ter em conta todas as pastas que criou no contentor (por exemplo,input/my-overlay.png
). - LOCATION: a localização onde
a sua tarefa vai ser executada. Use uma localização da lista seguinte.
Mostrar localizações
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_OUTPUT_FOLDER: O nome da pasta do Cloud Storage onde quer guardar os resultados de vídeo codificados.
{ "config": { "inputs": [ { "key": "input0", "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_INPUT_VIDEO" } ], "elementaryStreams": [ { "key": "video-stream0", "videoStream": { "h264": { "heightPixels": 360, "widthPixels": 640, "bitrateBps": 550000, "frameRate": 60 } } }, { "key": "audio-stream0", "audioStream": { "codec": "aac", "bitrateBps": 64000 } } ], "muxStreams": [ { "key": "sd", "container": "mp4", "elementaryStreams": [ "video-stream0", "audio-stream0" ] } ], "output": { "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_OUTPUT_FOLDER/" }, "overlays": [ { "image": { "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_INPUT_OVERLAY", "resolution": { "x": 0, "y": 0 }, "alpha": 1 }, "animations": [ { "animationFade": { "fadeType": "FADE_IN", "xy": { "x": 0.5, "y": 0.5 }, "startTimeOffset": "5s", "endTimeOffset": "10s" } }, { "animationFade": { "fadeType": "FADE_OUT", "xy": { "x": 0.5, "y": 0.5 }, "startTimeOffset": "12s", "endTimeOffset": "15s" } } ] } ] } }
- Execute o seguinte comando:
Deve ver uma resposta semelhante à seguinte:gcloud transcoder jobs create --location=LOCATION --file="request.json"
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID", "config": { ... }, "state": "PENDING", "createTime": CREATE_TIME, "ttlAfterCompletionDays": 30 }
C#
Antes de experimentar este exemplo, siga as C#instruçõ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 TranscoderC#.
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.
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.
PHP
Antes de experimentar este exemplo, siga as PHPinstruçõ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 TranscoderPHP.
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.
Ruby
Antes de experimentar este exemplo, siga as Rubyinstruçõ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 TranscoderRuby.
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.
No vídeo resultante, a sobreposição animada tem as seguintes características:
- Começa a aparecer gradualmente na marca dos 5 segundos no vídeo de saída. O valor alfa da sobreposição começa em 0 e termina em 1,0. O canto superior esquerdo da sobreposição aparece no centro do vídeo de saída. A sobreposição é apresentada na resolução original da imagem de sobreposição.
- Depois de aparecer gradualmente, a sobreposição é apresentada durante 2 segundos.
- Começa a esbater-se na marca dos 12 segundos no vídeo de saída. O valor alfa da sobreposição começa em 1,0 e termina em 0.
- A animação desaparece até à marca dos 15 segundos.
Veja o vídeo de saída de exemplo para esta configuração. Este vídeo usa uma imagem de sobreposição de amostra.