Creating and managing job templates

This page shows you how to create and manage Transcoder API job templates.

By default, the Transcoder API applies a preset template called preset/web-hd to populate a job configuration. You can specify your own custom job templates when creating transcoding jobs. A job configuration represents many of the settings you can customize when creating a job.

Set up your GCP project and authentication

Creating job templates

You can specify a wide variety of settings in a job template. For an introduction to some of the terminology and concepts of job configurations, see the Transcoder API overview.

To create a job template, use the projects.locations.jobTemplates.create method. The following example uses a simple configuration to create standard definition and high definition .mp4 output files. For more information on a job configuration, see the JobConfig reference.

REST & CMD LINE

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

  • PROJECT_ID: Your Google Cloud project ID listed in the IAM Settings.
  • LOCATION: The location where your job template will be stored. Use a location from the following list:
    • us-central1
    • us-west1
    • us-east1
    • southamerica-east1
    • asia-east1
    • europe-west1
  • TEMPLATE_ID: A user-defined identifier for the new job template to create. This value should be 4-63 characters and valid characters are in the regular expression [a-zA-Z][a-zA-Z0-9_-]*.

Request JSON body:

{
  "config": {
    "elementaryStreams": [
      {
        "key": "video-stream0",
        "videoStream": {
          "codec": "h264",
          "heightPixels": 360,
          "widthPixels": 640,
          "bitrateBps": 550000,
          "frameRate": 60
        }
      },
      {
        "key": "video-stream1",
        "videoStream": {
          "codec": "h264",
          "heightPixels": 720,
          "widthPixels": 1280,
          "bitrateBps": 2500000,
          "frameRate": 60
        }
      },
      {
        "key": "audio-stream0",
        "audioStream": {
          "codec": "aac",
          "bitrateBps": 64000
        }
      }
    ],
    "muxStreams": [
      {
        "key": "sd",
        "container": "mp4",
        "elementaryStreams": [
          "video-stream0",
          "audio-stream0"
        ]
      },
      {
        "key": "hd",
        "container": "mp4",
        "elementaryStreams": [
          "video-stream1",
          "audio-stream0"
        ]
      }
    ]
  }
}

To send your request, expand one of these options:

You should receive a JSON response similar to the following:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobTemplates/TEMPLATE_ID",
  "config": {
    "inputs": [
      {
        "key": "input0"
      }
    ],
    "editList": [
      {
        "key": "atom0",
        "inputs": [
          "input0"
        ],
        "startTimeOffset": "0s"
      }
    ],
    "elementaryStreams": [
      {
        "videoStream": {
          "codec": "h264",
          "profile": "high",
          "preset": "veryfast",
          "heightPixels": 360,
          "widthPixels": 640,
          "pixelFormat": "yuv420p",
          "bitrateBps": 550000,
          "rateControlMode": "vbr",
          "crfLevel": 21,
          "vbvSizeBits": 550000,
          "vbvFullnessBits": 495000,
          "gopDuration": "3s",
          "entropyCoder": "cabac",
          "frameRate": 60
        },
        "key": "video-stream0"
      },
      {
        "videoStream": {
          "codec": "h264",
          "profile": "high",
          "preset": "veryfast",
          "heightPixels": 720,
          "widthPixels": 1280,
          "pixelFormat": "yuv420p",
          "bitrateBps": 2500000,
          "rateControlMode": "vbr",
          "crfLevel": 21,
          "vbvSizeBits": 2500000,
          "vbvFullnessBits": 2250000,
          "gopDuration": "3s",
          "entropyCoder": "cabac",
          "frameRate": 60
        },
        "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"
        ]
      }
    ],
    "output": {}
  }
}

