Transcode a video with the Transcoder API

This page shows you how to create a basic video transcoding job using the default settings of the Transcoder API and curl, Windows PowerShell, or the client libraries.

You can also perform this quickstart directly in the Google Cloud console using either of the following programming languages:

Before you begin

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get 300ドル in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.

  3. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  4. To initialize the gcloud CLI, run the following command:

    gcloudinit
  5. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Transcoder API:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloudservicesenabletranscoder.googleapis.com
  8. Create local authentication credentials for your user account:

    gcloudauthapplication-defaultlogin

    If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

  9. Grant roles to your user account. Run the following command once for each of the following IAM roles: roles/transcoder.admin, roles/storage.admin

    gcloudprojectsadd-iam-policy-bindingPROJECT_ID--member="user:USER_IDENTIFIER"--role=ROLE

    Replace the following:

    • PROJECT_ID: Your project ID.
    • USER_IDENTIFIER: The identifier for your user account. For example, myemail@example.com.
    • ROLE: The IAM role that you grant to your user account.
  10. Install the Google Cloud CLI.

  11. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  12. To initialize the gcloud CLI, run the following command:

    gcloudinit
  13. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  14. Verify that billing is enabled for your Google Cloud project.

  15. Enable the Transcoder API:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloudservicesenabletranscoder.googleapis.com
  16. Create local authentication credentials for your user account:

    gcloudauthapplication-defaultlogin

    If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

  17. Grant roles to your user account. Run the following command once for each of the following IAM roles: roles/transcoder.admin, roles/storage.admin

    gcloudprojectsadd-iam-policy-bindingPROJECT_ID--member="user:USER_IDENTIFIER"--role=ROLE

    Replace the following:

    • PROJECT_ID: Your project ID.
    • USER_IDENTIFIER: The identifier for your user account. For example, myemail@example.com.
    • ROLE: The IAM role that you grant to your user account.

Create a Cloud Storage bucket

  1. Create a Cloud Storage bucket and configure it as follows:
    • Set the storage class to S (Standard).
    • Set the storage location to the following: US (United States).
    • Replace BUCKET_NAME with a unique bucket name. Don't include sensitive information in the bucket name because the bucket namespace is global and publicly visible.
    gcloudstoragebucketscreategs://BUCKET_NAME--default-storage-class STANDARD --locationUS
  2. Click Create Folder and enter a name to create a folder in which to save the encoded video outputs.

Transcode a video using the Transcoder API

You need a video at least 5 seconds in duration from your local machine for the following steps (sample video). See the list of supported input and output formats.

Upload a video to your Cloud Storage bucket

  1. In the Google Cloud console, go to the Cloud Storage Browser page.
    Go to the Cloud Storage Browser page
  2. Click the name of your bucket to open it.
  3. Click Upload files.
  4. Select a video file to upload from your local machine.

Your video is now saved to the Cloud Storage bucket.

Create a transcoding job

By default, the Transcoder API transcodes video using H.264 encoding and MP4, HLS, and MPEG-DASH packaging. For each input video, it delivers output renditions in high definition (1280x720 pixels) and standard definition (640x360 pixels).

To create a job, use the projects.locations.jobs.create method. The following code samples create a basic transcoding job using a preset.

REST

Before using any of the request data, make the following replacements:

  • PROJECT_ID: Your Google Cloud project ID listed in the IAM Settings.
  • LOCATION: The location where your job will run. Use one of the supported regions.
    Show locations
    • 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: The name of the Cloud Storage bucket you created.
  • STORAGE_INPUT_VIDEO: The name of the video in your Cloud Storage bucket that you are transcoding, such as my-vid.mp4. This field should take into account any folders that you created in the bucket (for example, input/my-vid.mp4).
  • STORAGE_OUTPUT_FOLDER: The Cloud Storage folder name where you want to save the encoded video outputs.

To send your request, expand one of these options:

curl (Linux, macOS, or Cloud Shell)

Save the request body in a file named request.json. Run the following command in the terminal to create or overwrite this file in the current directory:

cat> request.json << 'EOF' { "inputUri": "gs://STORAGE_BUCKET_NAME/STORAGE_INPUT_VIDEO",
 "outputUri": "gs://STORAGE_BUCKET_NAME/STORAGE_OUTPUT_FOLDER/",
 "templateId": "preset/web-hd"
}
EOF

