Como criar jobs no modo em lote

Esta página mostra como criar jobs da API Transcoder no modo em lote. Use o modo de lote para enviar muitos jobs em que a latência de processamento não é tão crítica quanto os jobs enviados no modo interativo padrão. Para mais informações sobre os modos de job, consulte a visão geral.

É possível especificar a prioridade de processamento de jobs para um job nesse modo. Os jobs enviados em lote com o mesmo valor de prioridade são colocados em uma fila de primeiro a entrar, primeiro a sair e têm um estado de job de PENDING enquanto aguardam a execução.

Configurar o projeto e a autenticação Google Cloud

Se você não criou um projetoGoogle Cloud e credenciais, consulte Antes de começar.

Definir o modo de job

Para iniciar um job no modo em lote, defina o job mode como PROCESSING_MODE_BATCH.

Os exemplos a seguir usam a predefinição de job padrão.

REST

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID do projeto Google Cloud listado nas Configurações do IAM.
  • LOCATION: o local onde seu job será executado. Use uma das regiões com suporte.
    Mostrar locais
    • 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_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, como my-vid.mp4. Este campo precisa considerar todas as pastas que você criou no bucket (por exemplo, input/my-vid.mp4).
  • STORAGE_OUTPUT_FOLDER: nome da pasta 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": {     "inputs": [       {         "key": "input0",         "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_INPUT_VIDEO"       }     ],     "editList": [       {         "key": "atom0",         "inputs": [           "input0"         ],         "startTimeOffset": "0s"       }     ],     "elementaryStreams": [       {         "videoStream": {           "h264": {             "widthPixels": 640,             "heightPixels": 360,             "frameRate": 30,             "bitrateBps": 550000,             "pixelFormat": "yuv420p",             "rateControlMode": "vbr",             "crfLevel": 21,             "gopDuration": "3s",             "vbvSizeBits": 550000,             "vbvFullnessBits": 495000,             "entropyCoder": "cabac",             "bFrameCount": 3,             "aqStrength": 1,             "profile": "high",             "preset": "veryfast"           }         },         "key": "video-stream0"       },       {         "videoStream": {           "h264": {             "widthPixels": 1280,             "heightPixels": 720,             "frameRate": 30,             "bitrateBps": 2500000,             "pixelFormat": "yuv420p",             "rateControlMode": "vbr",             "crfLevel": 21,             "gopDuration": "3s",             "vbvSizeBits": 2500000,             "vbvFullnessBits": 2250000,             "entropyCoder": "cabac",             "bFrameCount": 3,             "aqStrength": 1,             "profile": "high",             "preset": "veryfast"           }         },         "key": "video-stream1"       },       {         "audioStream": {           "codec": "aac",           "bitrateBps": 64000,           "channelCount": 2,           "channelLayout": [             "fl",             "fr"           ],           "sampleRateHertz": 48000         },         "key": "audio-stream0"       }     ],     "muxStreams": [       {         "key": "sd",         "fileName": "sd.mp4",         "container": "mp4",         "elementaryStreams": [           "video-stream0",           "audio-stream0"         ]       },       {         "key": "hd",         "fileName": "hd.mp4",         "container": "mp4",         "elementaryStreams": [           "video-stream1",           "audio-stream0"         ]       },       {         "key": "media-sd",         "fileName": "media-sd.ts",         "container": "ts",         "elementaryStreams": [           "video-stream0",           "audio-stream0"         ]       },       {         "key": "media-hd",         "fileName": "media-hd.ts",         "container": "ts",         "elementaryStreams": [           "video-stream1",           "audio-stream0"         ]       },       {         "key": "video-only-sd",         "fileName": "video-only-sd.m4s",         "container": "fmp4",         "elementaryStreams": [           "video-stream0"         ]       },       {         "key": "video-only-hd",         "fileName": "video-only-hd.m4s",         "container": "fmp4",         "elementaryStreams": [           "video-stream1"         ]       },       {         "key": "audio-only",         "fileName": "audio-only.m4s",         "container": "fmp4",         "elementaryStreams": [           "audio-stream0"         ]       }     ],     "manifests": [       {         "fileName": "manifest.m3u8",         "type": "HLS",         "muxStreams": [           "media-sd",           "media-hd"         ]       },       {         "fileName": "manifest.mpd",         "type": "DASH",         "muxStreams": [           "video-only-sd",           "video-only-hd",           "audio-only"         ]       }     ],     "output": {       "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_OUTPUT_FOLDER/"     }   },   "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. Use uma das regiões com suporte.
    Mostrar locais
    • 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_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, como my-vid.mp4. Este campo precisa considerar todas as pastas que você criou no bucket (por exemplo, input/my-vid.mp4).
  • STORAGE_OUTPUT_FOLDER: nome da pasta do Cloud Storage em que você quer salvar as saídas de vídeo codificadas.