gcloud

  1. Create a config.json file that defines the job template fields. The following is an example job template:
    {
      "config": {
        "elementaryStreams": [
          {
            "key": "video-stream0",
            "videoStream": {
              "codec": "h264",
              "heightPixels": 360,
              "widthPixels": 640,
              "bitrateBps": 550000,
              "frameRate": 60
            }
          },
          {
            "key": "video-stream1",
            "videoStream": {
              "codec": "h264",
              "heightPixels": 720,
              "widthPixels": 1280,
              "bitrateBps": 2500000,
              "frameRate": 60
            }
          },
          {
            "key": "audio-stream0",
            "audioStream": {
              "codec": "aac",
              "bitrateBps": 64000
            }
          }
        ],
        "muxStreams": [
          {
            "key": "sd",
            "container": "mp4",
            "elementaryStreams": [
              "video-stream0",
              "audio-stream0"
            ]
          },
          {
            "key": "hd",
            "container": "mp4",
            "elementaryStreams": [
              "video-stream1",
              "audio-stream0"
            ]
          }
        ]
      }
    }
    
  2. Make the following replacements for the gcloud command:
    • TEMPLATE_ID: A user-defined identifier for the new job template to create. This value should be 4-63 characters and valid characters are in the regular expression [a-zA-Z][a-zA-Z0-9_-]*.
    • LOCATION: The location where your job template will be stored. Use a location from the following list:
      • us-central1
      • us-west1
      • us-east1
      • southamerica-east1
      • asia-east1
      • europe-west1
  3. Run the following command:
    gcloud beta transcoder templates create TEMPLATE_ID --file="config.json" --location=LOCATION
    You should see a response similar to the following:
    {
      "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobTemplates/TEMPLATE_ID",
      "config": {
        "inputs": [
          {
            "key": "input0"
          }
        ],
        "editList": [
          {
            "key": "atom0",
            "inputs": [
              "input0"
            ],
            "startTimeOffset": "0s"
          }
        ],
        "elementaryStreams": [
          {
            "videoStream": {
              "codec": "h264",
              "profile": "high",
              "preset": "veryfast",
              "heightPixels": 360,
              "widthPixels": 640,
              "pixelFormat": "yuv420p",
              "bitrateBps": 550000,
              "rateControlMode": "vbr",
              "crfLevel": 21,
              "vbvSizeBits": 550000,
              "vbvFullnessBits": 495000,
              "gopDuration": "3s",
              "entropyCoder": "cabac",
              "frameRate": 60
            },
            "key": "video-stream0"
          },
          {
            "videoStream": {
              "codec": "h264",
              "profile": "high",
              "preset": "veryfast",
              "heightPixels": 720,
              "widthPixels": 1280,
              "pixelFormat": "yuv420p",
              "bitrateBps": 2500000,
              "rateControlMode": "vbr",
              "crfLevel": 21,
              "vbvSizeBits": 2500000,
              "vbvFullnessBits": 2250000,
              "gopDuration": "3s",
              "entropyCoder": "cabac",
              "frameRate": 60
            },
            "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"
            ]
          }
        ],
        "output": {}
      }
    }
    

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.

import (
	"context"
	"fmt"
	"io"

	transcoder "cloud.google.com/go/video/transcoder/apiv1beta1"
	transcoderpb "google.golang.org/genproto/googleapis/cloud/video/transcoder/v1beta1"
)

// createJobTemplate creates a template for a job. See
// https://cloud.google.com/transcoder/docs/how-to/job-templates#create_job_templates
// for more information.
func createJobTemplate(w io.Writer, projectID string, location string, templateID string) error {
	// projectID := "my-project-id"
	// location := "us-central1"
	// templateID := "my-job-template"
	ctx := context.Background()
	client, err := transcoder.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("NewClient: %v", err)
	}
	defer client.Close()

	req := &transcoderpb.CreateJobTemplateRequest{
		Parent:        fmt.Sprintf("projects/%s/locations/%s", projectID, location),
		JobTemplateId: templateID,
		JobTemplate: &transcoderpb.JobTemplate{
			Config: &transcoderpb.JobConfig{
				ElementaryStreams: []*transcoderpb.ElementaryStream{
					&transcoderpb.ElementaryStream{
						Key: "video_stream0",
						ElementaryStream: &transcoderpb.ElementaryStream_VideoStream{
							VideoStream: &transcoderpb.VideoStream{
								Codec:        "h264",
								BitrateBps:   550000,
								FrameRate:    60,
								HeightPixels: 360,
								WidthPixels:  640,
							},
						},
					},
					&transcoderpb.ElementaryStream{
						Key: "video_stream1",
						ElementaryStream: &transcoderpb.ElementaryStream_VideoStream{
							VideoStream: &transcoderpb.VideoStream{
								Codec:        "h264",
								BitrateBps:   2500000,
								FrameRate:    60,
								HeightPixels: 720,
								WidthPixels:  1280,
							},
						},
					},
					&transcoderpb.ElementaryStream{
						Key: "audio_stream0",
						ElementaryStream: &transcoderpb.ElementaryStream_AudioStream{
							AudioStream: &transcoderpb.AudioStream{
								Codec:      "aac",
								BitrateBps: 64000,
							},
						},
					},
				},
				MuxStreams: []*transcoderpb.MuxStream{
					&transcoderpb.MuxStream{
						Key:               "sd",
						Container:         "mp4",
						ElementaryStreams: []string{"video_stream0", "audio_stream0"},
					},
					&transcoderpb.MuxStream{
						Key:               "hd",
						Container:         "mp4",
						ElementaryStreams: []string{"video_stream1", "audio_stream0"},
					},
				},
			},
		},
	}

	response, err := client.CreateJobTemplate(ctx, req)
	if err != nil {
		return fmt.Errorf("CreateJobTemplate: %v", err)
	}

	fmt.Fprintf(w, "Job template: %v", response.GetName())
	return nil
}

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.