Then execute the following command to send your REST request:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://transcoder.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?fields=name"

PowerShell (Windows)

Save the request body in a file named request.json. Run the following command in the terminal to create or overwrite this file in the current directory:

@'
{
 "inputUri": "gs://STORAGE_BUCKET_NAME/STORAGE_INPUT_VIDEO",
 "outputUri": "gs://STORAGE_BUCKET_NAME/STORAGE_OUTPUT_FOLDER/",
 "templateId": "preset/web-hd"
}
'@ | Out-File -FilePath request.json -Encoding utf8

Then execute the following command to send your REST request:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://transcoder.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?fields=name" | Select-Object -Expand Content

This particular REST example uses the optional fields query parameter to only show the created resource name in the response.

{
 "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID"
}

gcloud

  1. Make the following replacements for the gcloud command:
    • STORAGE_BUCKET_NAME: The name of the Cloud Storage bucket you created.
    • STORAGE_INPUT_VIDEO: The name of the video in your Cloud Storage bucket that you are transcoding, such as my-vid.mp4. This field should take into account any folders that you created in the bucket (for example, input/my-vid.mp4).
    • LOCATION: The location where your job will run. Use one of the supported regions.
      Show locations
      • 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: The Cloud Storage folder name where you want to save the encoded video outputs.
  2. Run the following command:
    gcloudtranscoderjobscreate\
    --input-uri="gs://STORAGE_BUCKET_NAME/STORAGE_INPUT_VIDEO"\
    --location=LOCATION\
    --output-uri="gs://STORAGE_BUCKET_NAME/STORAGE_OUTPUT_FOLDER/"
    You should see a response similar to the following:
    {
     "config": {
     ...
     },
     "createTime": CREATE_TIME,
     "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID",
     "state": "PENDING",
     "ttlAfterCompletionDays": 30
    }
    

C#

Before trying this sample, follow the C# setup instructions in the Transcoder API quickstart using client libraries. For more information, see the Transcoder API C# API reference documentation.

To authenticate to Transcoder API, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.


usingGoogle.Api.Gax.ResourceNames ;
usingGoogle.Cloud.Video.Transcoder.V1 ;
publicclassCreateJobFromPresetSample
{
publicJobCreateJobFromPreset(
stringprojectId,stringlocation,stringinputUri,stringoutputUri,stringpreset)
{
// Create the client.
TranscoderServiceClient client=TranscoderServiceClient .Create ();
// Build the parent location name.
LocationName parent=newLocationName (projectId,location);
// Build the job.
Job newJob=newJob
{
InputUri=inputUri,
OutputUri=outputUri,
TemplateId=preset
};
// Call the API.
Job job=client.CreateJob (parent,newJob);
// Return the result.
returnjob;
}
}

Go

Before trying this sample, follow the Go setup instructions in the Transcoder API quickstart using client libraries. For more information, see the Transcoder API Go API reference documentation.

To authenticate to Transcoder API, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.

import(
"context"
"fmt"
"io"
transcoder"cloud.google.com/go/video/transcoder/apiv1"
"cloud.google.com/go/video/transcoder/apiv1/transcoderpb"
)
// createJobFromPreset creates a job based on a given preset template. See
// https://cloud.google.com/transcoder/docs/how-to/jobs#create_jobs_presets
// for more information.
funccreateJobFromPreset(wio.Writer,projectIDstring,locationstring,inputURIstring,outputURIstring)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)
iferr!=nil{
returnfmt.Errorf("NewClient: %w",err)
}
deferclient.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,
},
},
}
// 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)
iferr!=nil{
returnfmt.Errorf("createJobFromPreset: %w",err)
}
fmt.Fprintf(w,"Job: %v",response.GetName())
returnnil
}

Java

Before trying this sample, follow the Java setup instructions in the Transcoder API quickstart using client libraries. For more information, see the Transcoder API Java API reference documentation.

To authenticate to Transcoder API, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.


