Nesta página, explicamos como inserir sobreposições em vídeos transcodificados. Uma sobreposição
consiste em uma imagem JPEG que é inserida na parte superior do vídeo de saída e pode
ser esmaecida ou desativada durante um período de tempo especificado. Para inserir uma
sobreposição, use a matriz
overlays
no
modelo JobConfig
.
Fazer upload de uma imagem para o Cloud Storage
Para começar, faça o seguinte para fazer o upload de uma imagem de sobreposição para o bucket do Cloud Storage:
- No Console do Cloud, acesse a página Navegador do Cloud Storage.
Acesse a página "Navegador do Cloud Storage" - Clique no nome do bucket para abri-lo.
- Clique em Fazer o upload dos arquivos.
- Selecione um arquivo JPEG para fazer o upload da sua máquina local.
Criar uma sobreposição
Você pode criar dois tipos de sobreposição: estática ou animada. Os dois tipos de sobreposição usam uma imagem estática. É possível mostrar ou ocultar sobreposições estáticas. As sobreposições animadas são compatíveis com a esmaecimento e esmaecem animações da imagem.
É possível inserir várias sobreposições em um único vídeo de saída.
Criar 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. O valor 0 mantém a resolução da imagem de origem
para a dimensão; Um valor de 1.0 expandirá 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 como largura total e metade da altura do
vídeo de saída.
Na matriz animations
, crie um objeto animationStatic
com as coordenadas x e y
de 0 a 1,0. Essas coordenadas são baseadas 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 linha do tempo de saída do vídeo usando o campo startTimeOffset
.
Para remover a animação estática, crie um objeto animationEnd
. Especifique quando
a animação deve terminar (ou seja, a sobreposição desaparece) na linha do tempo
da saída do vídeo usando o campo startTimeOffset
.
É possível adicionar essa configuração a um modelo de job ou incluí-la em uma configuração de job ad-hoc:
REST e LINHA DE CMD
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 IAM
- LOCATION: o local onde seu job será executado. Use
uma das regiões compatíveis:
us-central1
us-west1
us-west2
us-east1
us-east4
southamerica-east1
asia-east1
asia-south1
asia-southeast1
europe-west1
europe-west2
europe-west4
- GCS_BUCKET_NAME: o nome do bucket do Cloud Storage criado.
- GCS_INPUT_VIDEO: o nome do vídeo no
bucket do Cloud Storage que você está transcodificando, como
my-vid.mp4
. Este campo precisa considerar todas as pastas criadas no bucket (por exemplo,input/my-vid.mp4
). - GCS_INPUT_OVERLAY: o nome da imagem
JPEG no bucket do Cloud Storage que você está usando para a sobreposição, como
my-overlay.jpg
. Este campo precisa considerar todas as pastas criadas no bucket (por exemplo,input/my-overlay.jpg
). - GCS_OUTPUT_FOLDER: nome da pasta do Cloud Storage em que você quer salvar as saídas de vídeo codificadas.
Corpo JSON da solicitação:
{ "config": { "inputs": [ { "key": "input0", "uri": "gs://GCS_BUCKET_NAME/GCS_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://GCS_BUCKET_NAME/GCS_OUTPUT_FOLDER/" }, "overlays": [ { "image": { "uri": "gs://GCS_BUCKET_NAME/GCS_INPUT_OVERLAY", "resolution": { "x": 1, "y": 0.5 }, "alpha": 1 }, "animations": [ { "animationStatic": { "xy": { "x": 0, "y": 0 }, "startTimeOffset": "0s" } }, { "animationEnd": { "startTimeOffset": "10s" } } ] } ] } }
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 }
C#
Antes de testar esta amostra, siga as instruções de configuração do C# 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 para C#.
Go
Antes de testar esta amostra, siga as instruções de configuração do Go 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 Go
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 documentação de referência da API Transcoder para Java.
Node.js
Antes de tentar esse exemplo, 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
PHP
Antes de testar esta amostra, siga as instruções de configuração do PHP 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 para PHP.
Python
Antes de testar esta amostra, siga as instruções de configuração do Python 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 Python
Ruby
Antes de testar esta amostra, siga as instruções de configuração do Ruby 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 para Ruby.
No vídeo de saída, a sobreposição estática tem as seguintes características:
- Ela aparece no início da linha do tempo e fica visível por 10 segundos.
- Prolonga toda a largura e metade da altura do vídeo de saída.
- Ele é posicionado no canto superior esquerdo do vídeo de saída.
Veja o vídeo de saída de amostra desta configuração. Este vídeo usa uma imagem de sobreposição de amostra.
Criar 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. O valor 0 mantém a resolução da imagem de origem
para a dimensão; Um valor de 1.0 expandirá 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. Essas coordenadas são
baseadas 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 linha do tempo de saída do vídeo
usando o campo startTimeOffset
. A sobreposição precisa estar totalmente visível pelo
tempo definido no campo endTimeOffset
.
Para esmaecer a sobreposição, crie outro objeto animationFade
. Desta vez, defina
fadeType
como FADE_OUT
. Insira as coordenadas de posição e os horários de início
e término como antes.
É possível adicionar essa configuração a um modelo de job ou incluí-la em uma configuração de job ad-hoc:
REST e LINHA DE CMD
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 IAM
- LOCATION: o local onde seu job será executado. Use
uma das regiões compatíveis:
us-central1
us-west1
us-west2
us-east1
us-east4
southamerica-east1
asia-east1
asia-south1
asia-southeast1
europe-west1
europe-west2
europe-west4
- GCS_BUCKET_NAME: o nome do bucket do Cloud Storage criado.
- GCS_INPUT_VIDEO: o nome do vídeo no
bucket do Cloud Storage que você está transcodificando, como
my-vid.mp4
. Este campo precisa considerar todas as pastas criadas no bucket (por exemplo,input/my-vid.mp4
). - GCS_INPUT_OVERLAY: o nome da imagem
JPEG no bucket do Cloud Storage que você está usando para a sobreposição, como
my-overlay.jpg
. Este campo precisa considerar todas as pastas criadas no bucket (por exemplo,input/my-overlay.jpg
). - GCS_OUTPUT_FOLDER: nome da pasta do Cloud Storage em que você quer salvar as saídas de vídeo codificadas.
Corpo JSON da solicitação:
{ "config": { "inputs": [ { "key": "input0", "uri": "gs://GCS_BUCKET_NAME/GCS_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://GCS_BUCKET_NAME/GCS_OUTPUT_FOLDER/" }, "overlays": [ { "image": { "uri": "gs://GCS_BUCKET_NAME/GCS_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" } } ] } ] } }
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 }
C#
Antes de testar esta amostra, siga as instruções de configuração do C# 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 para C#.
Go
Antes de testar esta amostra, siga as instruções de configuração do Go 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 Go
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 documentação de referência da API Transcoder para Java.
Node.js
Antes de tentar esse exemplo, 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
PHP
Antes de testar esta amostra, siga as instruções de configuração do PHP 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 para PHP.
Python
Antes de testar esta amostra, siga as instruções de configuração do Python 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 Python
Ruby
Antes de testar esta amostra, siga as instruções de configuração do Ruby 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 para Ruby.
No vídeo resultante, a sobreposição animada tem as seguintes características:
- Ela começa a desaparecer na marca de cinco 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 aparece na resolução original da imagem de sobreposição.
- Depois que ela desaparece, a sobreposição é exibida por dois segundos.
- Ela começa a desaparecer na marca de 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 pela marca de 15 segundos.
Veja o vídeo de saída de amostra dessa configuração. Este vídeo usa uma imagem de sobreposição de amostra.