Execute o seguinte comando:

Linux, macOS ou Cloud Shell

gcloud transcoder jobs create \   --input-uri="gs://STORAGE_BUCKET_NAME/STORAGE_INPUT_VIDEO" \   --location=LOCATION \   --output-uri="gs://STORAGE_BUCKET_NAME/STORAGE_OUTPUT_FOLDER/" \   --template-id="preset/web-hd" \   --batch-mode-priority=10

Windows (PowerShell)

gcloud transcoder jobs create `   --input-uri="gs://STORAGE_BUCKET_NAME/STORAGE_INPUT_VIDEO" `   --location=LOCATION `   --output-uri="gs://STORAGE_BUCKET_NAME/STORAGE_OUTPUT_FOLDER/" `   --template-id="preset/web-hd" `   --batch-mode-priority=10

Windows (cmd.exe)

gcloud transcoder jobs create ^   --input-uri="gs://STORAGE_BUCKET_NAME/STORAGE_INPUT_VIDEO" ^   --location=LOCATION ^   --output-uri="gs://STORAGE_BUCKET_NAME/STORAGE_OUTPUT_FOLDER/" ^   --template-id="preset/web-hd" ^   --batch-mode-priority=10

Você receberá uma resposta semelhante a esta:

Resposta

 {   "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID",   "config": {     "inputs": [       {         "key": "input0",         "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_INPUT_VIDEO"       }     ],     "editList": [       {         "key": "atom0",         "inputs": [           "input0"         ],         "startTimeOffset": "0s"       }     ],     "elementaryStreams": [       {         "videoStream": {           "h264": {             "widthPixels": 640,             "heightPixels": 360,             "frameRate": 30,             "bitrateBps": 550000,             "pixelFormat": "yuv420p",             "rateControlMode": "vbr",             "crfLevel": 21,             "gopDuration": "3s",             "vbvSizeBits": 550000,             "vbvFullnessBits": 495000,             "entropyCoder": "cabac",             "bFrameCount": 3,             "aqStrength": 1,             "profile": "high",             "preset": "veryfast"           }         },         "key": "video-stream0"       },       {         "videoStream": {           "h264": {             "widthPixels": 1280,             "heightPixels": 720,             "frameRate": 30,             "bitrateBps": 2500000,             "pixelFormat": "yuv420p",             "rateControlMode": "vbr",             "crfLevel": 21,             "gopDuration": "3s",             "vbvSizeBits": 2500000,             "vbvFullnessBits": 2250000,             "entropyCoder": "cabac",             "bFrameCount": 3,             "aqStrength": 1,             "profile": "high",             "preset": "veryfast"           }         },         "key": "video-stream1"       },       {         "audioStream": {           "codec": "aac",           "bitrateBps": 64000,           "channelCount": 2,           "channelLayout": [             "fl",             "fr"           ],           "sampleRateHertz": 48000         },         "key": "audio-stream0"       }     ],     "muxStreams": [       {         "key": "sd",         "fileName": "sd.mp4",         "container": "mp4",         "elementaryStreams": [           "video-stream0",           "audio-stream0"         ]       },       {         "key": "hd",         "fileName": "hd.mp4",         "container": "mp4",         "elementaryStreams": [           "video-stream1",           "audio-stream0"         ]       },       {         "key": "media-sd",         "fileName": "media-sd.ts",         "container": "ts",         "elementaryStreams": [           "video-stream0",           "audio-stream0"         ]       },       {         "key": "media-hd",         "fileName": "media-hd.ts",         "container": "ts",         "elementaryStreams": [           "video-stream1",           "audio-stream0"         ]       },       {         "key": "video-only-sd",         "fileName": "video-only-sd.m4s",         "container": "fmp4",         "elementaryStreams": [           "video-stream0"         ]       },       {         "key": "video-only-hd",         "fileName": "video-only-hd.m4s",         "container": "fmp4",         "elementaryStreams": [           "video-stream1"         ]       },       {         "key": "audio-only",         "fileName": "audio-only.m4s",         "container": "fmp4",         "elementaryStreams": [           "audio-stream0"         ]       }     ],     "manifests": [       {         "fileName": "manifest.m3u8",         "type": "HLS",         "muxStreams": [           "media-sd",           "media-hd"         ]       },       {         "fileName": "manifest.mpd",         "type": "DASH",         "muxStreams": [           "video-only-sd",           "video-only-hd",           "audio-only"         ]       }     ],     "output": {       "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_OUTPUT_FOLDER/"     }   },   "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 C#.

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.

 using Google.Api.Gax.ResourceNames; using Google.Cloud.Video.Transcoder.V1;  public class CreateJobFromPresetBatchModeSample {     public Job CreateJobFromPresetBatchMode(         string projectId, string location, string inputUri, string outputUri, string preset)     {         // Create the client.         TranscoderServiceClient client = TranscoderServiceClient.Create();          // Build the parent location name.         LocationName parent = new LocationName(projectId, location);          // Build the job.         Job newJob = new Job         {             InputUri = inputUri,             OutputUri = outputUri,             TemplateId = preset,             Mode = Job.Types.ProcessingMode.Batch,             BatchModePriority = 10         };          // Call the API.         Job job = client.CreateJob(parent, newJob);          // Return the result.         return job;     } } 

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.

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.

import ( 	"context" 	"fmt" 	"io"  	transcoder "cloud.google.com/go/video/transcoder/apiv1" 	"cloud.google.com/go/video/transcoder/apiv1/transcoderpb" )  // createJobFromPresetBatchMode creates a batch mode job based on a given preset // template. See // https://cloud.google.com/transcoder/docs/how-to/create-batch-jobs // for more information. func createJobFromPresetBatchMode(w io.Writer, projectID string, location string, inputURI string, outputURI string) error { 	// projectID := "my-project-id" 	// location := "us-central1" 	// inputURI := "gs://my-bucket/my-video-file" 	// outputURI := "gs://my-bucket/my-output-folder/" 	preset := "preset/web-hd" 	ctx := context.Background() 	client, err := transcoder.NewClient(ctx) 	if err != nil { 		return fmt.Errorf("NewClient: %w", err) 	} 	defer client.Close()  	req := &transcoderpb.CreateJobRequest{ 		Parent: fmt.Sprintf("projects/%s/locations/%s", projectID, location), 		Job: &transcoderpb.Job{ 			InputUri:  inputURI, 			OutputUri: outputURI, 			JobConfig: &transcoderpb.Job_TemplateId{ 				TemplateId: preset, 			}, 			Mode:              transcoderpb.Job_PROCESSING_MODE_BATCH, 			BatchModePriority: 10, 		}, 	} 	// Creates the job, Jobs take a variable amount of time to run. 	// You can query for the job state. 	response, err := client.CreateJob(ctx, req) 	if err != nil { 		return fmt.Errorf("createJobFromPresetBatchMode: %w", err) 	}  	fmt.Fprintf(w, "Job: %v", response.GetName()) 	return nil } 

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 Java.

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.

 import com.google.cloud.video.transcoder.v1.CreateJobRequest; import com.google.cloud.video.transcoder.v1.Job; import com.google.cloud.video.transcoder.v1.Job.ProcessingMode; import com.google.cloud.video.transcoder.v1.LocationName; import com.google.cloud.video.transcoder.v1.TranscoderServiceClient; import java.io.IOException;  public class CreateJobFromPresetBatchMode {    public static void main(String[] args) throws Exception {     // TODO(developer): Replace these variables before running the sample.     String projectId = "my-project-id";     String location = "us-central1";     String inputUri = "gs://my-bucket/my-video-file";     String outputUri = "gs://my-bucket/my-output-folder/";     // See https://cloud.google.com/transcoder/docs/concepts/overview#job_template     // for information on this preset.     String preset = "preset/web-hd";      createJobFromPresetBatchMode(projectId, location, inputUri, outputUri, preset);   }    // Creates a job from a preset in batch mode.   public static void createJobFromPresetBatchMode(       String projectId, String location, String inputUri, String outputUri, String preset)       throws IOException {     // Initialize client that will be used to send requests. This client only needs to be created     // once, and can be reused for multiple requests.     try (TranscoderServiceClient transcoderServiceClient = TranscoderServiceClient.create()) {        CreateJobRequest createJobRequest =           CreateJobRequest.newBuilder()               .setJob(                   Job.newBuilder()                       .setInputUri(inputUri)                       .setOutputUri(outputUri)                       .setTemplateId(preset)                       .setMode(ProcessingMode.PROCESSING_MODE_BATCH)                       .setBatchModePriority(10)                       .build())               .setParent(LocationName.of(projectId, location).toString())               .build();        // Send the job creation request and process the response.       Job job = transcoderServiceClient.createJob(createJobRequest);       System.out.println("Job: " + job.getName());     }   } }

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.

/**  * TODO(developer): Uncomment these variables before running the sample.  */ // projectId = 'my-project-id'; // location = 'us-central1'; // inputUri = 'gs://my-bucket/my-video-file'; // outputUri = 'gs://my-bucket/my-output-folder/'; // preset = 'preset/web-hd';  // Imports the Transcoder library const {TranscoderServiceClient} =   require('@google-cloud/video-transcoder').v1;  // Instantiates a client const transcoderServiceClient = new TranscoderServiceClient();  async function createJobFromPresetBatchMode() {   // Construct request   const request = {     parent: transcoderServiceClient.locationPath(projectId, location),     job: {       inputUri: inputUri,       outputUri: outputUri,       templateId: preset,       mode: 'PROCESSING_MODE_BATCH',       batchModePriority: 10,     },   };    // Run request   const [response] = await transcoderServiceClient.createJob(request);   console.log(`Job: ${response.name}`); }  createJobFromPresetBatchMode();

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 PHP.

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.

use Google\Cloud\Video\Transcoder\V1\Client\TranscoderServiceClient; use Google\Cloud\Video\Transcoder\V1\CreateJobRequest; use Google\Cloud\Video\Transcoder\V1\Job;  /**  * Creates a job in batch mode based on a job preset.  *  * @param string $projectId The ID of your Google Cloud Platform project.  * @param string $location The location of the job.  * @param string $inputUri Uri of the video in the Cloud Storage bucket.  * @param string $outputUri Uri of the video output folder in the Cloud Storage bucket.  * @param string $preset The preset template (for example, "preset/web-hd").  */ function create_job_from_preset_batch_mode($projectId, $location, $inputUri, $outputUri, $preset) {     // Instantiate a client.     $transcoderServiceClient = new TranscoderServiceClient();      $formattedParent = $transcoderServiceClient->locationName($projectId, $location);     $job = new Job();     $job->setInputUri($inputUri);     $job->setOutputUri($outputUri);     $job->setTemplateId($preset);     $job->setMode(Job\ProcessingMode::PROCESSING_MODE_BATCH);     $job->setBatchModePriority(10);     $request = (new CreateJobRequest())         ->setParent($formattedParent)         ->setJob($job);      $response = $transcoderServiceClient->createJob($request);      // Print job name.     printf('Job: %s' . PHP_EOL, $response->getName()); }

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.

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.

 import argparse  from google.cloud.video import transcoder_v1 from google.cloud.video.transcoder_v1.services.transcoder_service import (     TranscoderServiceClient, )   def create_job_from_preset_batch_mode(     project_id: str,     location: str,     input_uri: str,     output_uri: str,     preset: str, ) -> transcoder_v1.types.resources.Job:     """Creates a job in batch mode based on a job preset.      Args:         project_id: The GCP project ID.         location: The location to start the job in.         input_uri: Uri of the video in the Cloud Storage bucket.         output_uri: Uri of the video output folder in the Cloud Storage bucket.         preset: The preset template (for example, 'preset/web-hd').      Returns:         The job resource.     """      client = TranscoderServiceClient()      parent = f"projects/{project_id}/locations/{location}"     job = transcoder_v1.types.Job()     job.input_uri = input_uri     job.output_uri = output_uri     job.template_id = preset     job.mode = transcoder_v1.types.Job.ProcessingMode.PROCESSING_MODE_BATCH     job.batch_mode_priority = 10      response = client.create_job(parent=parent, job=job)     print(f"Job: {response.name}")     return response  

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 Ruby.

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.

# project_id  = "YOUR-GOOGLE-CLOUD-PROJECT"  # (e.g. "my-project") # location    = "YOUR-JOB-LOCATION"  # (e.g. "us-central1") # input_uri   = "YOUR-GCS-INPUT-VIDEO"  # (e.g. "gs://my-bucket/my-video-file") # output_uri  = "YOUR-GCS-OUTPUT-FOLDER/"  # (e.g. "gs://my-bucket/my-output-folder/") # preset      = "YOUR-JOB-PRESET"  # (e.g. "preset/web-hd")  # Require the Transcoder client library. require "google/cloud/video/transcoder"  # Create a Transcoder client. client = Google::Cloud::Video::Transcoder.transcoder_service  # Build the resource name of the parent. parent = client.location_path project: project_id, location: location  # Set the job fields. new_job = {   input_uri: input_uri,   output_uri: output_uri,   template_id: preset,   mode: Google::Cloud::Video::Transcoder::V1::Job::ProcessingMode::PROCESSING_MODE_BATCH,   batch_mode_priority: 10 }  job = client.create_job parent: parent, job: new_job  # Print the job name. puts "Job: #{job.name}"