Esta página explica como gerar uma folha de sprites que contém frames de um vídeo transcodificado. Estes frames de tamanho reduzido, também conhecidos como miniaturas, são úteis para organizar e pré-visualizar conteúdo. Para gerar a folha de sprites, use a matriz spriteSheets
no modelo JobConfig
.
Tem duas opções para gerar a folha de sprites:
- Gerar um número definido de imagens de miniaturas distribuídas uniformemente na cronologia do vídeo de entrada.
- Gerar uma imagem de miniatura periodicamente, ou seja, a cada n segundos, na cronologia do vídeo de entrada.
Gere um número definido de imagens em miniatura
A configuração seguinte gera uma folha de sprites de 10 x 10 de imagens grandes e uma folha de sprites de 10 x 10 de imagens pequenas, cada uma com 100 miniaturas. Tenha em atenção que as folhas de sprites requerem, pelo menos, um VideoStream
na configuração da tarefa.
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_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
). - 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/" }, "spriteSheets": [ { "filePrefix": "small-sprite-sheet", "spriteHeightPixels": 32, "spriteWidthPixels": 64, "columnCount": 10, "rowCount": 10, "totalCount": 100 }, { "filePrefix": "large-sprite-sheet", "spriteHeightPixels": 72, "spriteWidthPixels": 128, "columnCount": 10, "rowCount": 10, "totalCount": 100 } ] } }
- 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.
Use esta configuração no vídeo de exemplo para gerar as seguintes folhas de sprites:
Figura 1. Imagem de spritesheet pequena (100 miniaturas)
Figura 2. Imagem de spritesheet grande (100 miniaturas)
Gerar uma imagem em miniatura periodicamente
A configuração seguinte gera uma folha de sprites de imagens pequenas e uma folha de sprites de imagens grandes. Cada folha de sprites contém miniaturas geradas a cada 7 segundos a partir do vídeo de entrada. Tenha em atenção que as folhas de sprites requerem, pelo menos, um VideoStream
na configuração da tarefa.
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_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
). - 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/" }, "spriteSheets": [ { "filePrefix": "small-sprite-sheet", "spriteHeightPixels": 32, "spriteWidthPixels": 64, "interval": "7s" }, { "filePrefix": "large-sprite-sheet", "spriteHeightPixels": 72, "spriteWidthPixels": 128, "interval": "7s" } ] } }
- 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.
Use esta configuração no vídeo de exemplo para gerar as seguintes folhas de sprites:
Figura 3. Spritesheet de imagens pequenas (1 miniatura a cada 7 segundos)
Figura 4. Spritesheet de imagens grandes (1 miniatura a cada 7 segundos)
São geradas oito miniaturas a partir do vídeo de exemplo, que tem uma duração de 60 segundos.