Crie um job de transcodificação com uma sobreposição. A sobreposição consiste em uma imagem JPEG inserida na parte superior do vídeo de saída. A sobreposição pode esmaecer ou desaparecer.
Páginas de documentação que incluem esta amostra de código
Para visualizar o exemplo de código usado em contexto, consulte a seguinte documentação:
Amostra de código
C#
Antes de testar esta amostra, siga as instruções de configuração do C# no Guia de início rápido da API Transcoder: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Transcoder para C#.
using Google.Api.Gax.ResourceNames;
using Google.Cloud.Video.Transcoder.V1;
public class CreateJobWithAnimatedOverlaySample
{
public Job CreateJobWithAnimatedOverlay(
string projectId, string location, string inputUri, string overlayImageUri, string outputUri)
{
// Create the client.
TranscoderServiceClient client = TranscoderServiceClient.Create();
// Build the parent location name.
LocationName parent = new LocationName(projectId, location);
// Build the job config.
VideoStream videoStream0 = new VideoStream
{
H264 = new VideoStream.Types.H264CodecSettings
{
BitrateBps = 550000,
FrameRate = 60,
HeightPixels = 360,
WidthPixels = 640
}
};
AudioStream audioStream0 = new AudioStream
{
Codec = "aac",
BitrateBps = 64000
};
// Create the overlay image. Only JPEG is supported. Image resolution is based on output
// video resolution. This example uses the values x: 0 and y: 0 to maintain the original
// resolution of the overlay image.
Overlay.Types.Image overlayImage = new Overlay.Types.Image
{
Uri = overlayImageUri,
Alpha = 1,
Resolution = new Overlay.Types.NormalizedCoordinate
{
X = 0,
Y = 0
}
};
// Create the starting animation (when the overlay starts to fade in). Use the values x: 0.5
// and y: 0.5 to position the top-left corner of the overlay in the top-left corner of the
// output video.
Overlay.Types.Animation animationFadeIn = new Overlay.Types.Animation
{
AnimationFade = new Overlay.Types.AnimationFade
{
FadeType = Overlay.Types.FadeType.FadeIn,
Xy = new Overlay.Types.NormalizedCoordinate
{
X = 0.5,
Y = 0.5
},
StartTimeOffset = new Google.Protobuf.WellKnownTypes.Duration
{
Seconds = 5
},
EndTimeOffset = new Google.Protobuf.WellKnownTypes.Duration
{
Seconds = 10
}
}
};
// Create the ending animation (when the overlay starts to fade out). The overlay will start
// to fade out at the 12-second mark in the output video.
Overlay.Types.Animation animationFadeOut = new Overlay.Types.Animation
{
AnimationFade = new Overlay.Types.AnimationFade
{
FadeType = Overlay.Types.FadeType.FadeOut,
Xy = new Overlay.Types.NormalizedCoordinate
{
X = 0.5,
Y = 0.5
},
StartTimeOffset = new Google.Protobuf.WellKnownTypes.Duration
{
Seconds = 12
},
EndTimeOffset = new Google.Protobuf.WellKnownTypes.Duration
{
Seconds = 15
}
}
};
// Create the overlay and add the image and animations to it.
Overlay overlay = new Overlay
{
Image = overlayImage,
Animations = { animationFadeIn, animationFadeOut }
};
ElementaryStream elementaryStream0 = new ElementaryStream
{
Key = "video_stream0",
VideoStream = videoStream0
};
ElementaryStream elementaryStream1 = new ElementaryStream
{
Key = "audio_stream0",
AudioStream = audioStream0
};
MuxStream muxStream0 = new MuxStream
{
Key = "sd",
Container = "mp4",
ElementaryStreams = { "video_stream0", "audio_stream0" }
};
Input input = new Input
{
Key = "input0",
Uri = inputUri
};
Output output = new Output
{
Uri = outputUri
};
JobConfig jobConfig = new JobConfig
{
Inputs = { input },
Output = output,
ElementaryStreams = { elementaryStream0, elementaryStream1 },
MuxStreams = { muxStream0 },
Overlays = { overlay }
};
// Build the job.
Job newJob = new Job
{
InputUri = inputUri,
OutputUri = outputUri,
Config = jobConfig
};
// Call the API.
Job job = client.CreateJob(parent, newJob);
// Return the result.
return job;
}
}
Go
Antes de testar esta amostra, siga as instruções de configuração do Go no Guia de início rápido da API Transcoder: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Transcoder Go
import (
"context"
"fmt"
"io"
"github.com/golang/protobuf/ptypes/duration"
transcoder "cloud.google.com/go/video/transcoder/apiv1"
transcoderpb "google.golang.org/genproto/googleapis/cloud/video/transcoder/v1"
)
// createJobWithAnimatedOverlay creates a job based on a given configuration that
// includes an animated overlay. See
// https://cloud.google.com/transcoder/docs/how-to/create-overlays#create-animated-overlay
// for more information.
func createJobWithAnimatedOverlay(w io.Writer, projectID string, location string, inputURI string, overlayImageURI string, outputURI string) error {
// projectID := "my-project-id"
// location := "us-central1"
// inputURI := "gs://my-bucket/my-video-file"
// overlayImageURI := "gs://my-bucket/my-overlay-image-file" - Must be a JPEG
// outputURI := "gs://my-bucket/my-output-folder/"
ctx := context.Background()
client, err := transcoder.NewClient(ctx)
if err != nil {
return fmt.Errorf("NewClient: %v", err)
}
defer client.Close()
req := &transcoderpb.CreateJobRequest{
Parent: fmt.Sprintf("projects/%s/locations/%s", projectID, location),
Job: &transcoderpb.Job{
InputUri: inputURI,
OutputUri: outputURI,
JobConfig: &transcoderpb.Job_Config{
Config: &transcoderpb.JobConfig{
ElementaryStreams: []*transcoderpb.ElementaryStream{
&transcoderpb.ElementaryStream{
Key: "video_stream0",
ElementaryStream: &transcoderpb.ElementaryStream_VideoStream{
VideoStream: &transcoderpb.VideoStream{
CodecSettings: &transcoderpb.VideoStream_H264{
H264: &transcoderpb.VideoStream_H264CodecSettings{
BitrateBps: 550000,
FrameRate: 60,
HeightPixels: 360,
WidthPixels: 640,
},
},
},
},
},
&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"},
},
},
Overlays: []*transcoderpb.Overlay{
&transcoderpb.Overlay{
Image: &transcoderpb.Overlay_Image{
Uri: overlayImageURI,
Resolution: &transcoderpb.Overlay_NormalizedCoordinate{
X: 0,
Y: 0,
},
Alpha: 1,
},
Animations: []*transcoderpb.Overlay_Animation{
&transcoderpb.Overlay_Animation{
AnimationType: &transcoderpb.Overlay_Animation_AnimationFade{
AnimationFade: &transcoderpb.Overlay_AnimationFade{
FadeType: transcoderpb.Overlay_FADE_IN,
Xy: &transcoderpb.Overlay_NormalizedCoordinate{
X: 0.5,
Y: 0.5,
},
StartTimeOffset: &duration.Duration{
Seconds: 5,
},
EndTimeOffset: &duration.Duration{
Seconds: 10,
},
},
},
},
&transcoderpb.Overlay_Animation{
AnimationType: &transcoderpb.Overlay_Animation_AnimationFade{
AnimationFade: &transcoderpb.Overlay_AnimationFade{
FadeType: transcoderpb.Overlay_FADE_OUT,
Xy: &transcoderpb.Overlay_NormalizedCoordinate{
X: 0.5,
Y: 0.5,
},
StartTimeOffset: &duration.Duration{
Seconds: 12,
},
EndTimeOffset: &duration.Duration{
Seconds: 15,
},
},
},
},
},
},
},
},
},
},
}
// Creates the job. Jobs take a variable amount of time to run.
// You can query for the job state; see getJob() in get_job.go.
response, err := client.CreateJob(ctx, req)
if err != nil {
return fmt.Errorf("createJobWithAnimatedOverlay: %v", err)
}
fmt.Fprintf(w, "Job: %v", response.GetName())
return nil
}
Java
Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido da API Transcoder: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Transcoder para Java.
import com.google.cloud.video.transcoder.v1.AudioStream;
import com.google.cloud.video.transcoder.v1.CreateJobRequest;
import com.google.cloud.video.transcoder.v1.ElementaryStream;
import com.google.cloud.video.transcoder.v1.Input;
import com.google.cloud.video.transcoder.v1.Job;
import com.google.cloud.video.transcoder.v1.JobConfig;
import com.google.cloud.video.transcoder.v1.LocationName;
import com.google.cloud.video.transcoder.v1.MuxStream;
import com.google.cloud.video.transcoder.v1.Output;
import com.google.cloud.video.transcoder.v1.Overlay;
import com.google.cloud.video.transcoder.v1.Overlay.Animation;
import com.google.cloud.video.transcoder.v1.Overlay.AnimationFade;
import com.google.cloud.video.transcoder.v1.Overlay.FadeType;
import com.google.cloud.video.transcoder.v1.Overlay.NormalizedCoordinate;
import com.google.cloud.video.transcoder.v1.TranscoderServiceClient;
import com.google.cloud.video.transcoder.v1.VideoStream;
import com.google.protobuf.Duration;
import java.io.IOException;
public class CreateJobWithAnimatedOverlay {
public static void main(String[] args) throws IOException {
// TODO(developer): Replace these variables before running the sample.
String projectId = "my-project-id";
String location = "us-central1";
String inputUri = "gs://my-bucket/my-video-file";
String overlayImageUri = "gs://my-bucket/my-overlay-image.jpg"; // Must be a JPEG
String outputUri = "gs://my-bucket/my-output-folder/";
createJobWithAnimatedOverlay(projectId, location, inputUri, overlayImageUri, outputUri);
}
// Creates a job from an ad-hoc configuration and adds an animated overlay to it.
public static void createJobWithAnimatedOverlay(
String projectId, String location, String inputUri, String overlayImageUri, String outputUri)
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()
.setH264(
VideoStream.H264CodecSettings.newBuilder()
.setBitrateBps(550000)
.setFrameRate(60)
.setHeightPixels(360)
.setWidthPixels(640))
.build();
AudioStream audioStream0 =
AudioStream.newBuilder().setCodec("aac").setBitrateBps(64000).build();
// Create the overlay image. Only JPEG is supported. Image resolution is based on output
// video resolution. This example uses the values x: 0 and y: 0 to maintain the original
// resolution of the overlay image.
Overlay.Image overlayImage =
Overlay.Image.newBuilder()
.setUri(overlayImageUri)
.setResolution(NormalizedCoordinate.newBuilder().setX(0).setY(0).build())
.setAlpha(1)
.build();
// Create the starting animation (when the overlay starts to fade in). Use the values x: 0.5
// and y: 0.5 to position the top-left corner of the overlay in the top-left corner of the
// output video.
Overlay.Animation animationFadeIn =
Animation.newBuilder()
.setAnimationFade(
AnimationFade.newBuilder()
.setFadeType(FadeType.FADE_IN)
.setXy(NormalizedCoordinate.newBuilder().setX(0.5).setY(0.5).build())
.setStartTimeOffset(Duration.newBuilder().setSeconds(5).build())
.setEndTimeOffset(Duration.newBuilder().setSeconds(10).build())
.build())
.build();
// Create the ending animation (when the overlay starts to fade out). The overlay will start
// to fade out at the 12-second mark in the output video.
Overlay.Animation animationFadeOut =
Animation.newBuilder()
.setAnimationFade(
AnimationFade.newBuilder()
.setFadeType(FadeType.FADE_OUT)
.setXy(NormalizedCoordinate.newBuilder().setX(0.5).setY(0.5).build())
.setStartTimeOffset(Duration.newBuilder().setSeconds(12).build())
.setEndTimeOffset(Duration.newBuilder().setSeconds(15).build())
.build())
.build();
// Create the overlay and add the image and animations to it.
Overlay overlay =
Overlay.newBuilder()
.setImage(overlayImage)
.addAnimations(animationFadeIn)
.addAnimations(animationFadeOut)
.build();
JobConfig config =
JobConfig.newBuilder()
.addInputs(Input.newBuilder().setKey("input0").setUri(inputUri))
.setOutput(Output.newBuilder().setUri(outputUri))
.addElementaryStreams(
ElementaryStream.newBuilder()
.setKey("video_stream0")
.setVideoStream(videoStream0))
.addElementaryStreams(
ElementaryStream.newBuilder()
.setKey("audio_stream0")
.setAudioStream(audioStream0))
.addMuxStreams(
MuxStream.newBuilder()
.setKey("sd")
.setContainer("mp4")
.addElementaryStreams("video_stream0")
.addElementaryStreams("audio_stream0")
.build())
.addOverlays(overlay) // Add the overlay to the job config
.build();
var createJobRequest =
CreateJobRequest.newBuilder()
.setJob(
Job.newBuilder()
.setInputUri(inputUri)
.setOutputUri(outputUri)
.setConfig(config)
.build())
.setParent(LocationName.of(projectId, location).toString())
.build();
// Send the job creation request and process the response.
Job job = transcoderServiceClient.createJob(createJobRequest);
System.out.println("Job: " + job.getName());
}
}
}
Node.js
Antes de tentar esse exemplo, siga as instruções de configuração do Node.js no Guia de início rápido da API Transcoder: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Transcoder Node.js
/**
* TODO(developer): Uncomment these variables before running the sample.
*/
// projectId = 'my-project-id';
// location = 'us-central1';
// inputUri = 'gs://my-bucket/my-video-file';
// overlayImageUri = 'gs://my-bucket/my-overlay-image-file'; // Must be a JPEG
// outputUri = 'gs://my-bucket/my-output-folder/';
// Imports the Transcoder library
const {TranscoderServiceClient} =
require('@google-cloud/video-transcoder').v1;
// Instantiates a client
const transcoderServiceClient = new TranscoderServiceClient();
async function createJobFromAnimatedOverlay() {
// Construct request
const request = {
parent: transcoderServiceClient.locationPath(projectId, location),
job: {
inputUri: inputUri,
outputUri: outputUri,
config: {
elementaryStreams: [
{
key: 'video-stream0',
videoStream: {
h264: {
heightPixels: 360,
widthPixels: 640,
bitrateBps: 550000,
frameRate: 60,
},
},
},
{
key: 'audio-stream0',
audioStream: {
codec: 'aac',
bitrateBps: 64000,
},
},
],
muxStreams: [
{
key: 'sd',
container: 'mp4',
elementaryStreams: ['video-stream0', 'audio-stream0'],
},
],
overlays: [
{
image: {
uri: overlayImageUri,
resolution: {
x: 0,
y: 0,
},
alpha: 1.0,
},
animations: [
{
animationFade: {
fadeType: 'FADE_IN',
xy: {
x: 0.5,
y: 0.5,
},
startTimeOffset: {
seconds: 5,
},
endTimeOffset: {
seconds: 10,
},
},
},
{
animationFade: {
fadeType: 'FADE_OUT',
xy: {
x: 0.5,
y: 0.5,
},
startTimeOffset: {
seconds: 12,
},
endTimeOffset: {
seconds: 15,
},
},
},
],
},
],
},
},
};
// Run request
const [response] = await transcoderServiceClient.createJob(request);
console.log(`Job: ${response.name}`);
}
createJobFromAnimatedOverlay();
PHP
Antes de testar esta amostra, siga as instruções de configuração do PHP no Guia de início rápido da API Transcoder: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Transcoder para PHP.
use Google\Cloud\Video\Transcoder\V1\AudioStream;
use Google\Cloud\Video\Transcoder\V1\ElementaryStream;
use Google\Cloud\Video\Transcoder\V1\Job;
use Google\Cloud\Video\Transcoder\V1\JobConfig;
use Google\Cloud\Video\Transcoder\V1\MuxStream;
use Google\Cloud\Video\Transcoder\V1\Overlay;
use Google\Cloud\Video\Transcoder\V1\TranscoderServiceClient;
use Google\Cloud\Video\Transcoder\V1\VideoStream;
use Google\Protobuf\Duration;
/**
* Creates a job based on a supplied job config that includes an animated overlay.
*
* @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 $overlayImageUri Uri of the JPEG image for the overlay in the Cloud Storage bucket. Must be a JPEG.
* @param string $outputUri Uri of the video output folder in the Cloud Storage bucket.
*/
function create_job_with_animated_overlay($projectId, $location, $inputUri, $overlayImageUri, $outputUri)
{
// Instantiate a client.
$transcoderServiceClient = new TranscoderServiceClient();
$formattedParent = $transcoderServiceClient->locationName($projectId, $location);
$jobConfig =
(new JobConfig())->setElementaryStreams([
(new ElementaryStream())
->setKey('video-stream0')
->setVideoStream(
(new VideoStream())->setH264(
(new VideoStream\H264CodecSettings())
->setBitrateBps(550000)
->setFrameRate(60)
->setHeightPixels(360)
->setWidthPixels(640)
)
),
(new ElementaryStream())
->setKey('audio-stream0')
->setAudioStream(
(new AudioStream())
->setCodec('aac')
->setBitrateBps(64000)
)
])->setMuxStreams([
(new MuxStream())
->setKey('sd')
->setContainer('mp4')
->setElementaryStreams(['video-stream0', 'audio-stream0'])
])->setOverlays([
(new Overlay())->setImage(
(new Overlay\Image())
->setUri($overlayImageUri)
->setResolution(
(new Overlay\NormalizedCoordinate())
->setX(0)
->setY(0)
)
->setAlpha(1)
)->setAnimations([
(new Overlay\Animation())->setAnimationFade(
(new Overlay\AnimationFade())
->setFadeType(Overlay\FadeType::FADE_IN)
->setXy(
(new Overlay\NormalizedCoordinate())
->setY(0.5)
->setX(0.5)
)
->setStartTimeOffset(new Duration(['seconds' => 5]))
->setEndTimeOffset(new Duration(['seconds' => 10]))
),
(new Overlay\Animation())->setAnimationFade(
(new Overlay\AnimationFade())
->setFadeType(Overlay\FadeType::FADE_OUT)
->setXy(
(new Overlay\NormalizedCoordinate())
->setY(0.5)
->setX(0.5)
)
->setStartTimeOffset(new Duration(['seconds' => 12]))
->setEndTimeOffset(new Duration(['seconds' => 15]))
)
])
]);
$job = (new Job())
->setInputUri($inputUri)
->setOutputUri($outputUri)
->setConfig($jobConfig);
$response = $transcoderServiceClient->createJob($formattedParent, $job);
// Print job name.
printf('Job: %s' . PHP_EOL, $response->getName());
}
Python
Antes de testar esta amostra, siga as instruções de configuração do Python no Guia de início rápido da API Transcoder: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Transcoder Python
import argparse
from google.cloud.video import transcoder_v1
from google.cloud.video.transcoder_v1.services.transcoder_service import (
TranscoderServiceClient,
)
from google.protobuf import duration_pb2 as duration
def create_job_with_animated_overlay(
project_id, location, input_uri, overlay_image_uri, output_uri
):
"""Creates a job based on an ad-hoc job configuration that includes an animated image overlay.
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.
overlay_image_uri: Uri of the JPEG image for the overlay in the Cloud Storage bucket. Must be a JPEG.
output_uri: Uri of the video output folder in the Cloud Storage bucket."""
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.config = transcoder_v1.types.JobConfig(
elementary_streams=[
transcoder_v1.types.ElementaryStream(
key="video-stream0",
video_stream=transcoder_v1.types.VideoStream(
h264=transcoder_v1.types.VideoStream.H264CodecSettings(
height_pixels=360,
width_pixels=640,
bitrate_bps=550000,
frame_rate=60,
),
),
),
transcoder_v1.types.ElementaryStream(
key="audio-stream0",
audio_stream=transcoder_v1.types.AudioStream(
codec="aac", bitrate_bps=64000
),
),
],
mux_streams=[
transcoder_v1.types.MuxStream(
key="sd",
container="mp4",
elementary_streams=["video-stream0", "audio-stream0"],
),
],
overlays=[
transcoder_v1.types.Overlay(
image=transcoder_v1.types.Overlay.Image(
uri=overlay_image_uri,
resolution=transcoder_v1.types.Overlay.NormalizedCoordinate(
x=0,
y=0,
),
alpha=1,
),
animations=[
transcoder_v1.types.Overlay.Animation(
animation_fade=transcoder_v1.types.Overlay.AnimationFade(
fade_type=transcoder_v1.types.Overlay.FadeType.FADE_IN,
xy=transcoder_v1.types.Overlay.NormalizedCoordinate(
x=0.5,
y=0.5,
),
start_time_offset=duration.Duration(
seconds=5,
),
end_time_offset=duration.Duration(
seconds=10,
),
),
),
transcoder_v1.types.Overlay.Animation(
animation_fade=transcoder_v1.types.Overlay.AnimationFade(
fade_type=transcoder_v1.types.Overlay.FadeType.FADE_OUT,
xy=transcoder_v1.types.Overlay.NormalizedCoordinate(
x=0.5,
y=0.5,
),
start_time_offset=duration.Duration(
seconds=12,
),
end_time_offset=duration.Duration(
seconds=15,
),
),
),
],
),
],
)
response = client.create_job(parent=parent, job=job)
print(f"Job: {response.name}")
return response
Ruby
Antes de testar esta amostra, siga as instruções de configuração do Ruby no Guia de início rápido da API Transcoder: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Transcoder para Ruby.
# 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")
# overlay_image_uri = "YOUR-GCS-OVERLAY-IMAGE" # (e.g. "gs://my-bucket/overlay.jpg")
# output_uri = "YOUR-GCS-OUTPUT-FOLDER/" # (e.g. "gs://my-bucket/my-output-folder/")
# Require the Transcoder client library.
require "google/cloud/video/transcoder"
# Create a Transcoder client.
client = Google::Cloud::Video::Transcoder.transcoder_service
# Build the resource name of the parent.
parent = client.location_path project: project_id, location: location
# Build the job config.
new_job = {
input_uri: input_uri,
output_uri: output_uri,
config: {
elementary_streams: [
{
key: "video-stream0",
video_stream: {
h264: {
height_pixels: 360,
width_pixels: 640,
bitrate_bps: 550_000,
frame_rate: 60
}
}
},
{
key: "audio-stream0",
audio_stream: {
codec: "aac",
bitrate_bps: 64_000
}
}
],
mux_streams: [
{
key: "sd",
container: "mp4",
elementary_streams: [
"video-stream0",
"audio-stream0"
]
}
],
overlays: [
{
image: {
uri: overlay_image_uri,
resolution: {
x: 0,
y: 0
},
alpha: 1
},
animations: [
{
animation_fade: {
fade_type: Google::Cloud::Video::Transcoder::V1::Overlay::FadeType::FADE_IN,
xy: {
x: 0.5,
y: 0.5
},
start_time_offset: {
seconds: 5
},
end_time_offset: {
seconds: 10
}
}
},
{
animation_fade: {
fade_type: Google::Cloud::Video::Transcoder::V1::Overlay::FadeType::FADE_OUT,
xy: {
x: 0.5,
y: 0.5
},
start_time_offset: {
seconds: 12
},
end_time_offset: {
seconds: 15
}
}
}
]
}
]
}
}
job = client.create_job parent: parent, job: new_job
# Print the job name.
puts "Job: #{job.name}"
A seguir
Para pesquisar e filtrar exemplos de código de outros produtos do Google Cloud, consulte o navegador de exemplos do Google Cloud.