import com.google.cloud.video.transcoder.v1beta1.AudioStream;
import com.google.cloud.video.transcoder.v1beta1.CreateJobTemplateRequest;
import com.google.cloud.video.transcoder.v1beta1.ElementaryStream;
import com.google.cloud.video.transcoder.v1beta1.JobConfig;
import com.google.cloud.video.transcoder.v1beta1.JobTemplate;
import com.google.cloud.video.transcoder.v1beta1.LocationName;
import com.google.cloud.video.transcoder.v1beta1.MuxStream;
import com.google.cloud.video.transcoder.v1beta1.TranscoderServiceClient;
import com.google.cloud.video.transcoder.v1beta1.VideoStream;
import java.io.IOException;

public class CreateJobTemplate {

  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 templateId = "my-job-template";

    createJobTemplate(projectId, location, templateId);
  }

  // Creates a job template.
  public static void createJobTemplate(String projectId, String location, String templateId)
      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()) {

      VideoStream videoStream0 =
          VideoStream.newBuilder()
              .setCodec("h264")
              .setBitrateBps(550000)
              .setFrameRate(60)
              .setHeightPixels(360)
              .setWidthPixels(640)
              .build();
      VideoStream videoStream1 =
          VideoStream.newBuilder()
              .setCodec("h264")
              .setBitrateBps(2500000)
              .setFrameRate(60)
              .setHeightPixels(720)
              .setWidthPixels(1280)
              .build();
      AudioStream audioStream0 =
          AudioStream.newBuilder().setCodec("aac").setBitrateBps(64000).build();
      JobConfig config =
          JobConfig.newBuilder()
              .addElementaryStreams(
                  ElementaryStream.newBuilder()
                      .setKey("video_stream0")
                      .setVideoStream(videoStream0))
              .addElementaryStreams(
                  ElementaryStream.newBuilder()
                      .setKey("video_stream1")
                      .setVideoStream(videoStream1))
              .addElementaryStreams(
                  ElementaryStream.newBuilder()
                      .setKey("audio_stream0")
                      .setAudioStream(audioStream0))
              .addMuxStreams(
                  MuxStream.newBuilder()
                      .setKey("sd")
                      .setContainer("mp4")
                      .addElementaryStreams("video_stream0")
                      .addElementaryStreams("audio_stream0")
                      .build())
              .addMuxStreams(
                  MuxStream.newBuilder()
                      .setKey("hd")
                      .setContainer("mp4")
                      .addElementaryStreams("video_stream1")
                      .addElementaryStreams("audio_stream0")
                      .build())
              .build();

      var createJobTemplateRequest =
          CreateJobTemplateRequest.newBuilder()
              .setParent(LocationName.of(projectId, location).toString())
              .setJobTemplateId(templateId)
              .setJobTemplate(JobTemplate.newBuilder().setConfig(config).build())
              .build();

      // Send the job template creation request and process the response.
      JobTemplate jobTemplate = transcoderServiceClient.createJobTemplate(createJobTemplateRequest);
      System.out.println("Job template: " + jobTemplate.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.

/**
 * TODO(developer): Uncomment these variables before running the sample.
 */
// projectId = 'my-project-id';
// location = 'us-central1';
// templateId = 'my-job-template';

// Imports the Transcoder library
const {TranscoderServiceClient} = require('@google-cloud/video-transcoder');

// Instantiates a client
const transcoderServiceClient = new TranscoderServiceClient();

async function createJobTemplate() {
  // Construct request
  const request = {
    parent: transcoderServiceClient.locationPath(projectId, location),
    jobTemplateId: templateId,
    jobTemplate: {
      config: {
        elementaryStreams: [
          {
            key: 'video-stream0',
            videoStream: {
              codec: 'h264',
              heightPixels: 360,
              widthPixels: 640,
              bitrateBps: 550000,
              frameRate: 60,
            },
          },
          {
            key: 'video-stream1',
            videoStream: {
              codec: 'h264',
              heightPixels: 720,
              widthPixels: 1280,
              bitrateBps: 2500000,
              frameRate: 60,
            },
          },
          {
            key: 'audio-stream0',
            audioStream: {
              codec: 'aac',
              bitrateBps: 64000,
            },
          },
        ],
        muxStreams: [
          {
            key: 'sd',
            container: 'mp4',
            elementaryStreams: ['video-stream0', 'audio-stream0'],
          },
          {
            key: 'hd',
            container: 'mp4',
            elementaryStreams: ['video-stream1', 'audio-stream0'],
          },
        ],
      },
    },
  };

  // Run request
  const [jobTemplate] = await transcoderServiceClient.createJobTemplate(
    request
  );
  console.log(`Job template: ${jobTemplate.name}`);
}

createJobTemplate();

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.


import argparse

from google.cloud.video import transcoder_v1beta1
from google.cloud.video.transcoder_v1beta1.services.transcoder_service import (
    TranscoderServiceClient,
)


def create_job_template(project_id, location, template_id):
    """Creates a job template.

    Args:
        project_id: The GCP project ID.
        location: The location to store this template in.
        template_id: The user-defined template ID."""

    client = TranscoderServiceClient()

    parent = f"projects/{project_id}/locations/{location}"

    job_template = transcoder_v1beta1.types.JobTemplate()
    job_template.name = (
        f"projects/{project_id}/locations/{location}/jobTemplates/{template_id}"
    )
    job_template.config = transcoder_v1beta1.types.JobConfig(
        elementary_streams=[
            transcoder_v1beta1.types.ElementaryStream(
                key="video-stream0",
                video_stream=transcoder_v1beta1.types.VideoStream(
                    codec="h264",
                    height_pixels=360,
                    width_pixels=640,
                    bitrate_bps=550000,
                    frame_rate=60,
                ),
            ),
            transcoder_v1beta1.types.ElementaryStream(
                key="video-stream1",
                video_stream=transcoder_v1beta1.types.VideoStream(
                    codec="h264",
                    height_pixels=720,
                    width_pixels=1280,
                    bitrate_bps=2500000,
                    frame_rate=60,
                ),
            ),
            transcoder_v1beta1.types.ElementaryStream(
                key="audio-stream0",
                audio_stream=transcoder_v1beta1.types.AudioStream(
                    codec="aac", bitrate_bps=64000
                ),
            ),
        ],
        mux_streams=[
            transcoder_v1beta1.types.MuxStream(
                key="sd",
                container="mp4",
                elementary_streams=["video-stream0", "audio-stream0"],
            ),
            transcoder_v1beta1.types.MuxStream(
                key="hd",
                container="mp4",
                elementary_streams=["video-stream1", "audio-stream0"],
            ),
        ],
    )

    response = client.create_job_template(
        parent=parent, job_template=job_template, job_template_id=template_id
    )
    print(f"Job template: {response.name}")
    return response

Getting job template details

To get the details for a job template, use the projects.locations.jobTemplates.get method.

REST & CMD LINE

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

  • TEMPLATE_ID: The ID of the job template you created.
  • PROJECT_ID: Your Google Cloud project ID.
  • LOCATION: The location of your job template. Use a location from the following list:
    • us-central1
    • us-west1
    • us-east1
    • southamerica-east1
    • asia-east1
    • europe-west1
  • To send your request, expand one of these options:

    You should receive a JSON response similar to the following:

    {
      "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobTemplates/TEMPLATE_ID",
      "config": {
        "inputs": [
          {
            "key": "input0"
          }
        ],
        "editList": [
          {
            "key": "atom0",
            "inputs": [
              "input0"
            ],
            "startTimeOffset": "0s"
          }
        ],
        "elementaryStreams": [
          {
            "videoStream": {
              "codec": "h264",
              "profile": "high",
              "preset": "veryfast",
              "heightPixels": 360,
              "widthPixels": 640,
              "pixelFormat": "yuv420p",
              "bitrateBps": 550000,
              "rateControlMode": "vbr",
              "crfLevel": 21,
              "vbvSizeBits": 550000,
              "vbvFullnessBits": 495000,
              "gopDuration": "3s",
              "entropyCoder": "cabac",
              "frameRate": 60
            },
            "key": "video-stream0"
          },
          {
            "videoStream": {
              "codec": "h264",
              "profile": "high",
              "preset": "veryfast",
              "heightPixels": 720,
              "widthPixels": 1280,
              "pixelFormat": "yuv420p",
              "bitrateBps": 2500000,
              "rateControlMode": "vbr",
              "crfLevel": 21,
              "vbvSizeBits": 2500000,
              "vbvFullnessBits": 2250000,
              "gopDuration": "3s",
              "entropyCoder": "cabac",
              "frameRate": 60
            },
            "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"
            ]
          }
        ],
        "output": {}
      }
    }
    

    gcloud

    1. Make the following replacements for the gcloud command:
      • TEMPLATE_ID: The ID of the job template you created.
      • LOCATION: The location of your job template. Use a location from the following list:
        • us-central1
        • us-west1
        • us-east1
        • southamerica-east1
        • asia-east1
        • europe-west1
    2. Run the following command:
      gcloud beta transcoder templates describe TEMPLATE_ID --location=LOCATION
      You should see a response similar to the following:
      {
        "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobTemplates/TEMPLATE_ID",
        "config": {
          "inputs": [
            {
              "key": "input0"
            }
          ],
          "editList": [
            {
              "key": "atom0",
              "inputs": [
                "input0"
              ],
              "startTimeOffset": "0s"
            }
          ],
          "elementaryStreams": [
            {
              "videoStream": {
                "codec": "h264",
                "profile": "high",
                "preset": "veryfast",
                "heightPixels": 360,
                "widthPixels": 640,
                "pixelFormat": "yuv420p",
                "bitrateBps": 550000,
                "rateControlMode": "vbr",
                "crfLevel": 21,
                "vbvSizeBits": 550000,
                "vbvFullnessBits": 495000,
                "gopDuration": "3s",
                "entropyCoder": "cabac",
                "frameRate": 60
              },
              "key": "video-stream0"
            },
            {
              "videoStream": {
                "codec": "h264",
                "profile": "high",
                "preset": "veryfast",
                "heightPixels": 720,
                "widthPixels": 1280,
                "pixelFormat": "yuv420p",
                "bitrateBps": 2500000,
                "rateControlMode": "vbr",
                "crfLevel": 21,
                "vbvSizeBits": 2500000,
                "vbvFullnessBits": 2250000,
                "gopDuration": "3s",
                "entropyCoder": "cabac",
                "frameRate": 60
              },
              "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"
              ]
            }
          ],
          "output": {}
        }
      }
      

    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.

    import (
    	"context"
    	"fmt"
    	"io"
    
    	transcoder "cloud.google.com/go/video/transcoder/apiv1beta1"
    	transcoderpb "google.golang.org/genproto/googleapis/cloud/video/transcoder/v1beta1"
    )
    
    // getJobTemplate gets a previously-created job template. See
    // https://cloud.google.com/transcoder/docs/how-to/job-templates#get_job_template
    // for more information.
    func getJobTemplate(w io.Writer, projectID string, location string, templateID string) error {
    	// projectID := "my-project-id"
    	// location := "us-central1"
    	// templateID := "my-job-template"
    	ctx := context.Background()
    	client, err := transcoder.NewClient(ctx)
    	if err != nil {
    		return fmt.Errorf("NewClient: %v", err)
    	}
    	defer client.Close()
    
    	req := &transcoderpb.GetJobTemplateRequest{
    		Name: fmt.Sprintf("projects/%s/locations/%s/jobTemplates/%s", projectID, location, templateID),
    	}
    
    	response, err := client.GetJobTemplate(ctx, req)
    	if err != nil {
    		return fmt.Errorf("GetJobTemplate: %v", err)
    	}
    
    	fmt.Fprintf(w, "Job template: %v", response.GetName())
    	return nil
    }
    

    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.

    
    import com.google.cloud.video.transcoder.v1beta1.GetJobTemplateRequest;
    import com.google.cloud.video.transcoder.v1beta1.JobTemplate;
    import com.google.cloud.video.transcoder.v1beta1.JobTemplateName;
    import com.google.cloud.video.transcoder.v1beta1.TranscoderServiceClient;
    import java.io.IOException;
    
    public class GetJobTemplate {
    
      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 templateId = "my-job-template";
    
        getJobTemplate(projectId, location, templateId);
      }
    
      // Gets a job template.
      public static void getJobTemplate(String projectId, String location, String templateId)
          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()) {
          JobTemplateName jobTemplateName =
              JobTemplateName.newBuilder()
                  .setProject(projectId)
                  .setLocation(location)
                  .setJobTemplate(templateId)
                  .build();
          var getJobTemplateRequest =
              GetJobTemplateRequest.newBuilder().setName(jobTemplateName.toString()).build();
    
          // Send the get job template request and process the response.
          JobTemplate jobTemplate = transcoderServiceClient.getJobTemplate(getJobTemplateRequest);
          System.out.println("Job template: " + jobTemplate.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.

    /**
     * TODO(developer): Uncomment these variables before running the sample.
     */
    // projectId = 'my-project-id';
    // location = 'us-central1';
    // templateId = 'my-job-template';
    
    // Imports the Transcoder library
    const {TranscoderServiceClient} = require('@google-cloud/video-transcoder');
    
    // Instantiates a client
    const transcoderServiceClient = new TranscoderServiceClient();
    
    async function getJobTemplate() {
      // Construct request
      const request = {
        name: transcoderServiceClient.jobTemplatePath(
          projectId,
          location,
          templateId
        ),
      };
      const [jobTemplate] = await transcoderServiceClient.getJobTemplate(request);
      console.log(`Job template: ${jobTemplate.name}`);
    }
    
    getJobTemplate();

    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.

    
    import argparse
    
    from google.cloud.video.transcoder_v1beta1.services.transcoder_service import (
        TranscoderServiceClient,
    )
    
    
    def get_job_template(project_id, location, template_id):
        """Gets a job template.
    
        Args:
            project_id: The GCP project ID.
            location: The location of the template.
            template_id: The user-defined template ID."""
    
        client = TranscoderServiceClient()
    
        name = f"projects/{project_id}/locations/{location}/jobTemplates/{template_id}"
        response = client.get_job_template(name=name)
        print(f"Job template: {response.name}")
        return response
    
    

    Listing job templates

    If you want to review all the job templates you created in a location, use the projects.locations.jobTemplates.list method.

    REST & CMD LINE

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

  • PROJECT_ID: Your Google Cloud project ID.
  • LOCATION: The location of your job templates. Use a location from the following list:
    • us-central1
    • us-west1
    • us-east1
    • southamerica-east1
    • asia-east1
    • europe-west1
  • To send your request, expand one of these options:

    You should receive a JSON response similar to the following:

    {
      "jobTemplates": [
        {
          "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobTemplates/TEMPLATE_ID",
          "config": {
             ...
          }
        },
        {
          "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobTemplates/my-other-template",
          "config": {
             ...
          }
        }
      ]
    }
    

    gcloud

    1. Make the following replacements for the gcloud command:
      • LOCATION: The location of your job template(s). Use a location from the following list:
        • us-central1
        • us-west1
        • us-east1
        • southamerica-east1
        • asia-east1
        • europe-west1
    2. Run the following command:
      gcloud beta transcoder templates list --location=LOCATION
      You should see a response similar to the following:
      NAME
      projects/PROJECT_NUMBER/locations/LOCATION/jobTemplates/TEMPLATE_ID
      projects/PROJECT_NUMBER/locations/LOCATION/jobTemplates/my-other-template
      

    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.

    import (
    	"context"
    	"fmt"
    	"io"
    
    	"google.golang.org/api/iterator"
    
    	transcoder "cloud.google.com/go/video/transcoder/apiv1beta1"
    	transcoderpb "google.golang.org/genproto/googleapis/cloud/video/transcoder/v1beta1"
    )
    
    // listJobTemplates gets all previously-created job templates for a given
    // location. See
    // https://cloud.google.com/transcoder/docs/how-to/job-templates#list_job_template
    // for more information.
    func listJobTemplates(w io.Writer, projectID string, location string) error {
    	// projectID := "my-project-id"
    	// location := "us-central1"
    	ctx := context.Background()
    	client, err := transcoder.NewClient(ctx)
    	if err != nil {
    		return fmt.Errorf("NewClient: %v", err)
    	}
    	defer client.Close()
    
    	req := &transcoderpb.ListJobTemplatesRequest{
    		Parent: fmt.Sprintf("projects/%s/locations/%s", projectID, location),
    	}
    
    	it := client.ListJobTemplates(ctx, req)
    	fmt.Fprintln(w, "Job templates:")
    	for {
    		response, err := it.Next()
    		if err == iterator.Done {
    			break
    		}
    		if err != nil {
    			return fmt.Errorf("ListJobTemplates: %v", err)
    		}
    		fmt.Fprintln(w, response.GetName())
    	}
    
    	return nil
    }
    

    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.

    
    import com.google.cloud.video.transcoder.v1beta1.JobTemplate;
    import com.google.cloud.video.transcoder.v1beta1.ListJobTemplatesRequest;
    import com.google.cloud.video.transcoder.v1beta1.LocationName;
    import com.google.cloud.video.transcoder.v1beta1.TranscoderServiceClient;
    import java.io.IOException;
    
    public class ListJobTemplates {
    
      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";
    
        listJobTemplates(projectId, location);
      }
    
      // Lists the job templates for a given location.
      public static void listJobTemplates(String projectId, String location) 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()) {
    
          var listJobTemplatesRequest =
              ListJobTemplatesRequest.newBuilder()
                  .setParent(LocationName.of(projectId, location).toString())
                  .build();
    
          // Send the list job templates request and process the response.
          TranscoderServiceClient.ListJobTemplatesPagedResponse response =
              transcoderServiceClient.listJobTemplates(listJobTemplatesRequest);
          System.out.println("Job templates:");
    
          for (JobTemplate jobTemplate : response.iterateAll()) {
            System.out.println(jobTemplate.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.

    /**
     * TODO(developer): Uncomment these variables before running the sample.
     */
    // projectId = 'my-project-id';
    // location = 'us-central1';
    
    // Imports the Transcoder library
    const {TranscoderServiceClient} = require('@google-cloud/video-transcoder');
    
    // Instantiates a client
    const transcoderServiceClient = new TranscoderServiceClient();
    
    async function listJobTemplates() {
      const [jobTemplates] = await transcoderServiceClient.listJobTemplates({
        parent: transcoderServiceClient.locationPath(projectId, location),
      });
      console.info('Job templates:');
      for (const jobTemplate of jobTemplates) {
        console.info(jobTemplate.name);
      }
    }
    
    listJobTemplates();

    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.

    
    import argparse
    
    from google.cloud.video.transcoder_v1beta1.services.transcoder_service import (
        TranscoderServiceClient,
    )
    
    
    def list_job_templates(project_id, location):
        """Lists all job templates in a location.
    
        Args:
            project_id: The GCP project ID.
            location: The location of the templates."""
    
        client = TranscoderServiceClient()
    
        parent = f"projects/{project_id}/locations/{location}"
        response = client.list_job_templates(parent=parent)
        print("Job templates:")
        for jobTemplate in response.job_templates:
            print({jobTemplate.name})
    
        return response
    
    

    This response may include a nextPageToken, which you can use to retrieve additional results:

    {
      "jobTemplates": [
        ...
      ],
      "nextPageToken": "NEXT_PAGE_TOKEN"
    }
    

    In the following curl example, you can then send another request, and include the value of NEXT_PAGE_TOKEN to list additional job templates, similar to the following:

    curl -X GET \
    -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
    https://transcoder.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/jobTemplates?pageToken=NEXT_PAGE_TOKEN
    

    See the relevant client library for more information on using this token.

    Deleting job templates

    To delete a job template, use the projects.locations.jobTemplates.delete method.

    REST & CMD LINE

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

  • TEMPLATE_ID: The ID of the job template you created.
  • PROJECT_ID: Your Google Cloud project ID.
  • LOCATION: The location of your job template. Use a location from the following list:
    • us-central1
    • us-west1
    • us-east1
    • southamerica-east1
    • asia-east1
    • europe-west1
  • To send your request, expand one of these options:

    You should receive a JSON response similar to the following:

    {}
    

    gcloud

    1. Make the following replacements for the gcloud command:
      • TEMPLATE_ID: The ID of the job template you created.
      • LOCATION: The location of your job template. Use a location from the following list:
        • us-central1
        • us-west1
        • us-east1
        • southamerica-east1
        • asia-east1
        • europe-west1
    2. Run the following command:
      gcloud beta transcoder templates delete TEMPLATE_ID --location=LOCATION
      You should see a response similar to the following:
      Deleted template [projects/PROJECT_ID/locations/LOCATION/jobTemplates/TEMPLATE_ID].
      

    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.

    import (
    	"context"
    	"fmt"
    	"io"
    
    	transcoder "cloud.google.com/go/video/transcoder/apiv1beta1"
    	transcoderpb "google.golang.org/genproto/googleapis/cloud/video/transcoder/v1beta1"
    )
    
    // deleteJobTemplate deletes a previously-created template for a job. See
    // https://cloud.google.com/transcoder/docs/how-to/job-templates#delete_job_template
    // for more information.
    func deleteJobTemplate(w io.Writer, projectID string, location string, templateID string) error {
    	// projectID := "my-project-id"
    	// location := "us-central1"
    	// templateID := "my-job-template"
    	ctx := context.Background()
    	client, err := transcoder.NewClient(ctx)
    	if err != nil {
    		return fmt.Errorf("NewClient: %v", err)
    	}
    	defer client.Close()
    
    	req := &transcoderpb.DeleteJobTemplateRequest{
    		Name: fmt.Sprintf("projects/%s/locations/%s/jobTemplates/%s", projectID, location, templateID),
    	}
    
    	err = client.DeleteJobTemplate(ctx, req)
    	if err != nil {
    		return fmt.Errorf("DeleteJobTemplate: %v", err)
    	}
    
    	fmt.Fprintf(w, "Deleted job template")
    	return nil
    }
    

    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.

    
    import com.google.cloud.video.transcoder.v1beta1.DeleteJobTemplateRequest;
    import com.google.cloud.video.transcoder.v1beta1.JobTemplateName;
    import com.google.cloud.video.transcoder.v1beta1.TranscoderServiceClient;
    import java.io.IOException;
    
    public class DeleteJobTemplate {
    
      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 templateId = "my-job-template";
    
        deleteJobTemplate(projectId, location, templateId);
      }
    
      // Deletes a job template.
      public static void deleteJobTemplate(String projectId, String location, String templateId)
          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()) {
          JobTemplateName jobTemplateName =
              JobTemplateName.newBuilder()
                  .setProject(projectId)
                  .setLocation(location)
                  .setJobTemplate(templateId)
                  .build();
          var deleteJobTemplateRequest =
              DeleteJobTemplateRequest.newBuilder().setName(jobTemplateName.toString()).build();
    
          // Send the delete job template request and process the response.
          transcoderServiceClient.deleteJobTemplate(deleteJobTemplateRequest);
          System.out.println("Deleted job template");
        }
      }
    }

    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.

    /**
     * TODO(developer): Uncomment these variables before running the sample.
     */
    // projectId = 'my-project-id';
    // location = 'us-central1';
    // templateId = 'my-job-template';
    
    // Imports the Transcoder library
    const {TranscoderServiceClient} = require('@google-cloud/video-transcoder');
    
    // Instantiates a client
    const transcoderServiceClient = new TranscoderServiceClient();
    
    async function deleteJobTemplate() {
      // Construct request
      const request = {
        name: transcoderServiceClient.jobTemplatePath(
          projectId,
          location,
          templateId
        ),
      };
      await transcoderServiceClient.deleteJobTemplate(request);
      console.log('Deleted job template');
    }
    
    deleteJobTemplate();

    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.

    
    import argparse
    
    from google.cloud.video.transcoder_v1beta1.services.transcoder_service import (
        TranscoderServiceClient,
    )
    
    
    def delete_job_template(project_id, location, template_id):
        """Deletes a job template.
    
        Args:
            project_id: The GCP project ID.
            location: The location of the template.
            template_id: The user-defined template ID."""
    
        client = TranscoderServiceClient()
    
        name = f"projects/{project_id}/locations/{location}/jobTemplates/{template_id}"
        response = client.delete_job_template(name=name)
        print("Deleted job template")
        return response
    
    

    What's next

    Learn about Creating and managing jobs.