importcom.google.cloud.video.transcoder.v1.CreateJobRequest ;
importcom.google.cloud.video.transcoder.v1.Job ;
importcom.google.cloud.video.transcoder.v1.LocationName ;
importcom.google.cloud.video.transcoder.v1.TranscoderServiceClient ;
importjava.io.IOException;
publicclass CreateJobFromPreset{
publicstaticvoidmain(String[]args)throwsException{
// TODO(developer): Replace these variables before running the sample.
StringprojectId="my-project-id";
Stringlocation="us-central1";
StringinputUri="gs://my-bucket/my-video-file";
StringoutputUri="gs://my-bucket/my-output-folder/";
// See https://cloud.google.com/transcoder/docs/concepts/overview#job_template
// for information on this preset.
Stringpreset="preset/web-hd";
createJobFromPreset(projectId,location,inputUri,outputUri,preset);
}
// Creates a job from a preset.
publicstaticvoidcreateJobFromPreset(
StringprojectId,Stringlocation,StringinputUri,StringoutputUri,Stringpreset)
throwsIOException{
// 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)
.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

Before trying this sample, follow the Node.js setup instructions in the Transcoder API quickstart using client libraries. For more information, see the Transcoder API Node.js API reference documentation.

To authenticate to Transcoder API, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.

/**
 * 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
consttranscoderServiceClient=newTranscoderServiceClient ();
asyncfunctioncreateJobFromPreset(){
// Construct request
constrequest={
parent:transcoderServiceClient.locationPath (projectId,location),
job:{
inputUri:inputUri,
outputUri:outputUri,
templateId:preset,
},
};
// Run request
const[response]=awaittranscoderServiceClient.createJob(request);
console.log(`Job: ${response.name}`);
}
createJobFromPreset();

PHP

Before trying this sample, follow the PHP setup instructions in the Transcoder API quickstart using client libraries. For more information, see the Transcoder API PHP API reference documentation.

To authenticate to Transcoder API, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.

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 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($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);
 $request = (new CreateJobRequest())
 ->setParent($formattedParent)
 ->setJob($job);
 $response = $transcoderServiceClient->createJob($request);
 // Print job name.
 printf('Job: %s' . PHP_EOL, $response->getName());
}

Python

Before trying this sample, follow the Python setup instructions in the Transcoder API quickstart using client libraries. For more information, see the Transcoder API Python API reference documentation.

To authenticate to Transcoder API, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.


importargparse
fromgoogle.cloud.videoimport transcoder_v1
fromgoogle.cloud.video.transcoder_v1.services.transcoder_serviceimport (
 TranscoderServiceClient,
)
defcreate_job_from_preset(
 project_id: str,
 location: str,
 input_uri: str,
 output_uri: str,
 preset: str,
) -> transcoder_v1.types.resources.Job:
"""Creates a job 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
 response = client.create_job(parent=parent, job=job)
 print(f"Job: {response.name}")
 return response

Ruby

Before trying this sample, follow the Ruby setup instructions in the Transcoder API quickstart using client libraries. For more information, see the Transcoder API Ruby API reference documentation.

To authenticate to Transcoder API, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.

# 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_pathproject:project_id,location:location
# Set the job fields.
new_job={
input_uri:input_uri,
output_uri:output_uri,
template_id:preset
}
job=client.create_jobparent:parent,job:new_job
# Print the job name.
puts"Job: #{job.name}"

Copy the returned JOB_ID. You need it to get the status of the job.

Check the status of your transcoding job

To check the status of a job, use the projects.locations.jobs.get method. The following code samples get the job details and then show the job state.

REST

Before using any of the request data, make the following replacements:

  • JOB_ID: The ID of the job you created.
  • PROJECT_ID: Your Google Cloud project ID.
  • LOCATION: The location of your job. Use one of the supported regions.
    Show locations
    • 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
  • To send your request, expand one of these options:

    curl (Linux, macOS, or Cloud Shell)

    Execute the following command:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://transcoder.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs/JOB_ID"

    PowerShell (Windows)

    Execute the following command:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://transcoder.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs/JOB_ID" | Select-Object -Expand Content

    You should receive a JSON response similar to the following:

    {
     "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

    1. Make the following replacements for the gcloud command:
      • JOB_ID: The ID of the job you created.
      • LOCATION: The location of your job. Use one of the supported regions.
        Show locations
        • 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
    2. Run the following command:
      gcloudtranscoderjobsdescribeJOB_ID--location=LOCATION
      You should see a response similar to the following:
      {
       "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#

    Before trying this sample, follow the C# setup instructions in the Transcoder API quickstart using client libraries. For more information, see the Transcoder API C# API reference documentation.

    To authenticate to Transcoder API, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.

    
    usingGoogle.Cloud.Video.Transcoder.V1 ;
    publicclassGetJobStateSample
    {
    publicJob.Types.ProcessingStateGetJobState(stringprojectId,stringlocation,stringjobId)
    {
    // Create the client.
    TranscoderServiceClient client=TranscoderServiceClient .Create ();
    // Build the job name.
    JobName jobName=JobName .FromProjectLocationJob (projectId,location,jobId);
    // Call the API.
    Job job=client.GetJob (jobName);
    // Return the result.
    returnjob.State ;
    }
    }

    Go

    Before trying this sample, follow the Go setup instructions in the Transcoder API quickstart using client libraries. For more information, see the Transcoder API Go API reference documentation.

    To authenticate to Transcoder API, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.

    import(
    "context"
    "fmt"
    "io"
    transcoder"cloud.google.com/go/video/transcoder/apiv1"
    "cloud.google.com/go/video/transcoder/apiv1/transcoderpb"
    )
    // getJobState gets the state for a previously-created job. See
    // https://cloud.google.com/transcoder/docs/how-to/jobs#check_job_status for
    // more information.
    funcgetJobState(wio.Writer,projectIDstring,locationstring,jobIDstring)error{
    // projectID := "my-project-id"
    // location := "us-central1"
    // jobID := "my-job-id"
    ctx:=context.Background()
    client,err:=transcoder.NewClient (ctx)
    iferr!=nil{
    returnfmt.Errorf("NewClient: %w",err)
    }
    deferclient.Close ()
    req:=&transcoderpb.GetJobRequest{
    Name:fmt.Sprintf("projects/%s/locations/%s/jobs/%s",projectID,location,jobID),
    }
    response,err:=client.GetJob(ctx,req)
    iferr!=nil{
    returnfmt.Errorf("GetJob: %w",err)
    }
    fmt.Fprintf(w,"Job state: %v\n----\nJob failure reason:%v\n",response.State,response.Error)
    returnnil
    }
    

    Java

    Before trying this sample, follow the Java setup instructions in the Transcoder API quickstart using client libraries. For more information, see the Transcoder API Java API reference documentation.

    To authenticate to Transcoder API, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.

    
    importcom.google.cloud.video.transcoder.v1.GetJobRequest ;
    importcom.google.cloud.video.transcoder.v1.Job ;
    importcom.google.cloud.video.transcoder.v1.JobName ;
    importcom.google.cloud.video.transcoder.v1.TranscoderServiceClient ;
    importjava.io.IOException;
    publicclass GetJobState{
    publicstaticvoidmain(String[]args)throwsException{
    // TODO(developer): Replace these variables before running the sample.
    StringprojectId="my-project-id";
    Stringlocation="us-central1";
    StringjobId="my-job-id";
    getJobState(projectId,location,jobId);
    }
    // Gets the state of a job.
    publicstaticvoidgetJobState(StringprojectId,Stringlocation,StringjobId)
    throwsIOException{
    // 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()){
    JobName jobName=
    JobName .newBuilder().setProject(projectId).setLocation(location).setJob(jobId).build();
    GetJobRequest getJobRequest=GetJobRequest .newBuilder().setName(jobName.toString ()).build();
    // Send the get job request and process the response.
    Job job=transcoderServiceClient.getJob(getJobRequest);
    System.out.println("Job state: "+job.getState ());
    }
    }
    }

    Node.js

    Before trying this sample, follow the Node.js setup instructions in the Transcoder API quickstart using client libraries. For more information, see the Transcoder API Node.js API reference documentation.

    To authenticate to Transcoder API, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.

    /**
     * TODO(developer): Uncomment these variables before running the sample.
     */
    // projectId = 'my-project-id';
    // location = 'us-central1';
    // jobId = 'my-job-id';
    // Imports the Transcoder library
    const{TranscoderServiceClient}=
    require('@google-cloud/video-transcoder').v1;
    // Instantiates a client
    consttranscoderServiceClient=newTranscoderServiceClient ();
    asyncfunctiongetJob(){
    // Construct request
    constrequest={
    name:transcoderServiceClient.jobPath (projectId,location,jobId),
    };
    const[response]=awaittranscoderServiceClient.getJob(request);
    console.log(`Job state: ${response.state}`);
    }
    getJob();

    PHP

    Before trying this sample, follow the PHP setup instructions in the Transcoder API quickstart using client libraries. For more information, see the Transcoder API PHP API reference documentation.

    To authenticate to Transcoder API, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.

    use Google\Cloud\Video\Transcoder\V1\Client\TranscoderServiceClient;
    use Google\Cloud\Video\Transcoder\V1\GetJobRequest;
    use Google\Cloud\Video\Transcoder\V1\Job;
    /**
     * Gets a Transcoder job's state.
     *
     * @param string $projectId The ID of your Google Cloud Platform project.
     * @param string $location The location of the job.
     * @param string $jobId The job ID.
     */
    function get_job_state($projectId, $location, $jobId)
    {
     // Instantiate a client.
     $transcoderServiceClient = new TranscoderServiceClient();
     $formattedName = $transcoderServiceClient->jobName($projectId, $location, $jobId);
     $request = (new GetJobRequest())
     ->setName($formattedName);
     $job = $transcoderServiceClient->getJob($request);
     // Print job state.
     printf('Job state: %s' . PHP_EOL, Job\ProcessingState::name($job->getState()));
    }

    Python

    Before trying this sample, follow the Python setup instructions in the Transcoder API quickstart using client libraries. For more information, see the Transcoder API Python API reference documentation.

    To authenticate to Transcoder API, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.

    
    importargparse
    fromgoogle.cloud.videoimport transcoder_v1
    fromgoogle.cloud.video.transcoder_v1.services.transcoder_serviceimport (
     TranscoderServiceClient,
    )
    defget_job_state(
     project_id: str,
     location: str,
     job_id: str,
    ) -> transcoder_v1.types.resources.Job:
    """Gets a job's state.
     Args:
     project_id: The GCP project ID.
     location: The location this job is in.
     job_id: The job ID.
     Returns:
     The job resource.
     """
     client = TranscoderServiceClient()
     name = f"projects/{project_id}/locations/{location}/jobs/{job_id}"
     response = client.get_job(name=name)
     print(f"Job state: {str(response.state.name)}")
     return response
    

    Ruby

    Before trying this sample, follow the Ruby setup instructions in the Transcoder API quickstart using client libraries. For more information, see the Transcoder API Ruby API reference documentation.

    To authenticate to Transcoder API, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.

    # project_id = "YOUR-GOOGLE-CLOUD-PROJECT" # (e.g. "my-project")
    # location = "YOUR-JOB-LOCATION" # (e.g. "us-central1")
    # job_id = "YOUR-JOB-ID" # (e.g. "c82c295b-3f5a-47df-8562-938a89d40fd0")
    # 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 job.
    name=client.job_pathproject:project_id,location:location,job:job_id
    # Get the job.
    job=client.get_jobname:name
    # Print the job state.
    puts"Job state: #{job.state}"

    If the state is SUCCEEDED, the job is complete and your video outputs are now available in your Cloud Storage bucket's list of encoded files.

    Play your video

    To play the generated media file in Shaka Player, complete the following steps:

    1. Make the Cloud Storage bucket you created publicly readable.
    2. To enable cross-origin resource sharing (CORS) on a Cloud Storage bucket, do the following:
      1. Create a JSON file that contains the following:
        [
         {
         "origin": ["https://shaka-player-demo.appspot.com/"],
         "responseHeader": ["Content-Type", "Range"],
         "method": ["GET", "HEAD"],
         "maxAgeSeconds": 3600
         }
        ]
      2. Run the following command after replacing JSON_FILE_NAME with the name of the JSON file you created in the previous step:
        gcloud storage buckets update gs://STORAGE_BUCKET_NAME --cors-file=JSON_FILE_NAME.json
    3. Pick one of the MP4 or manifest files generated by the transcoding job in the Cloud Storage bucket. Click Copy URL in the file's Public access column.
    4. Navigate to Shaka Player, an online live stream player.
    5. Click Custom Content in the top navigation bar.
    6. Click the + button.
    7. Paste the public URL of the file into the Manifest URL box.

      Enter the URL of the file in Shaka Player.

    8. Type a name in the Name box.

    9. Click Save.

    10. Click Play.

    Clean up

    To avoid incurring charges to your Google Cloud account for the resources used on this page, delete the Google Cloud project with the resources.

    Delete the bucket

    1. In the Google Cloud console, go to the Cloud Storage Browser page.

      Go to the Cloud Storage Browser page

    2. Select the checkbox next to the bucket that you created.

    3. Click Delete.

    4. In the pop-up window that appears, click Delete to permanently delete the bucket and its contents.

    Delete the job

    REST

    Before using any of the request data, make the following replacements:

  • JOB_ID: The ID of the job you created.
  • PROJECT_ID: Your Google Cloud project ID.
  • LOCATION: The location of your job. Use one of the supported regions.
    Show locations
    • 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
  • To send your request, expand one of these options:

    curl (Linux, macOS, or Cloud Shell)

    Execute the following command:

    curl -X DELETE \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://transcoder.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs/JOB_ID"

    PowerShell (Windows)

    Execute the following command:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method DELETE `
    -Headers $headers `
    -Uri "https://transcoder.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs/JOB_ID" | Select-Object -Expand Content

    You should receive a JSON response similar to the following:

    {}
    

    gcloud

    1. Make the following replacements for the gcloud command:
      • JOB_ID: The ID of the job you created.
      • LOCATION: The location of your job. Use one of the supported regions.
        Show locations
        • 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
    2. Run the following command:
      gcloudtranscoderjobsdeleteJOB_ID--location=LOCATION
      You should see a response similar to the following:
      Deleted job [projects/PROJECT_ID/locations/LOCATION/jobs/JOB_ID].
      

    C#

    Before trying this sample, follow the C# setup instructions in the Transcoder API quickstart using client libraries. For more information, see the Transcoder API C# API reference documentation.

    To authenticate to Transcoder API, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.

    
    usingGoogle.Cloud.Video.Transcoder.V1 ;
    publicclassDeleteJobSample
    {
    publicvoidDeleteJob(stringprojectId,stringlocation,stringjobId)
    {
    // Create the client.
    TranscoderServiceClient client=TranscoderServiceClient .Create ();
    // Build the job name.
    JobName jobName=JobName .FromProjectLocationJob (projectId,location,jobId);
    // Call the API.
    client.DeleteJob (jobName);
    }
    }

    Go

    Before trying this sample, follow the Go setup instructions in the Transcoder API quickstart using client libraries. For more information, see the Transcoder API Go API reference documentation.

    To authenticate to Transcoder API, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.

    import(
    "context"
    "fmt"
    "io"
    transcoder"cloud.google.com/go/video/transcoder/apiv1"
    "cloud.google.com/go/video/transcoder/apiv1/transcoderpb"
    )
    // deleteJob deletes a previously-created job. See
    // https://cloud.google.com/transcoder/docs/how-to/jobs#delete_jobs for more
    // information.
    funcdeleteJob(wio.Writer,projectIDstring,locationstring,jobIDstring)error{
    // projectID := "my-project-id"
    // location := "us-central1"
    // jobID := "my-job-id"
    ctx:=context.Background()
    client,err:=transcoder.NewClient (ctx)
    iferr!=nil{
    returnfmt.Errorf("NewClient: %w",err)
    }
    deferclient.Close ()
    req:=&transcoderpb.DeleteJobRequest{
    Name:fmt.Sprintf("projects/%s/locations/%s/jobs/%s",projectID,location,jobID),
    }
    err=client.DeleteJob(ctx,req)
    iferr!=nil{
    returnfmt.Errorf("DeleteJob: %w",err)
    }
    fmt.Fprintf(w,"Deleted job")
    returnnil
    }
    

    Java

    Before trying this sample, follow the Java setup instructions in the Transcoder API quickstart using client libraries. For more information, see the Transcoder API Java API reference documentation.

    To authenticate to Transcoder API, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.

    
    importcom.google.cloud.video.transcoder.v1.DeleteJobRequest ;
    importcom.google.cloud.video.transcoder.v1.JobName ;
    importcom.google.cloud.video.transcoder.v1.TranscoderServiceClient ;
    importjava.io.IOException;
    publicclass DeleteJob{
    publicstaticvoidmain(String[]args)throwsException{
    // TODO(developer): Replace these variables before running the sample.
    StringprojectId="my-project-id";
    Stringlocation="us-central1";
    StringjobId="my-job-id";
    deleteJob(projectId,location,jobId);
    }
    // Deletes a job.
    publicstaticvoiddeleteJob(StringprojectId,Stringlocation,StringjobId)throwsIOException{
    // 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()){
    JobName jobName=
    JobName .newBuilder().setProject(projectId).setLocation(location).setJob(jobId).build();
    DeleteJobRequest deleteJobRequest=DeleteJobRequest .newBuilder().setName(jobName.toString ())
    .build();
    // Send the delete job request and process the response.
    transcoderServiceClient.deleteJob(deleteJobRequest);
    System.out.println("Deleted job");
    }
    }
    }

    Node.js

    Before trying this sample, follow the Node.js setup instructions in the Transcoder API quickstart using client libraries. For more information, see the Transcoder API Node.js API reference documentation.

    To authenticate to Transcoder API, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.

    /**
     * TODO(developer): Uncomment these variables before running the sample.
     */
    // projectId = 'my-project-id';
    // location = 'us-central1';
    // jobId = 'my-job-id';
    // Imports the Transcoder library
    const{TranscoderServiceClient}=
    require('@google-cloud/video-transcoder').v1;
    // Instantiates a client
    consttranscoderServiceClient=newTranscoderServiceClient ();
    asyncfunctiondeleteJob(){
    // Construct request
    constrequest={
    name:transcoderServiceClient.jobPath (projectId,location,jobId),
    };
    awaittranscoderServiceClient.deleteJob(request);
    console.log('Deleted job');
    }
    deleteJob();

    PHP

    Before trying this sample, follow the PHP setup instructions in the Transcoder API quickstart using client libraries. For more information, see the Transcoder API PHP API reference documentation.

    To authenticate to Transcoder API, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.

    use Google\Cloud\Video\Transcoder\V1\Client\TranscoderServiceClient;
    use Google\Cloud\Video\Transcoder\V1\DeleteJobRequest;
    /**
     * Deletes a Transcoder job.
     *
     * @param string $projectId The ID of your Google Cloud Platform project.
     * @param string $location The location of the job.
     * @param string $jobId The job ID.
     */
    function delete_job($projectId, $location, $jobId)
    {
     // Instantiate a client.
     $transcoderServiceClient = new TranscoderServiceClient();
     $formattedName = $transcoderServiceClient->jobName($projectId, $location, $jobId);
     $request = (new DeleteJobRequest())
     ->setName($formattedName);
     $transcoderServiceClient->deleteJob($request);
     print('Deleted job' . PHP_EOL);
    }

    Python

    Before trying this sample, follow the Python setup instructions in the Transcoder API quickstart using client libraries. For more information, see the Transcoder API Python API reference documentation.

    To authenticate to Transcoder API, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.

    
    importargparse
    fromgoogle.cloud.video.transcoder_v1.services.transcoder_serviceimport (
     TranscoderServiceClient,
    )
    defdelete_job(
     project_id: str,
     location: str,
     job_id: str,
    ) -> None:
    """Gets a job.
     Args:
     project_id: The GCP project ID.
     location: The location this job is in.
     job_id: The job ID."""
     client = TranscoderServiceClient()
     name = f"projects/{project_id}/locations/{location}/jobs/{job_id}"
     response = client.delete_job(name=name)
     print("Deleted job")
     return response
    

    Ruby

    Before trying this sample, follow the Ruby setup instructions in the Transcoder API quickstart using client libraries. For more information, see the Transcoder API Ruby API reference documentation.

    To authenticate to Transcoder API, set up Application Default Credentials. For more information, see Set up authentication for a local development environment.

    # project_id = "YOUR-GOOGLE-CLOUD-PROJECT" # (e.g. "my-project")
    # location = "YOUR-JOB-LOCATION" # (e.g. "us-central1")
    # job_id = "YOUR-JOB-ID" # (e.g. "c82c295b-3f5a-47df-8562-938a89d40fd0")
    # 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 job.
    name=client.job_pathproject:project_id,location:location,job:job_id
    # Delete the job.
    client.delete_jobname:name
    # Print a success message.
    puts"Deleted job"

    Revoke your credentials

    1. Optional: Revoke the authentication credentials that you created, and delete the local credential file.

      gcloudauthapplication-defaultrevoke
    2. Optional: Revoke credentials from the gcloud CLI.

      gcloudauthrevoke

    What's next

    Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

    Last updated 2025年12月09日 UTC.