gcp.transcoder.Job
Explore with Pulumi AI
Transcoding Job Resource
To get more information about Job, see:
- API documentation
- How-to Guides
Example Usage
Transcoder Job Basic
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const _default = new gcp.storage.Bucket("default", {
name: "transcoder-job",
location: "US",
forceDestroy: true,
uniformBucketLevelAccess: true,
publicAccessPrevention: "enforced",
});
const exampleMp4 = new gcp.storage.BucketObject("example_mp4", {
name: "example.mp4",
source: new pulumi.asset.FileAsset("./test-fixtures/example.mp4"),
bucket: _default.name,
});
const defaultJobTemplate = new gcp.transcoder.JobTemplate("default", {
jobTemplateId: "example-job-template",
location: "us-central1",
config: {
inputs: [{
key: "input0",
uri: pulumi.interpolate`gs://${_default.name}/${exampleMp4.name}`,
}],
output: {
uri: pulumi.interpolate`gs://${_default.name}/outputs/`,
},
editLists: [{
key: "atom0",
inputs: ["input0"],
startTimeOffset: "0s",
}],
elementaryStreams: [
{
key: "video-stream0",
videoStream: {
h264: {
widthPixels: 640,
heightPixels: 360,
bitrateBps: 550000,
frameRate: 60,
pixelFormat: "yuv420p",
rateControlMode: "vbr",
crfLevel: 21,
gopDuration: "3s",
vbvSizeBits: 550000,
vbvFullnessBits: 495000,
entropyCoder: "cabac",
profile: "high",
preset: "veryfast",
},
},
},
{
key: "video-stream1",
videoStream: {
h264: {
widthPixels: 1280,
heightPixels: 720,
bitrateBps: 550000,
frameRate: 60,
pixelFormat: "yuv420p",
rateControlMode: "vbr",
crfLevel: 21,
gopDuration: "3s",
vbvSizeBits: 2500000,
vbvFullnessBits: 2250000,
entropyCoder: "cabac",
profile: "high",
preset: "veryfast",
},
},
},
{
key: "audio-stream0",
audioStream: {
codec: "aac",
bitrateBps: 64000,
channelCount: 2,
channelLayouts: [
"fl",
"fr",
],
sampleRateHertz: 48000,
},
},
],
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",
],
},
],
},
labels: {
label: "key",
},
});
const defaultJob = new gcp.transcoder.Job("default", {
templateId: defaultJobTemplate.name,
location: "us-central1",
labels: {
label: "key",
},
});
import pulumi
import pulumi_gcp as gcp
default = gcp.storage.Bucket("default",
name="transcoder-job",
location="US",
force_destroy=True,
uniform_bucket_level_access=True,
public_access_prevention="enforced")
example_mp4 = gcp.storage.BucketObject("example_mp4",
name="example.mp4",
source=pulumi.FileAsset("./test-fixtures/example.mp4"),
bucket=default.name)
default_job_template = gcp.transcoder.JobTemplate("default",
job_template_id="example-job-template",
location="us-central1",
config={
"inputs": [{
"key": "input0",
"uri": pulumi.Output.all(
defaultName=default.name,
exampleMp4Name=example_mp4.name
).apply(lambda resolved_outputs: f"gs://{resolved_outputs['defaultName']}/{resolved_outputs['exampleMp4Name']}")
,
}],
"output": {
"uri": default.name.apply(lambda name: f"gs://{name}/outputs/"),
},
"edit_lists": [{
"key": "atom0",
"inputs": ["input0"],
"start_time_offset": "0s",
}],
"elementary_streams": [
{
"key": "video-stream0",
"video_stream": {
"h264": {
"width_pixels": 640,
"height_pixels": 360,
"bitrate_bps": 550000,
"frame_rate": 60,
"pixel_format": "yuv420p",
"rate_control_mode": "vbr",
"crf_level": 21,
"gop_duration": "3s",
"vbv_size_bits": 550000,
"vbv_fullness_bits": 495000,
"entropy_coder": "cabac",
"profile": "high",
"preset": "veryfast",
},
},
},
{
"key": "video-stream1",
"video_stream": {
"h264": {
"width_pixels": 1280,
"height_pixels": 720,
"bitrate_bps": 550000,
"frame_rate": 60,
"pixel_format": "yuv420p",
"rate_control_mode": "vbr",
"crf_level": 21,
"gop_duration": "3s",
"vbv_size_bits": 2500000,
"vbv_fullness_bits": 2250000,
"entropy_coder": "cabac",
"profile": "high",
"preset": "veryfast",
},
},
},
{
"key": "audio-stream0",
"audio_stream": {
"codec": "aac",
"bitrate_bps": 64000,
"channel_count": 2,
"channel_layouts": [
"fl",
"fr",
],
"sample_rate_hertz": 48000,
},
},
],
"mux_streams": [
{
"key": "sd",
"file_name": "sd.mp4",
"container": "mp4",
"elementary_streams": [
"video-stream0",
"audio-stream0",
],
},
{
"key": "hd",
"file_name": "hd.mp4",
"container": "mp4",
"elementary_streams": [
"video-stream1",
"audio-stream0",
],
},
],
},
labels={
"label": "key",
})
default_job = gcp.transcoder.Job("default",
template_id=default_job_template.name,
location="us-central1",
labels={
"label": "key",
})
package main
import (
"fmt"
"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage"
"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/transcoder"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := storage.NewBucket(ctx, "default", &storage.BucketArgs{
Name: pulumi.String("transcoder-job"),
Location: pulumi.String("US"),
ForceDestroy: pulumi.Bool(true),
UniformBucketLevelAccess: pulumi.Bool(true),
PublicAccessPrevention: pulumi.String("enforced"),
})
if err != nil {
return err
}
exampleMp4, err := storage.NewBucketObject(ctx, "example_mp4", &storage.BucketObjectArgs{
Name: pulumi.String("example.mp4"),
Source: pulumi.NewFileAsset("./test-fixtures/example.mp4"),
Bucket: _default.Name,
})
if err != nil {
return err
}
defaultJobTemplate, err := transcoder.NewJobTemplate(ctx, "default", &transcoder.JobTemplateArgs{
JobTemplateId: pulumi.String("example-job-template"),
Location: pulumi.String("us-central1"),
Config: &transcoder.JobTemplateConfigArgs{
Inputs: transcoder.JobTemplateConfigInputTypeArray{
&transcoder.JobTemplateConfigInputTypeArgs{
Key: pulumi.String("input0"),
Uri: pulumi.All(_default.Name, exampleMp4.Name).ApplyT(func(_args []interface{}) (string, error) {
defaultName := _args[0].(string)
exampleMp4Name := _args[1].(string)
return fmt.Sprintf("gs://%v/%v", defaultName, exampleMp4Name), nil
}).(pulumi.StringOutput),
},
},
Output: &transcoder.JobTemplateConfigOutputTypeArgs{
Uri: _default.Name.ApplyT(func(name string) (string, error) {
return fmt.Sprintf("gs://%v/outputs/", name), nil
}).(pulumi.StringOutput),
},
EditLists: transcoder.JobTemplateConfigEditListArray{
&transcoder.JobTemplateConfigEditListArgs{
Key: pulumi.String("atom0"),
Inputs: pulumi.StringArray{
pulumi.String("input0"),
},
StartTimeOffset: pulumi.String("0s"),
},
},
ElementaryStreams: transcoder.JobTemplateConfigElementaryStreamArray{
&transcoder.JobTemplateConfigElementaryStreamArgs{
Key: pulumi.String("video-stream0"),
VideoStream: &transcoder.JobTemplateConfigElementaryStreamVideoStreamArgs{
H264: &transcoder.JobTemplateConfigElementaryStreamVideoStreamH264Args{
WidthPixels: pulumi.Int(640),
HeightPixels: pulumi.Int(360),
BitrateBps: pulumi.Int(550000),
FrameRate: pulumi.Int(60),
PixelFormat: pulumi.String("yuv420p"),
RateControlMode: pulumi.String("vbr"),
CrfLevel: pulumi.Int(21),
GopDuration: pulumi.String("3s"),
VbvSizeBits: pulumi.Int(550000),
VbvFullnessBits: pulumi.Int(495000),
EntropyCoder: pulumi.String("cabac"),
Profile: pulumi.String("high"),
Preset: pulumi.String("veryfast"),
},
},
},
&transcoder.JobTemplateConfigElementaryStreamArgs{
Key: pulumi.String("video-stream1"),
VideoStream: &transcoder.JobTemplateConfigElementaryStreamVideoStreamArgs{
H264: &transcoder.JobTemplateConfigElementaryStreamVideoStreamH264Args{
WidthPixels: pulumi.Int(1280),
HeightPixels: pulumi.Int(720),
BitrateBps: pulumi.Int(550000),
FrameRate: pulumi.Int(60),
PixelFormat: pulumi.String("yuv420p"),
RateControlMode: pulumi.String("vbr"),
CrfLevel: pulumi.Int(21),
GopDuration: pulumi.String("3s"),
VbvSizeBits: pulumi.Int(2500000),
VbvFullnessBits: pulumi.Int(2250000),
EntropyCoder: pulumi.String("cabac"),
Profile: pulumi.String("high"),
Preset: pulumi.String("veryfast"),
},
},
},
&transcoder.JobTemplateConfigElementaryStreamArgs{
Key: pulumi.String("audio-stream0"),
AudioStream: &transcoder.JobTemplateConfigElementaryStreamAudioStreamArgs{
Codec: pulumi.String("aac"),
BitrateBps: pulumi.Int(64000),
ChannelCount: pulumi.Int(2),
ChannelLayouts: pulumi.StringArray{
pulumi.String("fl"),
pulumi.String("fr"),
},
SampleRateHertz: pulumi.Int(48000),
},
},
},
MuxStreams: transcoder.JobTemplateConfigMuxStreamArray{
&transcoder.JobTemplateConfigMuxStreamArgs{
Key: pulumi.String("sd"),
FileName: pulumi.String("sd.mp4"),
Container: pulumi.String("mp4"),
ElementaryStreams: pulumi.StringArray{
pulumi.String("video-stream0"),
pulumi.String("audio-stream0"),
},
},
&transcoder.JobTemplateConfigMuxStreamArgs{
Key: pulumi.String("hd"),
FileName: pulumi.String("hd.mp4"),
Container: pulumi.String("mp4"),
ElementaryStreams: pulumi.StringArray{
pulumi.String("video-stream1"),
pulumi.String("audio-stream0"),
},
},
},
},
Labels: pulumi.StringMap{
"label": pulumi.String("key"),
},
})
if err != nil {
return err
}
_, err = transcoder.NewJob(ctx, "default", &transcoder.JobArgs{
TemplateId: defaultJobTemplate.Name,
Location: pulumi.String("us-central1"),
Labels: pulumi.StringMap{
"label": pulumi.String("key"),
},
})
if err != nil {
return err
}
return nil
})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var @default = new Gcp.Storage.Bucket("default", new()
{
Name = "transcoder-job",
Location = "US",
ForceDestroy = true,
UniformBucketLevelAccess = true,
PublicAccessPrevention = "enforced",
});
var exampleMp4 = new Gcp.Storage.BucketObject("example_mp4", new()
{
Name = "example.mp4",
Source = new FileAsset("./test-fixtures/example.mp4"),
Bucket = @default.Name,
});
var defaultJobTemplate = new Gcp.Transcoder.JobTemplate("default", new()
{
JobTemplateId = "example-job-template",
Location = "us-central1",
Config = new Gcp.Transcoder.Inputs.JobTemplateConfigArgs
{
Inputs = new[]
{
new Gcp.Transcoder.Inputs.JobTemplateConfigInputArgs
{
Key = "input0",
Uri = Output.Tuple(@default.Name, exampleMp4.Name).Apply(values =>
{
var defaultName = values.Item1;
var exampleMp4Name = values.Item2;
return $"gs://{defaultName}/{exampleMp4Name}";
}),
},
},
Output = new Gcp.Transcoder.Inputs.JobTemplateConfigOutputArgs
{
Uri = @default.Name.Apply(name => $"gs://{name}/outputs/"),
},
EditLists = new[]
{
new Gcp.Transcoder.Inputs.JobTemplateConfigEditListArgs
{
Key = "atom0",
Inputs = new[]
{
"input0",
},
StartTimeOffset = "0s",
},
},
ElementaryStreams = new[]
{
new Gcp.Transcoder.Inputs.JobTemplateConfigElementaryStreamArgs
{
Key = "video-stream0",
VideoStream = new Gcp.Transcoder.Inputs.JobTemplateConfigElementaryStreamVideoStreamArgs
{
H264 = new Gcp.Transcoder.Inputs.JobTemplateConfigElementaryStreamVideoStreamH264Args
{
WidthPixels = 640,
HeightPixels = 360,
BitrateBps = 550000,
FrameRate = 60,
PixelFormat = "yuv420p",
RateControlMode = "vbr",
CrfLevel = 21,
GopDuration = "3s",
VbvSizeBits = 550000,
VbvFullnessBits = 495000,
EntropyCoder = "cabac",
Profile = "high",
Preset = "veryfast",
},
},
},
new Gcp.Transcoder.Inputs.JobTemplateConfigElementaryStreamArgs
{
Key = "video-stream1",
VideoStream = new Gcp.Transcoder.Inputs.JobTemplateConfigElementaryStreamVideoStreamArgs
{
H264 = new Gcp.Transcoder.Inputs.JobTemplateConfigElementaryStreamVideoStreamH264Args
{
WidthPixels = 1280,
HeightPixels = 720,
BitrateBps = 550000,
FrameRate = 60,
PixelFormat = "yuv420p",
RateControlMode = "vbr",
CrfLevel = 21,
GopDuration = "3s",
VbvSizeBits = 2500000,
VbvFullnessBits = 2250000,
EntropyCoder = "cabac",
Profile = "high",
Preset = "veryfast",
},
},
},
new Gcp.Transcoder.Inputs.JobTemplateConfigElementaryStreamArgs
{
Key = "audio-stream0",
AudioStream = new Gcp.Transcoder.Inputs.JobTemplateConfigElementaryStreamAudioStreamArgs
{
Codec = "aac",
BitrateBps = 64000,
ChannelCount = 2,
ChannelLayouts = new[]
{
"fl",
"fr",
},
SampleRateHertz = 48000,
},
},
},
MuxStreams = new[]
{
new Gcp.Transcoder.Inputs.JobTemplateConfigMuxStreamArgs
{
Key = "sd",
FileName = "sd.mp4",
Container = "mp4",
ElementaryStreams = new[]
{
"video-stream0",
"audio-stream0",
},
},
new Gcp.Transcoder.Inputs.JobTemplateConfigMuxStreamArgs
{
Key = "hd",
FileName = "hd.mp4",
Container = "mp4",
ElementaryStreams = new[]
{
"video-stream1",
"audio-stream0",
},
},
},
},
Labels =
{
{ "label", "key" },
},
});
var defaultJob = new Gcp.Transcoder.Job("default", new()
{
TemplateId = defaultJobTemplate.Name,
Location = "us-central1",
Labels =
{
{ "label", "key" },
},
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.storage.Bucket;
import com.pulumi.gcp.storage.BucketArgs;
import com.pulumi.gcp.storage.BucketObject;
import com.pulumi.gcp.storage.BucketObjectArgs;
import com.pulumi.gcp.transcoder.JobTemplate;
import com.pulumi.gcp.transcoder.JobTemplateArgs;
import com.pulumi.gcp.transcoder.inputs.JobTemplateConfigArgs;
import com.pulumi.gcp.transcoder.inputs.JobTemplateConfigOutputArgs;
import com.pulumi.gcp.transcoder.Job;
import com.pulumi.gcp.transcoder.JobArgs;
import com.pulumi.asset.FileAsset;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var default_ = new Bucket("default", BucketArgs.builder()
.name("transcoder-job")
.location("US")
.forceDestroy(true)
.uniformBucketLevelAccess(true)
.publicAccessPrevention("enforced")
.build());
var exampleMp4 = new BucketObject("exampleMp4", BucketObjectArgs.builder()
.name("example.mp4")
.source(new FileAsset("./test-fixtures/example.mp4"))
.bucket(default_.name())
.build());
var defaultJobTemplate = new JobTemplate("defaultJobTemplate", JobTemplateArgs.builder()
.jobTemplateId("example-job-template")
.location("us-central1")
.config(JobTemplateConfigArgs.builder()
.inputs(JobTemplateConfigInputArgs.builder()
.key("input0")
.uri(Output.tuple(default_.name(), exampleMp4.name()).applyValue(values -> {
var defaultName = values.t1;
var exampleMp4Name = values.t2;
return String.format("gs://%s/%s", defaultName,exampleMp4Name);
}))
.build())
.output(JobTemplateConfigOutputArgs.builder()
.uri(default_.name().applyValue(name -> String.format("gs://%s/outputs/", name)))
.build())
.editLists(JobTemplateConfigEditListArgs.builder()
.key("atom0")
.inputs("input0")
.startTimeOffset("0s")
.build())
.elementaryStreams(
JobTemplateConfigElementaryStreamArgs.builder()
.key("video-stream0")
.videoStream(JobTemplateConfigElementaryStreamVideoStreamArgs.builder()
.h264(JobTemplateConfigElementaryStreamVideoStreamH264Args.builder()
.widthPixels(640)
.heightPixels(360)
.bitrateBps(550000)
.frameRate(60)
.pixelFormat("yuv420p")
.rateControlMode("vbr")
.crfLevel(21)
.gopDuration("3s")
.vbvSizeBits(550000)
.vbvFullnessBits(495000)
.entropyCoder("cabac")
.profile("high")
.preset("veryfast")
.build())
.build())
.build(),
JobTemplateConfigElementaryStreamArgs.builder()
.key("video-stream1")
.videoStream(JobTemplateConfigElementaryStreamVideoStreamArgs.builder()
.h264(JobTemplateConfigElementaryStreamVideoStreamH264Args.builder()
.widthPixels(1280)
.heightPixels(720)
.bitrateBps(550000)
.frameRate(60)
.pixelFormat("yuv420p")
.rateControlMode("vbr")
.crfLevel(21)
.gopDuration("3s")
.vbvSizeBits(2500000)
.vbvFullnessBits(2250000)
.entropyCoder("cabac")
.profile("high")
.preset("veryfast")
.build())
.build())
.build(),
JobTemplateConfigElementaryStreamArgs.builder()
.key("audio-stream0")
.audioStream(JobTemplateConfigElementaryStreamAudioStreamArgs.builder()
.codec("aac")
.bitrateBps(64000)
.channelCount(2)
.channelLayouts(
"fl",
"fr")
.sampleRateHertz(48000)
.build())
.build())
.muxStreams(
JobTemplateConfigMuxStreamArgs.builder()
.key("sd")
.fileName("sd.mp4")
.container("mp4")
.elementaryStreams(
"video-stream0",
"audio-stream0")
.build(),
JobTemplateConfigMuxStreamArgs.builder()
.key("hd")
.fileName("hd.mp4")
.container("mp4")
.elementaryStreams(
"video-stream1",
"audio-stream0")
.build())
.build())
.labels(Map.of("label", "key"))
.build());
var defaultJob = new Job("defaultJob", JobArgs.builder()
.templateId(defaultJobTemplate.name())
.location("us-central1")
.labels(Map.of("label", "key"))
.build());
}
}
resources:
default:
type: gcp:storage:Bucket
properties:
name: transcoder-job
location: US
forceDestroy: true
uniformBucketLevelAccess: true
publicAccessPrevention: enforced
exampleMp4:
type: gcp:storage:BucketObject
name: example_mp4
properties:
name: example.mp4
source:
fn::FileAsset: ./test-fixtures/example.mp4
bucket: ${default.name}
defaultJob:
type: gcp:transcoder:Job
name: default
properties:
templateId: ${defaultJobTemplate.name}
location: us-central1
labels:
label: key
defaultJobTemplate:
type: gcp:transcoder:JobTemplate
name: default
properties:
jobTemplateId: example-job-template
location: us-central1
config:
inputs:
- key: input0
uri: gs://${default.name}/${exampleMp4.name}
output:
uri: gs://${default.name}/outputs/
editLists:
- key: atom0
inputs:
- input0
startTimeOffset: 0s
elementaryStreams:
- key: video-stream0
videoStream:
h264:
widthPixels: 640
heightPixels: 360
bitrateBps: 550000
frameRate: 60
pixelFormat: yuv420p
rateControlMode: vbr
crfLevel: 21
gopDuration: 3s
vbvSizeBits: 550000
vbvFullnessBits: 495000
entropyCoder: cabac
profile: high
preset: veryfast
- key: video-stream1
videoStream:
h264:
widthPixels: 1280
heightPixels: 720
bitrateBps: 550000
frameRate: 60
pixelFormat: yuv420p
rateControlMode: vbr
crfLevel: 21
gopDuration: 3s
vbvSizeBits: 2.5e+06
vbvFullnessBits: 2.25e+06
entropyCoder: cabac
profile: high
preset: veryfast
- key: audio-stream0
audioStream:
codec: aac
bitrateBps: 64000
channelCount: 2
channelLayouts:
- fl
- fr
sampleRateHertz: 48000
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
labels:
label: key
Transcoder Job Pubsub
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const _default = new gcp.storage.Bucket("default", {
name: "transcoder-job",
location: "US",
forceDestroy: true,
uniformBucketLevelAccess: true,
publicAccessPrevention: "enforced",
});
const exampleMp4 = new gcp.storage.BucketObject("example_mp4", {
name: "example.mp4",
source: new pulumi.asset.FileAsset("./test-fixtures/example.mp4"),
bucket: _default.name,
});
const transcoderNotifications = new gcp.pubsub.Topic("transcoder_notifications", {name: "transcoder-notifications"});
const defaultJob = new gcp.transcoder.Job("default", {
location: "us-central1",
config: {
inputs: [{
key: "input0",
uri: pulumi.interpolate`gs://${_default.name}/${exampleMp4.name}`,
}],
editLists: [{
key: "atom0",
inputs: ["input0"],
startTimeOffset: "0s",
}],
adBreaks: [{
startTimeOffset: "3.500s",
}],
elementaryStreams: [
{
key: "video-stream0",
videoStream: {
h264: {
widthPixels: 640,
heightPixels: 360,
bitrateBps: 550000,
frameRate: 60,
pixelFormat: "yuv420p",
rateControlMode: "vbr",
crfLevel: 21,
gopDuration: "3s",
vbvSizeBits: 550000,
vbvFullnessBits: 495000,
entropyCoder: "cabac",
profile: "high",
preset: "veryfast",
},
},
},
{
key: "video-stream1",
videoStream: {
h264: {
widthPixels: 1280,
heightPixels: 720,
bitrateBps: 550000,
frameRate: 60,
pixelFormat: "yuv420p",
rateControlMode: "vbr",
crfLevel: 21,
gopDuration: "3s",
vbvSizeBits: 2500000,
vbvFullnessBits: 2250000,
entropyCoder: "cabac",
profile: "high",
preset: "veryfast",
},
},
},
{
key: "audio-stream0",
audioStream: {
codec: "aac",
bitrateBps: 64000,
channelCount: 2,
channelLayouts: [
"fl",
"fr",
],
sampleRateHertz: 48000,
},
},
],
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",
],
},
],
pubsubDestination: {
topic: transcoderNotifications.id,
},
output: {
uri: pulumi.interpolate`gs://${_default.name}/outputs/`,
},
},
labels: {
label: "key",
},
});
import pulumi
import pulumi_gcp as gcp
default = gcp.storage.Bucket("default",
name="transcoder-job",
location="US",
force_destroy=True,
uniform_bucket_level_access=True,
public_access_prevention="enforced")
example_mp4 = gcp.storage.BucketObject("example_mp4",
name="example.mp4",
source=pulumi.FileAsset("./test-fixtures/example.mp4"),
bucket=default.name)
transcoder_notifications = gcp.pubsub.Topic("transcoder_notifications", name="transcoder-notifications")
default_job = gcp.transcoder.Job("default",
location="us-central1",
config={
"inputs": [{
"key": "input0",
"uri": pulumi.Output.all(
defaultName=default.name,
exampleMp4Name=example_mp4.name
).apply(lambda resolved_outputs: f"gs://{resolved_outputs['defaultName']}/{resolved_outputs['exampleMp4Name']}")
,
}],
"edit_lists": [{
"key": "atom0",
"inputs": ["input0"],
"start_time_offset": "0s",
}],
"ad_breaks": [{
"start_time_offset": "3.500s",
}],
"elementary_streams": [
{
"key": "video-stream0",
"video_stream": {
"h264": {
"width_pixels": 640,
"height_pixels": 360,
"bitrate_bps": 550000,
"frame_rate": 60,
"pixel_format": "yuv420p",
"rate_control_mode": "vbr",
"crf_level": 21,
"gop_duration": "3s",
"vbv_size_bits": 550000,
"vbv_fullness_bits": 495000,
"entropy_coder": "cabac",
"profile": "high",
"preset": "veryfast",
},
},
},
{
"key": "video-stream1",
"video_stream": {
"h264": {
"width_pixels": 1280,
"height_pixels": 720,
"bitrate_bps": 550000,
"frame_rate": 60,
"pixel_format": "yuv420p",
"rate_control_mode": "vbr",
"crf_level": 21,
"gop_duration": "3s",
"vbv_size_bits": 2500000,
"vbv_fullness_bits": 2250000,
"entropy_coder": "cabac",
"profile": "high",
"preset": "veryfast",
},
},
},
{
"key": "audio-stream0",
"audio_stream": {
"codec": "aac",
"bitrate_bps": 64000,
"channel_count": 2,
"channel_layouts": [
"fl",
"fr",
],
"sample_rate_hertz": 48000,
},
},
],
"mux_streams": [
{
"key": "sd",
"file_name": "sd.mp4",
"container": "mp4",
"elementary_streams": [
"video-stream0",
"audio-stream0",
],
},
{
"key": "hd",
"file_name": "hd.mp4",
"container": "mp4",
"elementary_streams": [
"video-stream1",
"audio-stream0",
],
},
],
"pubsub_destination": {
"topic": transcoder_notifications.id,
},
"output": {
"uri": default.name.apply(lambda name: f"gs://{name}/outputs/"),
},
},
labels={
"label": "key",
})
package main
import (
"fmt"
"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub"
"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage"
"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/transcoder"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := storage.NewBucket(ctx, "default", &storage.BucketArgs{
Name: pulumi.String("transcoder-job"),
Location: pulumi.String("US"),
ForceDestroy: pulumi.Bool(true),
UniformBucketLevelAccess: pulumi.Bool(true),
PublicAccessPrevention: pulumi.String("enforced"),
})
if err != nil {
return err
}
exampleMp4, err := storage.NewBucketObject(ctx, "example_mp4", &storage.BucketObjectArgs{
Name: pulumi.String("example.mp4"),
Source: pulumi.NewFileAsset("./test-fixtures/example.mp4"),
Bucket: _default.Name,
})
if err != nil {
return err
}
transcoderNotifications, err := pubsub.NewTopic(ctx, "transcoder_notifications", &pubsub.TopicArgs{
Name: pulumi.String("transcoder-notifications"),
})
if err != nil {
return err
}
_, err = transcoder.NewJob(ctx, "default", &transcoder.JobArgs{
Location: pulumi.String("us-central1"),
Config: &transcoder.JobConfigArgs{
Inputs: transcoder.JobConfigInputTypeArray{
&transcoder.JobConfigInputTypeArgs{
Key: pulumi.String("input0"),
Uri: pulumi.All(_default.Name, exampleMp4.Name).ApplyT(func(_args []interface{}) (string, error) {
defaultName := _args[0].(string)
exampleMp4Name := _args[1].(string)
return fmt.Sprintf("gs://%v/%v", defaultName, exampleMp4Name), nil
}).(pulumi.StringOutput),
},
},
EditLists: transcoder.JobConfigEditListArray{
&transcoder.JobConfigEditListArgs{
Key: pulumi.String("atom0"),
Inputs: pulumi.StringArray{
pulumi.String("input0"),
},
StartTimeOffset: pulumi.String("0s"),
},
},
AdBreaks: transcoder.JobConfigAdBreakArray{
&transcoder.JobConfigAdBreakArgs{
StartTimeOffset: pulumi.String("3.500s"),
},
},
ElementaryStreams: transcoder.JobConfigElementaryStreamArray{
&transcoder.JobConfigElementaryStreamArgs{
Key: pulumi.String("video-stream0"),
VideoStream: &transcoder.JobConfigElementaryStreamVideoStreamArgs{
H264: &transcoder.JobConfigElementaryStreamVideoStreamH264Args{
WidthPixels: pulumi.Int(640),
HeightPixels: pulumi.Int(360),
BitrateBps: pulumi.Int(550000),
FrameRate: pulumi.Int(60),
PixelFormat: pulumi.String("yuv420p"),
RateControlMode: pulumi.String("vbr"),
CrfLevel: pulumi.Int(21),
GopDuration: pulumi.String("3s"),
VbvSizeBits: pulumi.Int(550000),
VbvFullnessBits: pulumi.Int(495000),
EntropyCoder: pulumi.String("cabac"),
Profile: pulumi.String("high"),
Preset: pulumi.String("veryfast"),
},
},
},
&transcoder.JobConfigElementaryStreamArgs{
Key: pulumi.String("video-stream1"),
VideoStream: &transcoder.JobConfigElementaryStreamVideoStreamArgs{
H264: &transcoder.JobConfigElementaryStreamVideoStreamH264Args{
WidthPixels: pulumi.Int(1280),
HeightPixels: pulumi.Int(720),
BitrateBps: pulumi.Int(550000),
FrameRate: pulumi.Int(60),
PixelFormat: pulumi.String("yuv420p"),
RateControlMode: pulumi.String("vbr"),
CrfLevel: pulumi.Int(21),
GopDuration: pulumi.String("3s"),
VbvSizeBits: pulumi.Int(2500000),
VbvFullnessBits: pulumi.Int(2250000),
EntropyCoder: pulumi.String("cabac"),
Profile: pulumi.String("high"),
Preset: pulumi.String("veryfast"),
},
},
},
&transcoder.JobConfigElementaryStreamArgs{
Key: pulumi.String("audio-stream0"),
AudioStream: &transcoder.JobConfigElementaryStreamAudioStreamArgs{
Codec: pulumi.String("aac"),
BitrateBps: pulumi.Int(64000),
ChannelCount: pulumi.Int(2),
ChannelLayouts: pulumi.StringArray{
pulumi.String("fl"),
pulumi.String("fr"),
},
SampleRateHertz: pulumi.Int(48000),
},
},
},
MuxStreams: transcoder.JobConfigMuxStreamArray{
&transcoder.JobConfigMuxStreamArgs{
Key: pulumi.String("sd"),
FileName: pulumi.String("sd.mp4"),
Container: pulumi.String("mp4"),
ElementaryStreams: pulumi.StringArray{
pulumi.String("video-stream0"),
pulumi.String("audio-stream0"),
},
},
&transcoder.JobConfigMuxStreamArgs{
Key: pulumi.String("hd"),
FileName: pulumi.String("hd.mp4"),
Container: pulumi.String("mp4"),
ElementaryStreams: pulumi.StringArray{
pulumi.String("video-stream1"),
pulumi.String("audio-stream0"),
},
},
},
PubsubDestination: &transcoder.JobConfigPubsubDestinationArgs{
Topic: transcoderNotifications.ID(),
},
Output: &transcoder.JobConfigOutputTypeArgs{
Uri: _default.Name.ApplyT(func(name string) (string, error) {
return fmt.Sprintf("gs://%v/outputs/", name), nil
}).(pulumi.StringOutput),
},
},
Labels: pulumi.StringMap{
"label": pulumi.String("key"),
},
})
if err != nil {
return err
}
return nil
})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var @default = new Gcp.Storage.Bucket("default", new()
{
Name = "transcoder-job",
Location = "US",
ForceDestroy = true,
UniformBucketLevelAccess = true,
PublicAccessPrevention = "enforced",
});
var exampleMp4 = new Gcp.Storage.BucketObject("example_mp4", new()
{
Name = "example.mp4",
Source = new FileAsset("./test-fixtures/example.mp4"),
Bucket = @default.Name,
});
var transcoderNotifications = new Gcp.PubSub.Topic("transcoder_notifications", new()
{
Name = "transcoder-notifications",
});
var defaultJob = new Gcp.Transcoder.Job("default", new()
{
Location = "us-central1",
Config = new Gcp.Transcoder.Inputs.JobConfigArgs
{
Inputs = new[]
{
new Gcp.Transcoder.Inputs.JobConfigInputArgs
{
Key = "input0",
Uri = Output.Tuple(@default.Name, exampleMp4.Name).Apply(values =>
{
var defaultName = values.Item1;
var exampleMp4Name = values.Item2;
return $"gs://{defaultName}/{exampleMp4Name}";
}),
},
},
EditLists = new[]
{
new Gcp.Transcoder.Inputs.JobConfigEditListArgs
{
Key = "atom0",
Inputs = new[]
{
"input0",
},
StartTimeOffset = "0s",
},
},
AdBreaks = new[]
{
new Gcp.Transcoder.Inputs.JobConfigAdBreakArgs
{
StartTimeOffset = "3.500s",
},
},
ElementaryStreams = new[]
{
new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs
{
Key = "video-stream0",
VideoStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamArgs
{
H264 = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamH264Args
{
WidthPixels = 640,
HeightPixels = 360,
BitrateBps = 550000,
FrameRate = 60,
PixelFormat = "yuv420p",
RateControlMode = "vbr",
CrfLevel = 21,
GopDuration = "3s",
VbvSizeBits = 550000,
VbvFullnessBits = 495000,
EntropyCoder = "cabac",
Profile = "high",
Preset = "veryfast",
},
},
},
new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs
{
Key = "video-stream1",
VideoStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamArgs
{
H264 = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamH264Args
{
WidthPixels = 1280,
HeightPixels = 720,
BitrateBps = 550000,
FrameRate = 60,
PixelFormat = "yuv420p",
RateControlMode = "vbr",
CrfLevel = 21,
GopDuration = "3s",
VbvSizeBits = 2500000,
VbvFullnessBits = 2250000,
EntropyCoder = "cabac",
Profile = "high",
Preset = "veryfast",
},
},
},
new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs
{
Key = "audio-stream0",
AudioStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamAudioStreamArgs
{
Codec = "aac",
BitrateBps = 64000,
ChannelCount = 2,
ChannelLayouts = new[]
{
"fl",
"fr",
},
SampleRateHertz = 48000,
},
},
},
MuxStreams = new[]
{
new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs
{
Key = "sd",
FileName = "sd.mp4",
Container = "mp4",
ElementaryStreams = new[]
{
"video-stream0",
"audio-stream0",
},
},
new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs
{
Key = "hd",
FileName = "hd.mp4",
Container = "mp4",
ElementaryStreams = new[]
{
"video-stream1",
"audio-stream0",
},
},
},
PubsubDestination = new Gcp.Transcoder.Inputs.JobConfigPubsubDestinationArgs
{
Topic = transcoderNotifications.Id,
},
Output = new Gcp.Transcoder.Inputs.JobConfigOutputArgs
{
Uri = @default.Name.Apply(name => $"gs://{name}/outputs/"),
},
},
Labels =
{
{ "label", "key" },
},
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.storage.Bucket;
import com.pulumi.gcp.storage.BucketArgs;
import com.pulumi.gcp.storage.BucketObject;
import com.pulumi.gcp.storage.BucketObjectArgs;
import com.pulumi.gcp.pubsub.Topic;
import com.pulumi.gcp.pubsub.TopicArgs;
import com.pulumi.gcp.transcoder.Job;
import com.pulumi.gcp.transcoder.JobArgs;
import com.pulumi.gcp.transcoder.inputs.JobConfigArgs;
import com.pulumi.gcp.transcoder.inputs.JobConfigPubsubDestinationArgs;
import com.pulumi.gcp.transcoder.inputs.JobConfigOutputArgs;
import com.pulumi.asset.FileAsset;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var default_ = new Bucket("default", BucketArgs.builder()
.name("transcoder-job")
.location("US")
.forceDestroy(true)
.uniformBucketLevelAccess(true)
.publicAccessPrevention("enforced")
.build());
var exampleMp4 = new BucketObject("exampleMp4", BucketObjectArgs.builder()
.name("example.mp4")
.source(new FileAsset("./test-fixtures/example.mp4"))
.bucket(default_.name())
.build());
var transcoderNotifications = new Topic("transcoderNotifications", TopicArgs.builder()
.name("transcoder-notifications")
.build());
var defaultJob = new Job("defaultJob", JobArgs.builder()
.location("us-central1")
.config(JobConfigArgs.builder()
.inputs(JobConfigInputArgs.builder()
.key("input0")
.uri(Output.tuple(default_.name(), exampleMp4.name()).applyValue(values -> {
var defaultName = values.t1;
var exampleMp4Name = values.t2;
return String.format("gs://%s/%s", defaultName,exampleMp4Name);
}))
.build())
.editLists(JobConfigEditListArgs.builder()
.key("atom0")
.inputs("input0")
.startTimeOffset("0s")
.build())
.adBreaks(JobConfigAdBreakArgs.builder()
.startTimeOffset("3.500s")
.build())
.elementaryStreams(
JobConfigElementaryStreamArgs.builder()
.key("video-stream0")
.videoStream(JobConfigElementaryStreamVideoStreamArgs.builder()
.h264(JobConfigElementaryStreamVideoStreamH264Args.builder()
.widthPixels(640)
.heightPixels(360)
.bitrateBps(550000)
.frameRate(60)
.pixelFormat("yuv420p")
.rateControlMode("vbr")
.crfLevel(21)
.gopDuration("3s")
.vbvSizeBits(550000)
.vbvFullnessBits(495000)
.entropyCoder("cabac")
.profile("high")
.preset("veryfast")
.build())
.build())
.build(),
JobConfigElementaryStreamArgs.builder()
.key("video-stream1")
.videoStream(JobConfigElementaryStreamVideoStreamArgs.builder()
.h264(JobConfigElementaryStreamVideoStreamH264Args.builder()
.widthPixels(1280)
.heightPixels(720)
.bitrateBps(550000)
.frameRate(60)
.pixelFormat("yuv420p")
.rateControlMode("vbr")
.crfLevel(21)
.gopDuration("3s")
.vbvSizeBits(2500000)
.vbvFullnessBits(2250000)
.entropyCoder("cabac")
.profile("high")
.preset("veryfast")
.build())
.build())
.build(),
JobConfigElementaryStreamArgs.builder()
.key("audio-stream0")
.audioStream(JobConfigElementaryStreamAudioStreamArgs.builder()
.codec("aac")
.bitrateBps(64000)
.channelCount(2)
.channelLayouts(
"fl",
"fr")
.sampleRateHertz(48000)
.build())
.build())
.muxStreams(
JobConfigMuxStreamArgs.builder()
.key("sd")
.fileName("sd.mp4")
.container("mp4")
.elementaryStreams(
"video-stream0",
"audio-stream0")
.build(),
JobConfigMuxStreamArgs.builder()
.key("hd")
.fileName("hd.mp4")
.container("mp4")
.elementaryStreams(
"video-stream1",
"audio-stream0")
.build())
.pubsubDestination(JobConfigPubsubDestinationArgs.builder()
.topic(transcoderNotifications.id())
.build())
.output(JobConfigOutputArgs.builder()
.uri(default_.name().applyValue(name -> String.format("gs://%s/outputs/", name)))
.build())
.build())
.labels(Map.of("label", "key"))
.build());
}
}
resources:
default:
type: gcp:storage:Bucket
properties:
name: transcoder-job
location: US
forceDestroy: true
uniformBucketLevelAccess: true
publicAccessPrevention: enforced
exampleMp4:
type: gcp:storage:BucketObject
name: example_mp4
properties:
name: example.mp4
source:
fn::FileAsset: ./test-fixtures/example.mp4
bucket: ${default.name}
transcoderNotifications:
type: gcp:pubsub:Topic
name: transcoder_notifications
properties:
name: transcoder-notifications
defaultJob:
type: gcp:transcoder:Job
name: default
properties:
location: us-central1
config:
inputs:
- key: input0
uri: gs://${default.name}/${exampleMp4.name}
editLists:
- key: atom0
inputs:
- input0
startTimeOffset: 0s
adBreaks:
- startTimeOffset: 3.500s
elementaryStreams:
- key: video-stream0
videoStream:
h264:
widthPixels: 640
heightPixels: 360
bitrateBps: 550000
frameRate: 60
pixelFormat: yuv420p
rateControlMode: vbr
crfLevel: 21
gopDuration: 3s
vbvSizeBits: 550000
vbvFullnessBits: 495000
entropyCoder: cabac
profile: high
preset: veryfast
- key: video-stream1
videoStream:
h264:
widthPixels: 1280
heightPixels: 720
bitrateBps: 550000
frameRate: 60
pixelFormat: yuv420p
rateControlMode: vbr
crfLevel: 21
gopDuration: 3s
vbvSizeBits: 2.5e+06
vbvFullnessBits: 2.25e+06
entropyCoder: cabac
profile: high
preset: veryfast
- key: audio-stream0
audioStream:
codec: aac
bitrateBps: 64000
channelCount: 2
channelLayouts:
- fl
- fr
sampleRateHertz: 48000
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
pubsubDestination:
topic: ${transcoderNotifications.id}
output:
uri: gs://${default.name}/outputs/
labels:
label: key
Transcoder Job Encryptions
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const _default = new gcp.storage.Bucket("default", {
name: "transcoder-job",
location: "US",
forceDestroy: true,
uniformBucketLevelAccess: true,
publicAccessPrevention: "enforced",
});
const exampleMp4 = new gcp.storage.BucketObject("example_mp4", {
name: "example.mp4",
source: new pulumi.asset.FileAsset("./test-fixtures/example.mp4"),
bucket: _default.name,
});
const encryptionKey = new gcp.secretmanager.Secret("encryption_key", {
secretId: "transcoder-encryption-key",
replication: {
auto: {},
},
});
const encryptionKeySecretVersion = new gcp.secretmanager.SecretVersion("encryption_key", {
secret: encryptionKey.name,
secretData: "4A67F2C1B8E93A4F6D3E7890A1BC23DF",
});
const project = gcp.organizations.getProject({});
// this is required to allow the transcoder service identity to access the secret
const transcoder = new gcp.projects.ServiceIdentity("transcoder", {
project: project.then(project => project.projectId),
service: "transcoder.googleapis.com",
});
const transcoderEncryptionKeyAccessor = new gcp.secretmanager.SecretIamMember("transcoder_encryption_key_accessor", {
secretId: encryptionKey.secretId,
project: encryptionKey.project,
role: "roles/secretmanager.secretAccessor",
member: pulumi.interpolate`serviceAccount:${transcoder.email}`,
});
const defaultJob = new gcp.transcoder.Job("default", {
location: "us-central1",
config: {
inputs: [{
key: "input0",
uri: pulumi.interpolate`gs://${_default.name}/${exampleMp4.name}`,
}],
elementaryStreams: [
{
key: "es_video",
videoStream: {
h264: {
profile: "main",
heightPixels: 600,
widthPixels: 800,
bitrateBps: 1000000,
frameRate: 60,
},
},
},
{
key: "es_audio",
audioStream: {
codec: "aac",
channelCount: 2,
bitrateBps: 160000,
},
},
],
encryptions: [
{
id: "aes-128",
secretManagerKeySource: {
secretVersion: encryptionKeySecretVersion.name,
},
drmSystems: {
clearkey: {},
},
aes128: {},
},
{
id: "cenc",
secretManagerKeySource: {
secretVersion: encryptionKeySecretVersion.name,
},
drmSystems: {
widevine: {},
},
mpegCenc: {
scheme: "cenc",
},
},
{
id: "cbcs",
secretManagerKeySource: {
secretVersion: encryptionKeySecretVersion.name,
},
drmSystems: {
widevine: {},
},
mpegCenc: {
scheme: "cbcs",
},
},
],
muxStreams: [
{
key: "ts_aes128",
container: "ts",
elementaryStreams: [
"es_video",
"es_audio",
],
segmentSettings: {
segmentDuration: "6s",
},
encryptionId: "aes-128",
},
{
key: "fmp4_cenc_video",
container: "fmp4",
elementaryStreams: ["es_video"],
segmentSettings: {
segmentDuration: "6s",
},
encryptionId: "cenc",
},
{
key: "fmp4_cenc_audio",
container: "fmp4",
elementaryStreams: ["es_audio"],
segmentSettings: {
segmentDuration: "6s",
},
encryptionId: "cenc",
},
{
key: "fmp4_cbcs_video",
container: "fmp4",
elementaryStreams: ["es_video"],
segmentSettings: {
segmentDuration: "6s",
},
encryptionId: "cbcs",
},
{
key: "fmp4_cbcs_audio",
container: "fmp4",
elementaryStreams: ["es_audio"],
segmentSettings: {
segmentDuration: "6s",
},
encryptionId: "cbcs",
},
],
manifests: [
{
fileName: "manifest_aes128.m3u8",
type: "HLS",
muxStreams: ["ts_aes128"],
},
{
fileName: "manifest_cenc.mpd",
type: "DASH",
muxStreams: [
"fmp4_cenc_video",
"fmp4_cenc_audio",
],
},
{
fileName: "manifest_cbcs.mpd",
type: "DASH",
muxStreams: [
"fmp4_cbcs_video",
"fmp4_cbcs_audio",
],
},
],
output: {
uri: pulumi.interpolate`gs://${_default.name}/outputs/`,
},
},
labels: {
label: "key",
},
});
import pulumi
import pulumi_gcp as gcp
default = gcp.storage.Bucket("default",
name="transcoder-job",
location="US",
force_destroy=True,
uniform_bucket_level_access=True,
public_access_prevention="enforced")
example_mp4 = gcp.storage.BucketObject("example_mp4",
name="example.mp4",
source=pulumi.FileAsset("./test-fixtures/example.mp4"),
bucket=default.name)
encryption_key = gcp.secretmanager.Secret("encryption_key",
secret_id="transcoder-encryption-key",
replication={
"auto": {},
})
encryption_key_secret_version = gcp.secretmanager.SecretVersion("encryption_key",
secret=encryption_key.name,
secret_data="4A67F2C1B8E93A4F6D3E7890A1BC23DF")
project = gcp.organizations.get_project()
# this is required to allow the transcoder service identity to access the secret
transcoder = gcp.projects.ServiceIdentity("transcoder",
project=project.project_id,
service="transcoder.googleapis.com")
transcoder_encryption_key_accessor = gcp.secretmanager.SecretIamMember("transcoder_encryption_key_accessor",
secret_id=encryption_key.secret_id,
project=encryption_key.project,
role="roles/secretmanager.secretAccessor",
member=transcoder.email.apply(lambda email: f"serviceAccount:{email}"))
default_job = gcp.transcoder.Job("default",
location="us-central1",
config={
"inputs": [{
"key": "input0",
"uri": pulumi.Output.all(
defaultName=default.name,
exampleMp4Name=example_mp4.name
).apply(lambda resolved_outputs: f"gs://{resolved_outputs['defaultName']}/{resolved_outputs['exampleMp4Name']}")
,
}],
"elementary_streams": [
{
"key": "es_video",
"video_stream": {
"h264": {
"profile": "main",
"height_pixels": 600,
"width_pixels": 800,
"bitrate_bps": 1000000,
"frame_rate": 60,
},
},
},
{
"key": "es_audio",
"audio_stream": {
"codec": "aac",
"channel_count": 2,
"bitrate_bps": 160000,
},
},
],
"encryptions": [
{
"id": "aes-128",
"secret_manager_key_source": {
"secret_version": encryption_key_secret_version.name,
},
"drm_systems": {
"clearkey": {},
},
"aes128": {},
},
{
"id": "cenc",
"secret_manager_key_source": {
"secret_version": encryption_key_secret_version.name,
},
"drm_systems": {
"widevine": {},
},
"mpeg_cenc": {
"scheme": "cenc",
},
},
{
"id": "cbcs",
"secret_manager_key_source": {
"secret_version": encryption_key_secret_version.name,
},
"drm_systems": {
"widevine": {},
},
"mpeg_cenc": {
"scheme": "cbcs",
},
},
],
"mux_streams": [
{
"key": "ts_aes128",
"container": "ts",
"elementary_streams": [
"es_video",
"es_audio",
],
"segment_settings": {
"segment_duration": "6s",
},
"encryption_id": "aes-128",
},
{
"key": "fmp4_cenc_video",
"container": "fmp4",
"elementary_streams": ["es_video"],
"segment_settings": {
"segment_duration": "6s",
},
"encryption_id": "cenc",
},
{
"key": "fmp4_cenc_audio",
"container": "fmp4",
"elementary_streams": ["es_audio"],
"segment_settings": {
"segment_duration": "6s",
},
"encryption_id": "cenc",
},
{
"key": "fmp4_cbcs_video",
"container": "fmp4",
"elementary_streams": ["es_video"],
"segment_settings": {
"segment_duration": "6s",
},
"encryption_id": "cbcs",
},
{
"key": "fmp4_cbcs_audio",
"container": "fmp4",
"elementary_streams": ["es_audio"],
"segment_settings": {
"segment_duration": "6s",
},
"encryption_id": "cbcs",
},
],
"manifests": [
{
"file_name": "manifest_aes128.m3u8",
"type": "HLS",
"mux_streams": ["ts_aes128"],
},
{
"file_name": "manifest_cenc.mpd",
"type": "DASH",
"mux_streams": [
"fmp4_cenc_video",
"fmp4_cenc_audio",
],
},
{
"file_name": "manifest_cbcs.mpd",
"type": "DASH",
"mux_streams": [
"fmp4_cbcs_video",
"fmp4_cbcs_audio",
],
},
],
"output": {
"uri": default.name.apply(lambda name: f"gs://{name}/outputs/"),
},
},
labels={
"label": "key",
})
package main
import (
"fmt"
"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations"
"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/projects"
"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager"
"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage"
"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/transcoder"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := storage.NewBucket(ctx, "default", &storage.BucketArgs{
Name: pulumi.String("transcoder-job"),
Location: pulumi.String("US"),
ForceDestroy: pulumi.Bool(true),
UniformBucketLevelAccess: pulumi.Bool(true),
PublicAccessPrevention: pulumi.String("enforced"),
})
if err != nil {
return err
}
exampleMp4, err := storage.NewBucketObject(ctx, "example_mp4", &storage.BucketObjectArgs{
Name: pulumi.String("example.mp4"),
Source: pulumi.NewFileAsset("./test-fixtures/example.mp4"),
Bucket: _default.Name,
})
if err != nil {
return err
}
encryptionKey, err := secretmanager.NewSecret(ctx, "encryption_key", &secretmanager.SecretArgs{
SecretId: pulumi.String("transcoder-encryption-key"),
Replication: &secretmanager.SecretReplicationArgs{
Auto: &secretmanager.SecretReplicationAutoArgs{},
},
})
if err != nil {
return err
}
encryptionKeySecretVersion, err := secretmanager.NewSecretVersion(ctx, "encryption_key", &secretmanager.SecretVersionArgs{
Secret: encryptionKey.Name,
SecretData: pulumi.String("4A67F2C1B8E93A4F6D3E7890A1BC23DF"),
})
if err != nil {
return err
}
project, err := organizations.LookupProject(ctx, &organizations.LookupProjectArgs{}, nil)
if err != nil {
return err
}
// this is required to allow the transcoder service identity to access the secret
transcoder, err := projects.NewServiceIdentity(ctx, "transcoder", &projects.ServiceIdentityArgs{
Project: pulumi.String(project.ProjectId),
Service: pulumi.String("transcoder.googleapis.com"),
})
if err != nil {
return err
}
_, err = secretmanager.NewSecretIamMember(ctx, "transcoder_encryption_key_accessor", &secretmanager.SecretIamMemberArgs{
SecretId: encryptionKey.SecretId,
Project: encryptionKey.Project,
Role: pulumi.String("roles/secretmanager.secretAccessor"),
Member: transcoder.Email.ApplyT(func(email string) (string, error) {
return fmt.Sprintf("serviceAccount:%v", email), nil
}).(pulumi.StringOutput),
})
if err != nil {
return err
}
_, err = transcoder.NewJob(ctx, "default", &transcoder.JobArgs{
Location: pulumi.String("us-central1"),
Config: &transcoder.JobConfigArgs{
Inputs: transcoder.JobConfigInputTypeArray{
&transcoder.JobConfigInputTypeArgs{
Key: pulumi.String("input0"),
Uri: pulumi.All(_default.Name, exampleMp4.Name).ApplyT(func(_args []interface{}) (string, error) {
defaultName := _args[0].(string)
exampleMp4Name := _args[1].(string)
return fmt.Sprintf("gs://%v/%v", defaultName, exampleMp4Name), nil
}).(pulumi.StringOutput),
},
},
ElementaryStreams: transcoder.JobConfigElementaryStreamArray{
&transcoder.JobConfigElementaryStreamArgs{
Key: pulumi.String("es_video"),
VideoStream: &transcoder.JobConfigElementaryStreamVideoStreamArgs{
H264: &transcoder.JobConfigElementaryStreamVideoStreamH264Args{
Profile: pulumi.String("main"),
HeightPixels: pulumi.Int(600),
WidthPixels: pulumi.Int(800),
BitrateBps: pulumi.Int(1000000),
FrameRate: pulumi.Int(60),
},
},
},
&transcoder.JobConfigElementaryStreamArgs{
Key: pulumi.String("es_audio"),
AudioStream: &transcoder.JobConfigElementaryStreamAudioStreamArgs{
Codec: pulumi.String("aac"),
ChannelCount: pulumi.Int(2),
BitrateBps: pulumi.Int(160000),
},
},
},
Encryptions: transcoder.JobConfigEncryptionArray{
&transcoder.JobConfigEncryptionArgs{
Id: pulumi.String("aes-128"),
SecretManagerKeySource: &transcoder.JobConfigEncryptionSecretManagerKeySourceArgs{
SecretVersion: encryptionKeySecretVersion.Name,
},
DrmSystems: &transcoder.JobConfigEncryptionDrmSystemsArgs{
Clearkey: &transcoder.JobConfigEncryptionDrmSystemsClearkeyArgs{},
},
Aes128: &transcoder.JobConfigEncryptionAes128Args{},
},
&transcoder.JobConfigEncryptionArgs{
Id: pulumi.String("cenc"),
SecretManagerKeySource: &transcoder.JobConfigEncryptionSecretManagerKeySourceArgs{
SecretVersion: encryptionKeySecretVersion.Name,
},
DrmSystems: &transcoder.JobConfigEncryptionDrmSystemsArgs{
Widevine: &transcoder.JobConfigEncryptionDrmSystemsWidevineArgs{},
},
MpegCenc: &transcoder.JobConfigEncryptionMpegCencArgs{
Scheme: pulumi.String("cenc"),
},
},
&transcoder.JobConfigEncryptionArgs{
Id: pulumi.String("cbcs"),
SecretManagerKeySource: &transcoder.JobConfigEncryptionSecretManagerKeySourceArgs{
SecretVersion: encryptionKeySecretVersion.Name,
},
DrmSystems: &transcoder.JobConfigEncryptionDrmSystemsArgs{
Widevine: &transcoder.JobConfigEncryptionDrmSystemsWidevineArgs{},
},
MpegCenc: &transcoder.JobConfigEncryptionMpegCencArgs{
Scheme: pulumi.String("cbcs"),
},
},
},
MuxStreams: transcoder.JobConfigMuxStreamArray{
&transcoder.JobConfigMuxStreamArgs{
Key: pulumi.String("ts_aes128"),
Container: pulumi.String("ts"),
ElementaryStreams: pulumi.StringArray{
pulumi.String("es_video"),
pulumi.String("es_audio"),
},
SegmentSettings: &transcoder.JobConfigMuxStreamSegmentSettingsArgs{
SegmentDuration: pulumi.String("6s"),
},
EncryptionId: pulumi.String("aes-128"),
},
&transcoder.JobConfigMuxStreamArgs{
Key: pulumi.String("fmp4_cenc_video"),
Container: pulumi.String("fmp4"),
ElementaryStreams: pulumi.StringArray{
pulumi.String("es_video"),
},
SegmentSettings: &transcoder.JobConfigMuxStreamSegmentSettingsArgs{
SegmentDuration: pulumi.String("6s"),
},
EncryptionId: pulumi.String("cenc"),
},
&transcoder.JobConfigMuxStreamArgs{
Key: pulumi.String("fmp4_cenc_audio"),
Container: pulumi.String("fmp4"),
ElementaryStreams: pulumi.StringArray{
pulumi.String("es_audio"),
},
SegmentSettings: &transcoder.JobConfigMuxStreamSegmentSettingsArgs{
SegmentDuration: pulumi.String("6s"),
},
EncryptionId: pulumi.String("cenc"),
},
&transcoder.JobConfigMuxStreamArgs{
Key: pulumi.String("fmp4_cbcs_video"),
Container: pulumi.String("fmp4"),
ElementaryStreams: pulumi.StringArray{
pulumi.String("es_video"),
},
SegmentSettings: &transcoder.JobConfigMuxStreamSegmentSettingsArgs{
SegmentDuration: pulumi.String("6s"),
},
EncryptionId: pulumi.String("cbcs"),
},
&transcoder.JobConfigMuxStreamArgs{
Key: pulumi.String("fmp4_cbcs_audio"),
Container: pulumi.String("fmp4"),
ElementaryStreams: pulumi.StringArray{
pulumi.String("es_audio"),
},
SegmentSettings: &transcoder.JobConfigMuxStreamSegmentSettingsArgs{
SegmentDuration: pulumi.String("6s"),
},
EncryptionId: pulumi.String("cbcs"),
},
},
Manifests: transcoder.JobConfigManifestArray{
&transcoder.JobConfigManifestArgs{
FileName: pulumi.String("manifest_aes128.m3u8"),
Type: pulumi.String("HLS"),
MuxStreams: pulumi.StringArray{
pulumi.String("ts_aes128"),
},
},
&transcoder.JobConfigManifestArgs{
FileName: pulumi.String("manifest_cenc.mpd"),
Type: pulumi.String("DASH"),
MuxStreams: pulumi.StringArray{
pulumi.String("fmp4_cenc_video"),
pulumi.String("fmp4_cenc_audio"),
},
},
&transcoder.JobConfigManifestArgs{
FileName: pulumi.String("manifest_cbcs.mpd"),
Type: pulumi.String("DASH"),
MuxStreams: pulumi.StringArray{
pulumi.String("fmp4_cbcs_video"),
pulumi.String("fmp4_cbcs_audio"),
},
},
},
Output: &transcoder.JobConfigOutputTypeArgs{
Uri: _default.Name.ApplyT(func(name string) (string, error) {
return fmt.Sprintf("gs://%v/outputs/", name), nil
}).(pulumi.StringOutput),
},
},
Labels: pulumi.StringMap{
"label": pulumi.String("key"),
},
})
if err != nil {
return err
}
return nil
})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var @default = new Gcp.Storage.Bucket("default", new()
{
Name = "transcoder-job",
Location = "US",
ForceDestroy = true,
UniformBucketLevelAccess = true,
PublicAccessPrevention = "enforced",
});
var exampleMp4 = new Gcp.Storage.BucketObject("example_mp4", new()
{
Name = "example.mp4",
Source = new FileAsset("./test-fixtures/example.mp4"),
Bucket = @default.Name,
});
var encryptionKey = new Gcp.SecretManager.Secret("encryption_key", new()
{
SecretId = "transcoder-encryption-key",
Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs
{
Auto = null,
},
});
var encryptionKeySecretVersion = new Gcp.SecretManager.SecretVersion("encryption_key", new()
{
Secret = encryptionKey.Name,
SecretData = "4A67F2C1B8E93A4F6D3E7890A1BC23DF",
});
var project = Gcp.Organizations.GetProject.Invoke();
// this is required to allow the transcoder service identity to access the secret
var transcoder = new Gcp.Projects.ServiceIdentity("transcoder", new()
{
Project = project.Apply(getProjectResult => getProjectResult.ProjectId),
Service = "transcoder.googleapis.com",
});
var transcoderEncryptionKeyAccessor = new Gcp.SecretManager.SecretIamMember("transcoder_encryption_key_accessor", new()
{
SecretId = encryptionKey.SecretId,
Project = encryptionKey.Project,
Role = "roles/secretmanager.secretAccessor",
Member = transcoder.Email.Apply(email => $"serviceAccount:{email}"),
});
var defaultJob = new Gcp.Transcoder.Job("default", new()
{
Location = "us-central1",
Config = new Gcp.Transcoder.Inputs.JobConfigArgs
{
Inputs = new[]
{
new Gcp.Transcoder.Inputs.JobConfigInputArgs
{
Key = "input0",
Uri = Output.Tuple(@default.Name, exampleMp4.Name).Apply(values =>
{
var defaultName = values.Item1;
var exampleMp4Name = values.Item2;
return $"gs://{defaultName}/{exampleMp4Name}";
}),
},
},
ElementaryStreams = new[]
{
new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs
{
Key = "es_video",
VideoStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamArgs
{
H264 = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamH264Args
{
Profile = "main",
HeightPixels = 600,
WidthPixels = 800,
BitrateBps = 1000000,
FrameRate = 60,
},
},
},
new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs
{
Key = "es_audio",
AudioStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamAudioStreamArgs
{
Codec = "aac",
ChannelCount = 2,
BitrateBps = 160000,
},
},
},
Encryptions = new[]
{
new Gcp.Transcoder.Inputs.JobConfigEncryptionArgs
{
Id = "aes-128",
SecretManagerKeySource = new Gcp.Transcoder.Inputs.JobConfigEncryptionSecretManagerKeySourceArgs
{
SecretVersion = encryptionKeySecretVersion.Name,
},
DrmSystems = new Gcp.Transcoder.Inputs.JobConfigEncryptionDrmSystemsArgs
{
Clearkey = null,
},
Aes128 = null,
},
new Gcp.Transcoder.Inputs.JobConfigEncryptionArgs
{
Id = "cenc",
SecretManagerKeySource = new Gcp.Transcoder.Inputs.JobConfigEncryptionSecretManagerKeySourceArgs
{
SecretVersion = encryptionKeySecretVersion.Name,
},
DrmSystems = new Gcp.Transcoder.Inputs.JobConfigEncryptionDrmSystemsArgs
{
Widevine = null,
},
MpegCenc = new Gcp.Transcoder.Inputs.JobConfigEncryptionMpegCencArgs
{
Scheme = "cenc",
},
},
new Gcp.Transcoder.Inputs.JobConfigEncryptionArgs
{
Id = "cbcs",
SecretManagerKeySource = new Gcp.Transcoder.Inputs.JobConfigEncryptionSecretManagerKeySourceArgs
{
SecretVersion = encryptionKeySecretVersion.Name,
},
DrmSystems = new Gcp.Transcoder.Inputs.JobConfigEncryptionDrmSystemsArgs
{
Widevine = null,
},
MpegCenc = new Gcp.Transcoder.Inputs.JobConfigEncryptionMpegCencArgs
{
Scheme = "cbcs",
},
},
},
MuxStreams = new[]
{
new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs
{
Key = "ts_aes128",
Container = "ts",
ElementaryStreams = new[]
{
"es_video",
"es_audio",
},
SegmentSettings = new Gcp.Transcoder.Inputs.JobConfigMuxStreamSegmentSettingsArgs
{
SegmentDuration = "6s",
},
EncryptionId = "aes-128",
},
new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs
{
Key = "fmp4_cenc_video",
Container = "fmp4",
ElementaryStreams = new[]
{
"es_video",
},
SegmentSettings = new Gcp.Transcoder.Inputs.JobConfigMuxStreamSegmentSettingsArgs
{
SegmentDuration = "6s",
},
EncryptionId = "cenc",
},
new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs
{
Key = "fmp4_cenc_audio",
Container = "fmp4",
ElementaryStreams = new[]
{
"es_audio",
},
SegmentSettings = new Gcp.Transcoder.Inputs.JobConfigMuxStreamSegmentSettingsArgs
{
SegmentDuration = "6s",
},
EncryptionId = "cenc",
},
new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs
{
Key = "fmp4_cbcs_video",
Container = "fmp4",
ElementaryStreams = new[]
{
"es_video",
},
SegmentSettings = new Gcp.Transcoder.Inputs.JobConfigMuxStreamSegmentSettingsArgs
{
SegmentDuration = "6s",
},
EncryptionId = "cbcs",
},
new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs
{
Key = "fmp4_cbcs_audio",
Container = "fmp4",
ElementaryStreams = new[]
{
"es_audio",
},
SegmentSettings = new Gcp.Transcoder.Inputs.JobConfigMuxStreamSegmentSettingsArgs
{
SegmentDuration = "6s",
},
EncryptionId = "cbcs",
},
},
Manifests = new[]
{
new Gcp.Transcoder.Inputs.JobConfigManifestArgs
{
FileName = "manifest_aes128.m3u8",
Type = "HLS",
MuxStreams = new[]
{
"ts_aes128",
},
},
new Gcp.Transcoder.Inputs.JobConfigManifestArgs
{
FileName = "manifest_cenc.mpd",
Type = "DASH",
MuxStreams = new[]
{
"fmp4_cenc_video",
"fmp4_cenc_audio",
},
},
new Gcp.Transcoder.Inputs.JobConfigManifestArgs
{
FileName = "manifest_cbcs.mpd",
Type = "DASH",
MuxStreams = new[]
{
"fmp4_cbcs_video",
"fmp4_cbcs_audio",
},
},
},
Output = new Gcp.Transcoder.Inputs.JobConfigOutputArgs
{
Uri = @default.Name.Apply(name => $"gs://{name}/outputs/"),
},
},
Labels =
{
{ "label", "key" },
},
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.storage.Bucket;
import com.pulumi.gcp.storage.BucketArgs;
import com.pulumi.gcp.storage.BucketObject;
import com.pulumi.gcp.storage.BucketObjectArgs;
import com.pulumi.gcp.secretmanager.Secret;
import com.pulumi.gcp.secretmanager.SecretArgs;
import com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;
import com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;
import com.pulumi.gcp.secretmanager.SecretVersion;
import com.pulumi.gcp.secretmanager.SecretVersionArgs;
import com.pulumi.gcp.organizations.OrganizationsFunctions;
import com.pulumi.gcp.organizations.inputs.GetProjectArgs;
import com.pulumi.gcp.projects.ServiceIdentity;
import com.pulumi.gcp.projects.ServiceIdentityArgs;
import com.pulumi.gcp.secretmanager.SecretIamMember;
import com.pulumi.gcp.secretmanager.SecretIamMemberArgs;
import com.pulumi.gcp.transcoder.Job;
import com.pulumi.gcp.transcoder.JobArgs;
import com.pulumi.gcp.transcoder.inputs.JobConfigArgs;
import com.pulumi.gcp.transcoder.inputs.JobConfigOutputArgs;
import com.pulumi.asset.FileAsset;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var default_ = new Bucket("default", BucketArgs.builder()
.name("transcoder-job")
.location("US")
.forceDestroy(true)
.uniformBucketLevelAccess(true)
.publicAccessPrevention("enforced")
.build());
var exampleMp4 = new BucketObject("exampleMp4", BucketObjectArgs.builder()
.name("example.mp4")
.source(new FileAsset("./test-fixtures/example.mp4"))
.bucket(default_.name())
.build());
var encryptionKey = new Secret("encryptionKey", SecretArgs.builder()
.secretId("transcoder-encryption-key")
.replication(SecretReplicationArgs.builder()
.auto()
.build())
.build());
var encryptionKeySecretVersion = new SecretVersion("encryptionKeySecretVersion", SecretVersionArgs.builder()
.secret(encryptionKey.name())
.secretData("4A67F2C1B8E93A4F6D3E7890A1BC23DF")
.build());
final var project = OrganizationsFunctions.getProject();
// this is required to allow the transcoder service identity to access the secret
var transcoder = new ServiceIdentity("transcoder", ServiceIdentityArgs.builder()
.project(project.applyValue(getProjectResult -> getProjectResult.projectId()))
.service("transcoder.googleapis.com")
.build());
var transcoderEncryptionKeyAccessor = new SecretIamMember("transcoderEncryptionKeyAccessor", SecretIamMemberArgs.builder()
.secretId(encryptionKey.secretId())
.project(encryptionKey.project())
.role("roles/secretmanager.secretAccessor")
.member(transcoder.email().applyValue(email -> String.format("serviceAccount:%s", email)))
.build());
var defaultJob = new Job("defaultJob", JobArgs.builder()
.location("us-central1")
.config(JobConfigArgs.builder()
.inputs(JobConfigInputArgs.builder()
.key("input0")
.uri(Output.tuple(default_.name(), exampleMp4.name()).applyValue(values -> {
var defaultName = values.t1;
var exampleMp4Name = values.t2;
return String.format("gs://%s/%s", defaultName,exampleMp4Name);
}))
.build())
.elementaryStreams(
JobConfigElementaryStreamArgs.builder()
.key("es_video")
.videoStream(JobConfigElementaryStreamVideoStreamArgs.builder()
.h264(JobConfigElementaryStreamVideoStreamH264Args.builder()
.profile("main")
.heightPixels(600)
.widthPixels(800)
.bitrateBps(1000000)
.frameRate(60)
.build())
.build())
.build(),
JobConfigElementaryStreamArgs.builder()
.key("es_audio")
.audioStream(JobConfigElementaryStreamAudioStreamArgs.builder()
.codec("aac")
.channelCount(2)
.bitrateBps(160000)
.build())
.build())
.encryptions(
JobConfigEncryptionArgs.builder()
.id("aes-128")
.secretManagerKeySource(JobConfigEncryptionSecretManagerKeySourceArgs.builder()
.secretVersion(encryptionKeySecretVersion.name())
.build())
.drmSystems(JobConfigEncryptionDrmSystemsArgs.builder()
.clearkey()
.build())
.aes128()
.build(),
JobConfigEncryptionArgs.builder()
.id("cenc")
.secretManagerKeySource(JobConfigEncryptionSecretManagerKeySourceArgs.builder()
.secretVersion(encryptionKeySecretVersion.name())
.build())
.drmSystems(JobConfigEncryptionDrmSystemsArgs.builder()
.widevine()
.build())
.mpegCenc(JobConfigEncryptionMpegCencArgs.builder()
.scheme("cenc")
.build())
.build(),
JobConfigEncryptionArgs.builder()
.id("cbcs")
.secretManagerKeySource(JobConfigEncryptionSecretManagerKeySourceArgs.builder()
.secretVersion(encryptionKeySecretVersion.name())
.build())
.drmSystems(JobConfigEncryptionDrmSystemsArgs.builder()
.widevine()
.build())
.mpegCenc(JobConfigEncryptionMpegCencArgs.builder()
.scheme("cbcs")
.build())
.build())
.muxStreams(
JobConfigMuxStreamArgs.builder()
.key("ts_aes128")
.container("ts")
.elementaryStreams(
"es_video",
"es_audio")
.segmentSettings(JobConfigMuxStreamSegmentSettingsArgs.builder()
.segmentDuration("6s")
.build())
.encryptionId("aes-128")
.build(),
JobConfigMuxStreamArgs.builder()
.key("fmp4_cenc_video")
.container("fmp4")
.elementaryStreams("es_video")
.segmentSettings(JobConfigMuxStreamSegmentSettingsArgs.builder()
.segmentDuration("6s")
.build())
.encryptionId("cenc")
.build(),
JobConfigMuxStreamArgs.builder()
.key("fmp4_cenc_audio")
.container("fmp4")
.elementaryStreams("es_audio")
.segmentSettings(JobConfigMuxStreamSegmentSettingsArgs.builder()
.segmentDuration("6s")
.build())
.encryptionId("cenc")
.build(),
JobConfigMuxStreamArgs.builder()
.key("fmp4_cbcs_video")
.container("fmp4")
.elementaryStreams("es_video")
.segmentSettings(JobConfigMuxStreamSegmentSettingsArgs.builder()
.segmentDuration("6s")
.build())
.encryptionId("cbcs")
.build(),
JobConfigMuxStreamArgs.builder()
.key("fmp4_cbcs_audio")
.container("fmp4")
.elementaryStreams("es_audio")
.segmentSettings(JobConfigMuxStreamSegmentSettingsArgs.builder()
.segmentDuration("6s")
.build())
.encryptionId("cbcs")
.build())
.manifests(
JobConfigManifestArgs.builder()
.fileName("manifest_aes128.m3u8")
.type("HLS")
.muxStreams("ts_aes128")
.build(),
JobConfigManifestArgs.builder()
.fileName("manifest_cenc.mpd")
.type("DASH")
.muxStreams(
"fmp4_cenc_video",
"fmp4_cenc_audio")
.build(),
JobConfigManifestArgs.builder()
.fileName("manifest_cbcs.mpd")
.type("DASH")
.muxStreams(
"fmp4_cbcs_video",
"fmp4_cbcs_audio")
.build())
.output(JobConfigOutputArgs.builder()
.uri(default_.name().applyValue(name -> String.format("gs://%s/outputs/", name)))
.build())
.build())
.labels(Map.of("label", "key"))
.build());
}
}
resources:
default:
type: gcp:storage:Bucket
properties:
name: transcoder-job
location: US
forceDestroy: true
uniformBucketLevelAccess: true
publicAccessPrevention: enforced
exampleMp4:
type: gcp:storage:BucketObject
name: example_mp4
properties:
name: example.mp4
source:
fn::FileAsset: ./test-fixtures/example.mp4
bucket: ${default.name}
encryptionKey:
type: gcp:secretmanager:Secret
name: encryption_key
properties:
secretId: transcoder-encryption-key
replication:
auto: {}
encryptionKeySecretVersion:
type: gcp:secretmanager:SecretVersion
name: encryption_key
properties:
secret: ${encryptionKey.name}
secretData: 4A67F2C1B8E93A4F6D3E7890A1BC23DF
# this is required to allow the transcoder service identity to access the secret
transcoder:
type: gcp:projects:ServiceIdentity
properties:
project: ${project.projectId}
service: transcoder.googleapis.com
transcoderEncryptionKeyAccessor:
type: gcp:secretmanager:SecretIamMember
name: transcoder_encryption_key_accessor
properties:
secretId: ${encryptionKey.secretId}
project: ${encryptionKey.project}
role: roles/secretmanager.secretAccessor
member: serviceAccount:${transcoder.email}
defaultJob:
type: gcp:transcoder:Job
name: default
properties:
location: us-central1
config:
inputs:
- key: input0
uri: gs://${default.name}/${exampleMp4.name}
elementaryStreams:
- key: es_video
videoStream:
h264:
profile: main
heightPixels: 600
widthPixels: 800
bitrateBps: 1e+06
frameRate: 60
- key: es_audio
audioStream:
codec: aac
channelCount: 2
bitrateBps: 160000
encryptions:
- id: aes-128
secretManagerKeySource:
secretVersion: ${encryptionKeySecretVersion.name}
drmSystems:
clearkey: {}
aes128: {}
- id: cenc
secretManagerKeySource:
secretVersion: ${encryptionKeySecretVersion.name}
drmSystems:
widevine: {}
mpegCenc:
scheme: cenc
- id: cbcs
secretManagerKeySource:
secretVersion: ${encryptionKeySecretVersion.name}
drmSystems:
widevine: {}
mpegCenc:
scheme: cbcs
muxStreams:
- key: ts_aes128
container: ts
elementaryStreams:
- es_video
- es_audio
segmentSettings:
segmentDuration: 6s
encryptionId: aes-128
- key: fmp4_cenc_video
container: fmp4
elementaryStreams:
- es_video
segmentSettings:
segmentDuration: 6s
encryptionId: cenc
- key: fmp4_cenc_audio
container: fmp4
elementaryStreams:
- es_audio
segmentSettings:
segmentDuration: 6s
encryptionId: cenc
- key: fmp4_cbcs_video
container: fmp4
elementaryStreams:
- es_video
segmentSettings:
segmentDuration: 6s
encryptionId: cbcs
- key: fmp4_cbcs_audio
container: fmp4
elementaryStreams:
- es_audio
segmentSettings:
segmentDuration: 6s
encryptionId: cbcs
manifests:
- fileName: manifest_aes128.m3u8
type: HLS
muxStreams:
- ts_aes128
- fileName: manifest_cenc.mpd
type: DASH
muxStreams:
- fmp4_cenc_video
- fmp4_cenc_audio
- fileName: manifest_cbcs.mpd
type: DASH
muxStreams:
- fmp4_cbcs_video
- fmp4_cbcs_audio
output:
uri: gs://${default.name}/outputs/
labels:
label: key
variables:
project:
fn::invoke:
Function: gcp:organizations:getProject
Arguments: {}
Transcoder Job Overlays
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const _default = new gcp.storage.Bucket("default", {
name: "transcoder-job",
location: "US",
forceDestroy: true,
uniformBucketLevelAccess: true,
publicAccessPrevention: "enforced",
});
const exampleMp4 = new gcp.storage.BucketObject("example_mp4", {
name: "example.mp4",
source: new pulumi.asset.FileAsset("./test-fixtures/example.mp4"),
bucket: _default.name,
});
const overlayPng = new gcp.storage.BucketObject("overlay_png", {
name: "overlay.png",
source: new pulumi.asset.FileAsset("./test-fixtures/overlay.png"),
bucket: _default.name,
});
const defaultJob = new gcp.transcoder.Job("default", {
location: "us-central1",
config: {
inputs: [{
key: "input0",
uri: pulumi.interpolate`gs://${_default.name}/${exampleMp4.name}`,
}],
editLists: [{
key: "atom0",
inputs: ["input0"],
startTimeOffset: "0s",
}],
adBreaks: [{
startTimeOffset: "3.500s",
}],
overlays: [{
animations: [{
animationFade: {
fadeType: "FADE_IN",
startTimeOffset: "1.500s",
endTimeOffset: "3.500s",
xy: {
x: 1,
y: 0.5,
},
},
}],
image: {
uri: pulumi.interpolate`gs://${_default.name}/${overlayPng.name}`,
},
}],
elementaryStreams: [
{
key: "video-stream0",
videoStream: {
h264: {
widthPixels: 640,
heightPixels: 360,
bitrateBps: 550000,
frameRate: 60,
pixelFormat: "yuv420p",
rateControlMode: "vbr",
crfLevel: 21,
gopDuration: "3s",
vbvSizeBits: 550000,
vbvFullnessBits: 495000,
entropyCoder: "cabac",
profile: "high",
preset: "veryfast",
},
},
},
{
key: "video-stream1",
videoStream: {
h264: {
widthPixels: 1280,
heightPixels: 720,
bitrateBps: 550000,
frameRate: 60,
pixelFormat: "yuv420p",
rateControlMode: "vbr",
crfLevel: 21,
gopDuration: "3s",
vbvSizeBits: 2500000,
vbvFullnessBits: 2250000,
entropyCoder: "cabac",
profile: "high",
preset: "veryfast",
},
},
},
{
key: "audio-stream0",
audioStream: {
codec: "aac",
bitrateBps: 64000,
channelCount: 2,
channelLayouts: [
"fl",
"fr",
],
sampleRateHertz: 48000,
},
},
],
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: {
uri: pulumi.interpolate`gs://${_default.name}/outputs/`,
},
},
labels: {
label: "key",
},
});
import pulumi
import pulumi_gcp as gcp
default = gcp.storage.Bucket("default",
name="transcoder-job",
location="US",
force_destroy=True,
uniform_bucket_level_access=True,
public_access_prevention="enforced")
example_mp4 = gcp.storage.BucketObject("example_mp4",
name="example.mp4",
source=pulumi.FileAsset("./test-fixtures/example.mp4"),
bucket=default.name)
overlay_png = gcp.storage.BucketObject("overlay_png",
name="overlay.png",
source=pulumi.FileAsset("./test-fixtures/overlay.png"),
bucket=default.name)
default_job = gcp.transcoder.Job("default",
location="us-central1",
config={
"inputs": [{
"key": "input0",
"uri": pulumi.Output.all(
defaultName=default.name,
exampleMp4Name=example_mp4.name
).apply(lambda resolved_outputs: f"gs://{resolved_outputs['defaultName']}/{resolved_outputs['exampleMp4Name']}")
,
}],
"edit_lists": [{
"key": "atom0",
"inputs": ["input0"],
"start_time_offset": "0s",
}],
"ad_breaks": [{
"start_time_offset": "3.500s",
}],
"overlays": [{
"animations": [{
"animation_fade": {
"fade_type": "FADE_IN",
"start_time_offset": "1.500s",
"end_time_offset": "3.500s",
"xy": {
"x": 1,
"y": 0.5,
},
},
}],
"image": {
"uri": pulumi.Output.all(
defaultName=default.name,
overlayPngName=overlay_png.name
).apply(lambda resolved_outputs: f"gs://{resolved_outputs['defaultName']}/{resolved_outputs['overlayPngName']}")
,
},
}],
"elementary_streams": [
{
"key": "video-stream0",
"video_stream": {
"h264": {
"width_pixels": 640,
"height_pixels": 360,
"bitrate_bps": 550000,
"frame_rate": 60,
"pixel_format": "yuv420p",
"rate_control_mode": "vbr",
"crf_level": 21,
"gop_duration": "3s",
"vbv_size_bits": 550000,
"vbv_fullness_bits": 495000,
"entropy_coder": "cabac",
"profile": "high",
"preset": "veryfast",
},
},
},
{
"key": "video-stream1",
"video_stream": {
"h264": {
"width_pixels": 1280,
"height_pixels": 720,
"bitrate_bps": 550000,
"frame_rate": 60,
"pixel_format": "yuv420p",
"rate_control_mode": "vbr",
"crf_level": 21,
"gop_duration": "3s",
"vbv_size_bits": 2500000,
"vbv_fullness_bits": 2250000,
"entropy_coder": "cabac",
"profile": "high",
"preset": "veryfast",
},
},
},
{
"key": "audio-stream0",
"audio_stream": {
"codec": "aac",
"bitrate_bps": 64000,
"channel_count": 2,
"channel_layouts": [
"fl",
"fr",
],
"sample_rate_hertz": 48000,
},
},
],
"mux_streams": [
{
"key": "sd",
"file_name": "sd.mp4",
"container": "mp4",
"elementary_streams": [
"video-stream0",
"audio-stream0",
],
},
{
"key": "hd",
"file_name": "hd.mp4",
"container": "mp4",
"elementary_streams": [
"video-stream1",
"audio-stream0",
],
},
],
"output": {
"uri": default.name.apply(lambda name: f"gs://{name}/outputs/"),
},
},
labels={
"label": "key",
})
package main
import (
"fmt"
"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage"
"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/transcoder"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := storage.NewBucket(ctx, "default", &storage.BucketArgs{
Name: pulumi.String("transcoder-job"),
Location: pulumi.String("US"),
ForceDestroy: pulumi.Bool(true),
UniformBucketLevelAccess: pulumi.Bool(true),
PublicAccessPrevention: pulumi.String("enforced"),
})
if err != nil {
return err
}
exampleMp4, err := storage.NewBucketObject(ctx, "example_mp4", &storage.BucketObjectArgs{
Name: pulumi.String("example.mp4"),
Source: pulumi.NewFileAsset("./test-fixtures/example.mp4"),
Bucket: _default.Name,
})
if err != nil {
return err
}
overlayPng, err := storage.NewBucketObject(ctx, "overlay_png", &storage.BucketObjectArgs{
Name: pulumi.String("overlay.png"),
Source: pulumi.NewFileAsset("./test-fixtures/overlay.png"),
Bucket: _default.Name,
})
if err != nil {
return err
}
_, err = transcoder.NewJob(ctx, "default", &transcoder.JobArgs{
Location: pulumi.String("us-central1"),
Config: &transcoder.JobConfigArgs{
Inputs: transcoder.JobConfigInputTypeArray{
&transcoder.JobConfigInputTypeArgs{
Key: pulumi.String("input0"),
Uri: pulumi.All(_default.Name, exampleMp4.Name).ApplyT(func(_args []interface{}) (string, error) {
defaultName := _args[0].(string)
exampleMp4Name := _args[1].(string)
return fmt.Sprintf("gs://%v/%v", defaultName, exampleMp4Name), nil
}).(pulumi.StringOutput),
},
},
EditLists: transcoder.JobConfigEditListArray{
&transcoder.JobConfigEditListArgs{
Key: pulumi.String("atom0"),
Inputs: pulumi.StringArray{
pulumi.String("input0"),
},
StartTimeOffset: pulumi.String("0s"),
},
},
AdBreaks: transcoder.JobConfigAdBreakArray{
&transcoder.JobConfigAdBreakArgs{
StartTimeOffset: pulumi.String("3.500s"),
},
},
Overlays: transcoder.JobConfigOverlayArray{
&transcoder.JobConfigOverlayArgs{
Animations: transcoder.JobConfigOverlayAnimationArray{
&transcoder.JobConfigOverlayAnimationArgs{
AnimationFade: &transcoder.JobConfigOverlayAnimationAnimationFadeArgs{
FadeType: pulumi.String("FADE_IN"),
StartTimeOffset: pulumi.String("1.500s"),
EndTimeOffset: pulumi.String("3.500s"),
Xy: &transcoder.JobConfigOverlayAnimationAnimationFadeXyArgs{
X: pulumi.Float64(1),
Y: pulumi.Float64(0.5),
},
},
},
},
Image: &transcoder.JobConfigOverlayImageArgs{
Uri: pulumi.All(_default.Name, overlayPng.Name).ApplyT(func(_args []interface{}) (string, error) {
defaultName := _args[0].(string)
overlayPngName := _args[1].(string)
return fmt.Sprintf("gs://%v/%v", defaultName, overlayPngName), nil
}).(pulumi.StringOutput),
},
},
},
ElementaryStreams: transcoder.JobConfigElementaryStreamArray{
&transcoder.JobConfigElementaryStreamArgs{
Key: pulumi.String("video-stream0"),
VideoStream: &transcoder.JobConfigElementaryStreamVideoStreamArgs{
H264: &transcoder.JobConfigElementaryStreamVideoStreamH264Args{
WidthPixels: pulumi.Int(640),
HeightPixels: pulumi.Int(360),
BitrateBps: pulumi.Int(550000),
FrameRate: pulumi.Int(60),
PixelFormat: pulumi.String("yuv420p"),
RateControlMode: pulumi.String("vbr"),
CrfLevel: pulumi.Int(21),
GopDuration: pulumi.String("3s"),
VbvSizeBits: pulumi.Int(550000),
VbvFullnessBits: pulumi.Int(495000),
EntropyCoder: pulumi.String("cabac"),
Profile: pulumi.String("high"),
Preset: pulumi.String("veryfast"),
},
},
},
&transcoder.JobConfigElementaryStreamArgs{
Key: pulumi.String("video-stream1"),
VideoStream: &transcoder.JobConfigElementaryStreamVideoStreamArgs{
H264: &transcoder.JobConfigElementaryStreamVideoStreamH264Args{
WidthPixels: pulumi.Int(1280),
HeightPixels: pulumi.Int(720),
BitrateBps: pulumi.Int(550000),
FrameRate: pulumi.Int(60),
PixelFormat: pulumi.String("yuv420p"),
RateControlMode: pulumi.String("vbr"),
CrfLevel: pulumi.Int(21),
GopDuration: pulumi.String("3s"),
VbvSizeBits: pulumi.Int(2500000),
VbvFullnessBits: pulumi.Int(2250000),
EntropyCoder: pulumi.String("cabac"),
Profile: pulumi.String("high"),
Preset: pulumi.String("veryfast"),
},
},
},
&transcoder.JobConfigElementaryStreamArgs{
Key: pulumi.String("audio-stream0"),
AudioStream: &transcoder.JobConfigElementaryStreamAudioStreamArgs{
Codec: pulumi.String("aac"),
BitrateBps: pulumi.Int(64000),
ChannelCount: pulumi.Int(2),
ChannelLayouts: pulumi.StringArray{
pulumi.String("fl"),
pulumi.String("fr"),
},
SampleRateHertz: pulumi.Int(48000),
},
},
},
MuxStreams: transcoder.JobConfigMuxStreamArray{
&transcoder.JobConfigMuxStreamArgs{
Key: pulumi.String("sd"),
FileName: pulumi.String("sd.mp4"),
Container: pulumi.String("mp4"),
ElementaryStreams: pulumi.StringArray{
pulumi.String("video-stream0"),
pulumi.String("audio-stream0"),
},
},
&transcoder.JobConfigMuxStreamArgs{
Key: pulumi.String("hd"),
FileName: pulumi.String("hd.mp4"),
Container: pulumi.String("mp4"),
ElementaryStreams: pulumi.StringArray{
pulumi.String("video-stream1"),
pulumi.String("audio-stream0"),
},
},
},
Output: &transcoder.JobConfigOutputTypeArgs{
Uri: _default.Name.ApplyT(func(name string) (string, error) {
return fmt.Sprintf("gs://%v/outputs/", name), nil
}).(pulumi.StringOutput),
},
},
Labels: pulumi.StringMap{
"label": pulumi.String("key"),
},
})
if err != nil {
return err
}
return nil
})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var @default = new Gcp.Storage.Bucket("default", new()
{
Name = "transcoder-job",
Location = "US",
ForceDestroy = true,
UniformBucketLevelAccess = true,
PublicAccessPrevention = "enforced",
});
var exampleMp4 = new Gcp.Storage.BucketObject("example_mp4", new()
{
Name = "example.mp4",
Source = new FileAsset("./test-fixtures/example.mp4"),
Bucket = @default.Name,
});
var overlayPng = new Gcp.Storage.BucketObject("overlay_png", new()
{
Name = "overlay.png",
Source = new FileAsset("./test-fixtures/overlay.png"),
Bucket = @default.Name,
});
var defaultJob = new Gcp.Transcoder.Job("default", new()
{
Location = "us-central1",
Config = new Gcp.Transcoder.Inputs.JobConfigArgs
{
Inputs = new[]
{
new Gcp.Transcoder.Inputs.JobConfigInputArgs
{
Key = "input0",
Uri = Output.Tuple(@default.Name, exampleMp4.Name).Apply(values =>
{
var defaultName = values.Item1;
var exampleMp4Name = values.Item2;
return $"gs://{defaultName}/{exampleMp4Name}";
}),
},
},
EditLists = new[]
{
new Gcp.Transcoder.Inputs.JobConfigEditListArgs
{
Key = "atom0",
Inputs = new[]
{
"input0",
},
StartTimeOffset = "0s",
},
},
AdBreaks = new[]
{
new Gcp.Transcoder.Inputs.JobConfigAdBreakArgs
{
StartTimeOffset = "3.500s",
},
},
Overlays = new[]
{
new Gcp.Transcoder.Inputs.JobConfigOverlayArgs
{
Animations = new[]
{
new Gcp.Transcoder.Inputs.JobConfigOverlayAnimationArgs
{
AnimationFade = new Gcp.Transcoder.Inputs.JobConfigOverlayAnimationAnimationFadeArgs
{
FadeType = "FADE_IN",
StartTimeOffset = "1.500s",
EndTimeOffset = "3.500s",
Xy = new Gcp.Transcoder.Inputs.JobConfigOverlayAnimationAnimationFadeXyArgs
{
X = 1,
Y = 0.5,
},
},
},
},
Image = new Gcp.Transcoder.Inputs.JobConfigOverlayImageArgs
{
Uri = Output.Tuple(@default.Name, overlayPng.Name).Apply(values =>
{
var defaultName = values.Item1;
var overlayPngName = values.Item2;
return $"gs://{defaultName}/{overlayPngName}";
}),
},
},
},
ElementaryStreams = new[]
{
new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs
{
Key = "video-stream0",
VideoStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamArgs
{
H264 = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamH264Args
{
WidthPixels = 640,
HeightPixels = 360,
BitrateBps = 550000,
FrameRate = 60,
PixelFormat = "yuv420p",
RateControlMode = "vbr",
CrfLevel = 21,
GopDuration = "3s",
VbvSizeBits = 550000,
VbvFullnessBits = 495000,
EntropyCoder = "cabac",
Profile = "high",
Preset = "veryfast",
},
},
},
new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs
{
Key = "video-stream1",
VideoStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamArgs
{
H264 = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamH264Args
{
WidthPixels = 1280,
HeightPixels = 720,
BitrateBps = 550000,
FrameRate = 60,
PixelFormat = "yuv420p",
RateControlMode = "vbr",
CrfLevel = 21,
GopDuration = "3s",
VbvSizeBits = 2500000,
VbvFullnessBits = 2250000,
EntropyCoder = "cabac",
Profile = "high",
Preset = "veryfast",
},
},
},
new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs
{
Key = "audio-stream0",
AudioStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamAudioStreamArgs
{
Codec = "aac",
BitrateBps = 64000,
ChannelCount = 2,
ChannelLayouts = new[]
{
"fl",
"fr",
},
SampleRateHertz = 48000,
},
},
},
MuxStreams = new[]
{
new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs
{
Key = "sd",
FileName = "sd.mp4",
Container = "mp4",
ElementaryStreams = new[]
{
"video-stream0",
"audio-stream0",
},
},
new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs
{
Key = "hd",
FileName = "hd.mp4",
Container = "mp4",
ElementaryStreams = new[]
{
"video-stream1",
"audio-stream0",
},
},
},
Output = new Gcp.Transcoder.Inputs.JobConfigOutputArgs
{
Uri = @default.Name.Apply(name => $"gs://{name}/outputs/"),
},
},
Labels =
{
{ "label", "key" },
},
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.storage.Bucket;
import com.pulumi.gcp.storage.BucketArgs;
import com.pulumi.gcp.storage.BucketObject;
import com.pulumi.gcp.storage.BucketObjectArgs;
import com.pulumi.gcp.transcoder.Job;
import com.pulumi.gcp.transcoder.JobArgs;
import com.pulumi.gcp.transcoder.inputs.JobConfigArgs;
import com.pulumi.gcp.transcoder.inputs.JobConfigOutputArgs;
import com.pulumi.asset.FileAsset;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var default_ = new Bucket("default", BucketArgs.builder()
.name("transcoder-job")
.location("US")
.forceDestroy(true)
.uniformBucketLevelAccess(true)
.publicAccessPrevention("enforced")
.build());
var exampleMp4 = new BucketObject("exampleMp4", BucketObjectArgs.builder()
.name("example.mp4")
.source(new FileAsset("./test-fixtures/example.mp4"))
.bucket(default_.name())
.build());
var overlayPng = new BucketObject("overlayPng", BucketObjectArgs.builder()
.name("overlay.png")
.source(new FileAsset("./test-fixtures/overlay.png"))
.bucket(default_.name())
.build());
var defaultJob = new Job("defaultJob", JobArgs.builder()
.location("us-central1")
.config(JobConfigArgs.builder()
.inputs(JobConfigInputArgs.builder()
.key("input0")
.uri(Output.tuple(default_.name(), exampleMp4.name()).applyValue(values -> {
var defaultName = values.t1;
var exampleMp4Name = values.t2;
return String.format("gs://%s/%s", defaultName,exampleMp4Name);
}))
.build())
.editLists(JobConfigEditListArgs.builder()
.key("atom0")
.inputs("input0")
.startTimeOffset("0s")
.build())
.adBreaks(JobConfigAdBreakArgs.builder()
.startTimeOffset("3.500s")
.build())
.overlays(JobConfigOverlayArgs.builder()
.animations(JobConfigOverlayAnimationArgs.builder()
.animationFade(JobConfigOverlayAnimationAnimationFadeArgs.builder()
.fadeType("FADE_IN")
.startTimeOffset("1.500s")
.endTimeOffset("3.500s")
.xy(JobConfigOverlayAnimationAnimationFadeXyArgs.builder()
.x(1)
.y(0.5)
.build())
.build())
.build())
.image(JobConfigOverlayImageArgs.builder()
.uri(Output.tuple(default_.name(), overlayPng.name()).applyValue(values -> {
var defaultName = values.t1;
var overlayPngName = values.t2;
return String.format("gs://%s/%s", defaultName,overlayPngName);
}))
.build())
.build())
.elementaryStreams(
JobConfigElementaryStreamArgs.builder()
.key("video-stream0")
.videoStream(JobConfigElementaryStreamVideoStreamArgs.builder()
.h264(JobConfigElementaryStreamVideoStreamH264Args.builder()
.widthPixels(640)
.heightPixels(360)
.bitrateBps(550000)
.frameRate(60)
.pixelFormat("yuv420p")
.rateControlMode("vbr")
.crfLevel(21)
.gopDuration("3s")
.vbvSizeBits(550000)
.vbvFullnessBits(495000)
.entropyCoder("cabac")
.profile("high")
.preset("veryfast")
.build())
.build())
.build(),
JobConfigElementaryStreamArgs.builder()
.key("video-stream1")
.videoStream(JobConfigElementaryStreamVideoStreamArgs.builder()
.h264(JobConfigElementaryStreamVideoStreamH264Args.builder()
.widthPixels(1280)
.heightPixels(720)
.bitrateBps(550000)
.frameRate(60)
.pixelFormat("yuv420p")
.rateControlMode("vbr")
.crfLevel(21)
.gopDuration("3s")
.vbvSizeBits(2500000)
.vbvFullnessBits(2250000)
.entropyCoder("cabac")
.profile("high")
.preset("veryfast")
.build())
.build())
.build(),
JobConfigElementaryStreamArgs.builder()
.key("audio-stream0")
.audioStream(JobConfigElementaryStreamAudioStreamArgs.builder()
.codec("aac")
.bitrateBps(64000)
.channelCount(2)
.channelLayouts(
"fl",
"fr")
.sampleRateHertz(48000)
.build())
.build())
.muxStreams(
JobConfigMuxStreamArgs.builder()
.key("sd")
.fileName("sd.mp4")
.container("mp4")
.elementaryStreams(
"video-stream0",
"audio-stream0")
.build(),
JobConfigMuxStreamArgs.builder()
.key("hd")
.fileName("hd.mp4")
.container("mp4")
.elementaryStreams(
"video-stream1",
"audio-stream0")
.build())
.output(JobConfigOutputArgs.builder()
.uri(default_.name().applyValue(name -> String.format("gs://%s/outputs/", name)))
.build())
.build())
.labels(Map.of("label", "key"))
.build());
}
}
resources:
default:
type: gcp:storage:Bucket
properties:
name: transcoder-job
location: US
forceDestroy: true
uniformBucketLevelAccess: true
publicAccessPrevention: enforced
exampleMp4:
type: gcp:storage:BucketObject
name: example_mp4
properties:
name: example.mp4
source:
fn::FileAsset: ./test-fixtures/example.mp4
bucket: ${default.name}
overlayPng:
type: gcp:storage:BucketObject
name: overlay_png
properties:
name: overlay.png
source:
fn::FileAsset: ./test-fixtures/overlay.png
bucket: ${default.name}
defaultJob:
type: gcp:transcoder:Job
name: default
properties:
location: us-central1
config:
inputs:
- key: input0
uri: gs://${default.name}/${exampleMp4.name}
editLists:
- key: atom0
inputs:
- input0
startTimeOffset: 0s
adBreaks:
- startTimeOffset: 3.500s
overlays:
- animations:
- animationFade:
fadeType: FADE_IN
startTimeOffset: 1.500s
endTimeOffset: 3.500s
xy:
x: 1
y: 0.5
image:
uri: gs://${default.name}/${overlayPng.name}
elementaryStreams:
- key: video-stream0
videoStream:
h264:
widthPixels: 640
heightPixels: 360
bitrateBps: 550000
frameRate: 60
pixelFormat: yuv420p
rateControlMode: vbr
crfLevel: 21
gopDuration: 3s
vbvSizeBits: 550000
vbvFullnessBits: 495000
entropyCoder: cabac
profile: high
preset: veryfast
- key: video-stream1
videoStream:
h264:
widthPixels: 1280
heightPixels: 720
bitrateBps: 550000
frameRate: 60
pixelFormat: yuv420p
rateControlMode: vbr
crfLevel: 21
gopDuration: 3s
vbvSizeBits: 2.5e+06
vbvFullnessBits: 2.25e+06
entropyCoder: cabac
profile: high
preset: veryfast
- key: audio-stream0
audioStream:
codec: aac
bitrateBps: 64000
channelCount: 2
channelLayouts:
- fl
- fr
sampleRateHertz: 48000
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:
uri: gs://${default.name}/outputs/
labels:
label: key
Transcoder Job Manifests
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const _default = new gcp.storage.Bucket("default", {
name: "transcoder-job",
location: "US",
forceDestroy: true,
uniformBucketLevelAccess: true,
publicAccessPrevention: "enforced",
});
const exampleMp4 = new gcp.storage.BucketObject("example_mp4", {
name: "example.mp4",
source: new pulumi.asset.FileAsset("./test-fixtures/example.mp4"),
bucket: _default.name,
});
const defaultJob = new gcp.transcoder.Job("default", {
location: "us-central1",
config: {
inputs: [{
key: "input0",
uri: pulumi.interpolate`gs://${_default.name}/${exampleMp4.name}`,
}],
editLists: [{
key: "atom0",
startTimeOffset: "0s",
inputs: ["input0"],
}],
adBreaks: [{
startTimeOffset: "3.500s",
}],
elementaryStreams: [
{
key: "video-stream0",
videoStream: {
h264: {
widthPixels: 640,
heightPixels: 360,
bitrateBps: 550000,
frameRate: 60,
pixelFormat: "yuv420p",
rateControlMode: "vbr",
crfLevel: 21,
gopDuration: "3s",
vbvSizeBits: 550000,
vbvFullnessBits: 495000,
entropyCoder: "cabac",
profile: "high",
preset: "veryfast",
},
},
},
{
key: "video-stream1",
videoStream: {
h264: {
widthPixels: 1280,
heightPixels: 720,
bitrateBps: 550000,
frameRate: 60,
pixelFormat: "yuv420p",
rateControlMode: "vbr",
crfLevel: 21,
gopDuration: "3s",
vbvSizeBits: 2500000,
vbvFullnessBits: 2250000,
entropyCoder: "cabac",
profile: "high",
preset: "veryfast",
},
},
},
{
key: "audio-stream0",
audioStream: {
codec: "aac",
bitrateBps: 64000,
channelCount: 2,
channelLayouts: [
"fl",
"fr",
],
sampleRateHertz: 48000,
},
},
],
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: pulumi.interpolate`gs://${_default.name}/outputs/`,
},
},
labels: {
label: "key",
},
});
import pulumi
import pulumi_gcp as gcp
default = gcp.storage.Bucket("default",
name="transcoder-job",
location="US",
force_destroy=True,
uniform_bucket_level_access=True,
public_access_prevention="enforced")
example_mp4 = gcp.storage.BucketObject("example_mp4",
name="example.mp4",
source=pulumi.FileAsset("./test-fixtures/example.mp4"),
bucket=default.name)
default_job = gcp.transcoder.Job("default",
location="us-central1",
config={
"inputs": [{
"key": "input0",
"uri": pulumi.Output.all(
defaultName=default.name,
exampleMp4Name=example_mp4.name
).apply(lambda resolved_outputs: f"gs://{resolved_outputs['defaultName']}/{resolved_outputs['exampleMp4Name']}")
,
}],
"edit_lists": [{
"key": "atom0",
"start_time_offset": "0s",
"inputs": ["input0"],
}],
"ad_breaks": [{
"start_time_offset": "3.500s",
}],
"elementary_streams": [
{
"key": "video-stream0",
"video_stream": {
"h264": {
"width_pixels": 640,
"height_pixels": 360,
"bitrate_bps": 550000,
"frame_rate": 60,
"pixel_format": "yuv420p",
"rate_control_mode": "vbr",
"crf_level": 21,
"gop_duration": "3s",
"vbv_size_bits": 550000,
"vbv_fullness_bits": 495000,
"entropy_coder": "cabac",
"profile": "high",
"preset": "veryfast",
},
},
},
{
"key": "video-stream1",
"video_stream": {
"h264": {
"width_pixels": 1280,
"height_pixels": 720,
"bitrate_bps": 550000,
"frame_rate": 60,
"pixel_format": "yuv420p",
"rate_control_mode": "vbr",
"crf_level": 21,
"gop_duration": "3s",
"vbv_size_bits": 2500000,
"vbv_fullness_bits": 2250000,
"entropy_coder": "cabac",
"profile": "high",
"preset": "veryfast",
},
},
},
{
"key": "audio-stream0",
"audio_stream": {
"codec": "aac",
"bitrate_bps": 64000,
"channel_count": 2,
"channel_layouts": [
"fl",
"fr",
],
"sample_rate_hertz": 48000,
},
},
],
"mux_streams": [
{
"key": "sd",
"file_name": "sd.mp4",
"container": "mp4",
"elementary_streams": [
"video-stream0",
"audio-stream0",
],
},
{
"key": "hd",
"file_name": "hd.mp4",
"container": "mp4",
"elementary_streams": [
"video-stream1",
"audio-stream0",
],
},
{
"key": "media-sd",
"file_name": "media-sd.ts",
"container": "ts",
"elementary_streams": [
"video-stream0",
"audio-stream0",
],
},
{
"key": "media-hd",
"file_name": "media-hd.ts",
"container": "ts",
"elementary_streams": [
"video-stream1",
"audio-stream0",
],
},
{
"key": "video-only-sd",
"file_name": "video-only-sd.m4s",
"container": "fmp4",
"elementary_streams": ["video-stream0"],
},
{
"key": "video-only-hd",
"file_name": "video-only-hd.m4s",
"container": "fmp4",
"elementary_streams": ["video-stream1"],
},
{
"key": "audio-only",
"file_name": "audio-only.m4s",
"container": "fmp4",
"elementary_streams": ["audio-stream0"],
},
],
"manifests": [
{
"file_name": "manifest.m3u8",
"type": "HLS",
"mux_streams": [
"media-sd",
"media-hd",
],
},
{
"file_name": "manifest.mpd",
"type": "DASH",
"mux_streams": [
"video-only-sd",
"video-only-hd",
"audio-only",
],
},
],
"output": {
"uri": default.name.apply(lambda name: f"gs://{name}/outputs/"),
},
},
labels={
"label": "key",
})
package main
import (
"fmt"
"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage"
"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/transcoder"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := storage.NewBucket(ctx, "default", &storage.BucketArgs{
Name: pulumi.String("transcoder-job"),
Location: pulumi.String("US"),
ForceDestroy: pulumi.Bool(true),
UniformBucketLevelAccess: pulumi.Bool(true),
PublicAccessPrevention: pulumi.String("enforced"),
})
if err != nil {
return err
}
exampleMp4, err := storage.NewBucketObject(ctx, "example_mp4", &storage.BucketObjectArgs{
Name: pulumi.String("example.mp4"),
Source: pulumi.NewFileAsset("./test-fixtures/example.mp4"),
Bucket: _default.Name,
})
if err != nil {
return err
}
_, err = transcoder.NewJob(ctx, "default", &transcoder.JobArgs{
Location: pulumi.String("us-central1"),
Config: &transcoder.JobConfigArgs{
Inputs: transcoder.JobConfigInputTypeArray{
&transcoder.JobConfigInputTypeArgs{
Key: pulumi.String("input0"),
Uri: pulumi.All(_default.Name, exampleMp4.Name).ApplyT(func(_args []interface{}) (string, error) {
defaultName := _args[0].(string)
exampleMp4Name := _args[1].(string)
return fmt.Sprintf("gs://%v/%v", defaultName, exampleMp4Name), nil
}).(pulumi.StringOutput),
},
},
EditLists: transcoder.JobConfigEditListArray{
&transcoder.JobConfigEditListArgs{
Key: pulumi.String("atom0"),
StartTimeOffset: pulumi.String("0s"),
Inputs: pulumi.StringArray{
pulumi.String("input0"),
},
},
},
AdBreaks: transcoder.JobConfigAdBreakArray{
&transcoder.JobConfigAdBreakArgs{
StartTimeOffset: pulumi.String("3.500s"),
},
},
ElementaryStreams: transcoder.JobConfigElementaryStreamArray{
&transcoder.JobConfigElementaryStreamArgs{
Key: pulumi.String("video-stream0"),
VideoStream: &transcoder.JobConfigElementaryStreamVideoStreamArgs{
H264: &transcoder.JobConfigElementaryStreamVideoStreamH264Args{
WidthPixels: pulumi.Int(640),
HeightPixels: pulumi.Int(360),
BitrateBps: pulumi.Int(550000),
FrameRate: pulumi.Int(60),
PixelFormat: pulumi.String("yuv420p"),
RateControlMode: pulumi.String("vbr"),
CrfLevel: pulumi.Int(21),
GopDuration: pulumi.String("3s"),
VbvSizeBits: pulumi.Int(550000),
VbvFullnessBits: pulumi.Int(495000),
EntropyCoder: pulumi.String("cabac"),
Profile: pulumi.String("high"),
Preset: pulumi.String("veryfast"),
},
},
},
&transcoder.JobConfigElementaryStreamArgs{
Key: pulumi.String("video-stream1"),
VideoStream: &transcoder.JobConfigElementaryStreamVideoStreamArgs{
H264: &transcoder.JobConfigElementaryStreamVideoStreamH264Args{
WidthPixels: pulumi.Int(1280),
HeightPixels: pulumi.Int(720),
BitrateBps: pulumi.Int(550000),
FrameRate: pulumi.Int(60),
PixelFormat: pulumi.String("yuv420p"),
RateControlMode: pulumi.String("vbr"),
CrfLevel: pulumi.Int(21),
GopDuration: pulumi.String("3s"),
VbvSizeBits: pulumi.Int(2500000),
VbvFullnessBits: pulumi.Int(2250000),
EntropyCoder: pulumi.String("cabac"),
Profile: pulumi.String("high"),
Preset: pulumi.String("veryfast"),
},
},
},
&transcoder.JobConfigElementaryStreamArgs{
Key: pulumi.String("audio-stream0"),
AudioStream: &transcoder.JobConfigElementaryStreamAudioStreamArgs{
Codec: pulumi.String("aac"),
BitrateBps: pulumi.Int(64000),
ChannelCount: pulumi.Int(2),
ChannelLayouts: pulumi.StringArray{
pulumi.String("fl"),
pulumi.String("fr"),
},
SampleRateHertz: pulumi.Int(48000),
},
},
},
MuxStreams: transcoder.JobConfigMuxStreamArray{
&transcoder.JobConfigMuxStreamArgs{
Key: pulumi.String("sd"),
FileName: pulumi.String("sd.mp4"),
Container: pulumi.String("mp4"),
ElementaryStreams: pulumi.StringArray{
pulumi.String("video-stream0"),
pulumi.String("audio-stream0"),
},
},
&transcoder.JobConfigMuxStreamArgs{
Key: pulumi.String("hd"),
FileName: pulumi.String("hd.mp4"),
Container: pulumi.String("mp4"),
ElementaryStreams: pulumi.StringArray{
pulumi.String("video-stream1"),
pulumi.String("audio-stream0"),
},
},
&transcoder.JobConfigMuxStreamArgs{
Key: pulumi.String("media-sd"),
FileName: pulumi.String("media-sd.ts"),
Container: pulumi.String("ts"),
ElementaryStreams: pulumi.StringArray{
pulumi.String("video-stream0"),
pulumi.String("audio-stream0"),
},
},
&transcoder.JobConfigMuxStreamArgs{
Key: pulumi.String("media-hd"),
FileName: pulumi.String("media-hd.ts"),
Container: pulumi.String("ts"),
ElementaryStreams: pulumi.StringArray{
pulumi.String("video-stream1"),
pulumi.String("audio-stream0"),
},
},
&transcoder.JobConfigMuxStreamArgs{
Key: pulumi.String("video-only-sd"),
FileName: pulumi.String("video-only-sd.m4s"),
Container: pulumi.String("fmp4"),
ElementaryStreams: pulumi.StringArray{
pulumi.String("video-stream0"),
},
},
&transcoder.JobConfigMuxStreamArgs{
Key: pulumi.String("video-only-hd"),
FileName: pulumi.String("video-only-hd.m4s"),
Container: pulumi.String("fmp4"),
ElementaryStreams: pulumi.StringArray{
pulumi.String("video-stream1"),
},
},
&transcoder.JobConfigMuxStreamArgs{
Key: pulumi.String("audio-only"),
FileName: pulumi.String("audio-only.m4s"),
Container: pulumi.String("fmp4"),
ElementaryStreams: pulumi.StringArray{
pulumi.String("audio-stream0"),
},
},
},
Manifests: transcoder.JobConfigManifestArray{
&transcoder.JobConfigManifestArgs{
FileName: pulumi.String("manifest.m3u8"),
Type: pulumi.String("HLS"),
MuxStreams: pulumi.StringArray{
pulumi.String("media-sd"),
pulumi.String("media-hd"),
},
},
&transcoder.JobConfigManifestArgs{
FileName: pulumi.String("manifest.mpd"),
Type: pulumi.String("DASH"),
MuxStreams: pulumi.StringArray{
pulumi.String("video-only-sd"),
pulumi.String("video-only-hd"),
pulumi.String("audio-only"),
},
},
},
Output: &transcoder.JobConfigOutputTypeArgs{
Uri: _default.Name.ApplyT(func(name string) (string, error) {
return fmt.Sprintf("gs://%v/outputs/", name), nil
}).(pulumi.StringOutput),
},
},
Labels: pulumi.StringMap{
"label": pulumi.String("key"),
},
})
if err != nil {
return err
}
return nil
})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var @default = new Gcp.Storage.Bucket("default", new()
{
Name = "transcoder-job",
Location = "US",
ForceDestroy = true,
UniformBucketLevelAccess = true,
PublicAccessPrevention = "enforced",
});
var exampleMp4 = new Gcp.Storage.BucketObject("example_mp4", new()
{
Name = "example.mp4",
Source = new FileAsset("./test-fixtures/example.mp4"),
Bucket = @default.Name,
});
var defaultJob = new Gcp.Transcoder.Job("default", new()
{
Location = "us-central1",
Config = new Gcp.Transcoder.Inputs.JobConfigArgs
{
Inputs = new[]
{
new Gcp.Transcoder.Inputs.JobConfigInputArgs
{
Key = "input0",
Uri = Output.Tuple(@default.Name, exampleMp4.Name).Apply(values =>
{
var defaultName = values.Item1;
var exampleMp4Name = values.Item2;
return $"gs://{defaultName}/{exampleMp4Name}";
}),
},
},
EditLists = new[]
{
new Gcp.Transcoder.Inputs.JobConfigEditListArgs
{
Key = "atom0",
StartTimeOffset = "0s",
Inputs = new[]
{
"input0",
},
},
},
AdBreaks = new[]
{
new Gcp.Transcoder.Inputs.JobConfigAdBreakArgs
{
StartTimeOffset = "3.500s",
},
},
ElementaryStreams = new[]
{
new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs
{
Key = "video-stream0",
VideoStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamArgs
{
H264 = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamH264Args
{
WidthPixels = 640,
HeightPixels = 360,
BitrateBps = 550000,
FrameRate = 60,
PixelFormat = "yuv420p",
RateControlMode = "vbr",
CrfLevel = 21,
GopDuration = "3s",
VbvSizeBits = 550000,
VbvFullnessBits = 495000,
EntropyCoder = "cabac",
Profile = "high",
Preset = "veryfast",
},
},
},
new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs
{
Key = "video-stream1",
VideoStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamArgs
{
H264 = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamH264Args
{
WidthPixels = 1280,
HeightPixels = 720,
BitrateBps = 550000,
FrameRate = 60,
PixelFormat = "yuv420p",
RateControlMode = "vbr",
CrfLevel = 21,
GopDuration = "3s",
VbvSizeBits = 2500000,
VbvFullnessBits = 2250000,
EntropyCoder = "cabac",
Profile = "high",
Preset = "veryfast",
},
},
},
new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs
{
Key = "audio-stream0",
AudioStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamAudioStreamArgs
{
Codec = "aac",
BitrateBps = 64000,
ChannelCount = 2,
ChannelLayouts = new[]
{
"fl",
"fr",
},
SampleRateHertz = 48000,
},
},
},
MuxStreams = new[]
{
new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs
{
Key = "sd",
FileName = "sd.mp4",
Container = "mp4",
ElementaryStreams = new[]
{
"video-stream0",
"audio-stream0",
},
},
new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs
{
Key = "hd",
FileName = "hd.mp4",
Container = "mp4",
ElementaryStreams = new[]
{
"video-stream1",
"audio-stream0",
},
},
new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs
{
Key = "media-sd",
FileName = "media-sd.ts",
Container = "ts",
ElementaryStreams = new[]
{
"video-stream0",
"audio-stream0",
},
},
new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs
{
Key = "media-hd",
FileName = "media-hd.ts",
Container = "ts",
ElementaryStreams = new[]
{
"video-stream1",
"audio-stream0",
},
},
new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs
{
Key = "video-only-sd",
FileName = "video-only-sd.m4s",
Container = "fmp4",
ElementaryStreams = new[]
{
"video-stream0",
},
},
new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs
{
Key = "video-only-hd",
FileName = "video-only-hd.m4s",
Container = "fmp4",
ElementaryStreams = new[]
{
"video-stream1",
},
},
new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs
{
Key = "audio-only",
FileName = "audio-only.m4s",
Container = "fmp4",
ElementaryStreams = new[]
{
"audio-stream0",
},
},
},
Manifests = new[]
{
new Gcp.Transcoder.Inputs.JobConfigManifestArgs
{
FileName = "manifest.m3u8",
Type = "HLS",
MuxStreams = new[]
{
"media-sd",
"media-hd",
},
},
new Gcp.Transcoder.Inputs.JobConfigManifestArgs
{
FileName = "manifest.mpd",
Type = "DASH",
MuxStreams = new[]
{
"video-only-sd",
"video-only-hd",
"audio-only",
},
},
},
Output = new Gcp.Transcoder.Inputs.JobConfigOutputArgs
{
Uri = @default.Name.Apply(name => $"gs://{name}/outputs/"),
},
},
Labels =
{
{ "label", "key" },
},
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.storage.Bucket;
import com.pulumi.gcp.storage.BucketArgs;
import com.pulumi.gcp.storage.BucketObject;
import com.pulumi.gcp.storage.BucketObjectArgs;
import com.pulumi.gcp.transcoder.Job;
import com.pulumi.gcp.transcoder.JobArgs;
import com.pulumi.gcp.transcoder.inputs.JobConfigArgs;
import com.pulumi.gcp.transcoder.inputs.JobConfigOutputArgs;
import com.pulumi.asset.FileAsset;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var default_ = new Bucket("default", BucketArgs.builder()
.name("transcoder-job")
.location("US")
.forceDestroy(true)
.uniformBucketLevelAccess(true)
.publicAccessPrevention("enforced")
.build());
var exampleMp4 = new BucketObject("exampleMp4", BucketObjectArgs.builder()
.name("example.mp4")
.source(new FileAsset("./test-fixtures/example.mp4"))
.bucket(default_.name())
.build());
var defaultJob = new Job("defaultJob", JobArgs.builder()
.location("us-central1")
.config(JobConfigArgs.builder()
.inputs(JobConfigInputArgs.builder()
.key("input0")
.uri(Output.tuple(default_.name(), exampleMp4.name()).applyValue(values -> {
var defaultName = values.t1;
var exampleMp4Name = values.t2;
return String.format("gs://%s/%s", defaultName,exampleMp4Name);
}))
.build())
.editLists(JobConfigEditListArgs.builder()
.key("atom0")
.startTimeOffset("0s")
.inputs("input0")
.build())
.adBreaks(JobConfigAdBreakArgs.builder()
.startTimeOffset("3.500s")
.build())
.elementaryStreams(
JobConfigElementaryStreamArgs.builder()
.key("video-stream0")
.videoStream(JobConfigElementaryStreamVideoStreamArgs.builder()
.h264(JobConfigElementaryStreamVideoStreamH264Args.builder()
.widthPixels(640)
.heightPixels(360)
.bitrateBps(550000)
.frameRate(60)
.pixelFormat("yuv420p")
.rateControlMode("vbr")
.crfLevel(21)
.gopDuration("3s")
.vbvSizeBits(550000)
.vbvFullnessBits(495000)
.entropyCoder("cabac")
.profile("high")
.preset("veryfast")
.build())
.build())
.build(),
JobConfigElementaryStreamArgs.builder()
.key("video-stream1")
.videoStream(JobConfigElementaryStreamVideoStreamArgs.builder()
.h264(JobConfigElementaryStreamVideoStreamH264Args.builder()
.widthPixels(1280)
.heightPixels(720)
.bitrateBps(550000)
.frameRate(60)
.pixelFormat("yuv420p")
.rateControlMode("vbr")
.crfLevel(21)
.gopDuration("3s")
.vbvSizeBits(2500000)
.vbvFullnessBits(2250000)
.entropyCoder("cabac")
.profile("high")
.preset("veryfast")
.build())
.build())
.build(),
JobConfigElementaryStreamArgs.builder()
.key("audio-stream0")
.audioStream(JobConfigElementaryStreamAudioStreamArgs.builder()
.codec("aac")
.bitrateBps(64000)
.channelCount(2)
.channelLayouts(
"fl",
"fr")
.sampleRateHertz(48000)
.build())
.build())
.muxStreams(
JobConfigMuxStreamArgs.builder()
.key("sd")
.fileName("sd.mp4")
.container("mp4")
.elementaryStreams(
"video-stream0",
"audio-stream0")
.build(),
JobConfigMuxStreamArgs.builder()
.key("hd")
.fileName("hd.mp4")
.container("mp4")
.elementaryStreams(
"video-stream1",
"audio-stream0")
.build(),
JobConfigMuxStreamArgs.builder()
.key("media-sd")
.fileName("media-sd.ts")
.container("ts")
.elementaryStreams(
"video-stream0",
"audio-stream0")
.build(),
JobConfigMuxStreamArgs.builder()
.key("media-hd")
.fileName("media-hd.ts")
.container("ts")
.elementaryStreams(
"video-stream1",
"audio-stream0")
.build(),
JobConfigMuxStreamArgs.builder()
.key("video-only-sd")
.fileName("video-only-sd.m4s")
.container("fmp4")
.elementaryStreams("video-stream0")
.build(),
JobConfigMuxStreamArgs.builder()
.key("video-only-hd")
.fileName("video-only-hd.m4s")
.container("fmp4")
.elementaryStreams("video-stream1")
.build(),
JobConfigMuxStreamArgs.builder()
.key("audio-only")
.fileName("audio-only.m4s")
.container("fmp4")
.elementaryStreams("audio-stream0")
.build())
.manifests(
JobConfigManifestArgs.builder()
.fileName("manifest.m3u8")
.type("HLS")
.muxStreams(
"media-sd",
"media-hd")
.build(),
JobConfigManifestArgs.builder()
.fileName("manifest.mpd")
.type("DASH")
.muxStreams(
"video-only-sd",
"video-only-hd",
"audio-only")
.build())
.output(JobConfigOutputArgs.builder()
.uri(default_.name().applyValue(name -> String.format("gs://%s/outputs/", name)))
.build())
.build())
.labels(Map.of("label", "key"))
.build());
}
}
resources:
default:
type: gcp:storage:Bucket
properties:
name: transcoder-job
location: US
forceDestroy: true
uniformBucketLevelAccess: true
publicAccessPrevention: enforced
exampleMp4:
type: gcp:storage:BucketObject
name: example_mp4
properties:
name: example.mp4
source:
fn::FileAsset: ./test-fixtures/example.mp4
bucket: ${default.name}
defaultJob:
type: gcp:transcoder:Job
name: default
properties:
location: us-central1
config:
inputs:
- key: input0
uri: gs://${default.name}/${exampleMp4.name}
editLists:
- key: atom0
startTimeOffset: 0s
inputs:
- input0
adBreaks:
- startTimeOffset: 3.500s
elementaryStreams:
- key: video-stream0
videoStream:
h264:
widthPixels: 640
heightPixels: 360
bitrateBps: 550000
frameRate: 60
pixelFormat: yuv420p
rateControlMode: vbr
crfLevel: 21
gopDuration: 3s
vbvSizeBits: 550000
vbvFullnessBits: 495000
entropyCoder: cabac
profile: high
preset: veryfast
- key: video-stream1
videoStream:
h264:
widthPixels: 1280
heightPixels: 720
bitrateBps: 550000
frameRate: 60
pixelFormat: yuv420p
rateControlMode: vbr
crfLevel: 21
gopDuration: 3s
vbvSizeBits: 2.5e+06
vbvFullnessBits: 2.25e+06
entropyCoder: cabac
profile: high
preset: veryfast
- key: audio-stream0
audioStream:
codec: aac
bitrateBps: 64000
channelCount: 2
channelLayouts:
- fl
- fr
sampleRateHertz: 48000
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://${default.name}/outputs/
labels:
label: key
Create Job Resource
Resources are created with functions called constructors. To learn more about declaring and configuring resources, see Resources.
Constructor syntax
new Job(name: string, args: JobArgs, opts?: CustomResourceOptions);
@overload
def Job(resource_name: str,
args: JobArgs,
opts: Optional[ResourceOptions] = None)
@overload
def Job(resource_name: str,
opts: Optional[ResourceOptions] = None,
location: Optional[str] = None,
config: Optional[JobConfigArgs] = None,
labels: Optional[Mapping[str, str]] = None,
project: Optional[str] = None,
template_id: Optional[str] = None)
func NewJob(ctx *Context, name string, args JobArgs, opts ...ResourceOption) (*Job, error)
public Job(string name, JobArgs args, CustomResourceOptions? opts = null)
type: gcp:transcoder:Job
properties: # The arguments to resource properties.
options: # Bag of options to control resource's behavior.
Parameters
- name string
- The unique name of the resource.
- args JobArgs
- The arguments to resource properties.
- opts CustomResourceOptions
- Bag of options to control resource's behavior.
- resource_name str
- The unique name of the resource.
- args JobArgs
- The arguments to resource properties.
- opts ResourceOptions
- Bag of options to control resource's behavior.
- ctx Context
- Context object for the current deployment.
- name string
- The unique name of the resource.
- args JobArgs
- The arguments to resource properties.
- opts ResourceOption
- Bag of options to control resource's behavior.
- name string
- The unique name of the resource.
- args JobArgs
- The arguments to resource properties.
- opts CustomResourceOptions
- Bag of options to control resource's behavior.
- name String
- The unique name of the resource.
- args JobArgs
- The arguments to resource properties.
- options CustomResourceOptions
- Bag of options to control resource's behavior.
Constructor example
The following reference example uses placeholder values for all input properties.
var examplejobResourceResourceFromTranscoderjob = new Gcp.Transcoder.Job("examplejobResourceResourceFromTranscoderjob", new()
{
Location = "string",
Config = new Gcp.Transcoder.Inputs.JobConfigArgs
{
AdBreaks = new[]
{
new Gcp.Transcoder.Inputs.JobConfigAdBreakArgs
{
StartTimeOffset = "string",
},
},
EditLists = new[]
{
new Gcp.Transcoder.Inputs.JobConfigEditListArgs
{
Inputs = new[]
{
"string",
},
Key = "string",
StartTimeOffset = "string",
},
},
ElementaryStreams = new[]
{
new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs
{
AudioStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamAudioStreamArgs
{
BitrateBps = 0,
ChannelCount = 0,
ChannelLayouts = new[]
{
"string",
},
Codec = "string",
SampleRateHertz = 0,
},
Key = "string",
VideoStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamArgs
{
H264 = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamH264Args
{
FrameRate = 0,
BitrateBps = 0,
Hlg = null,
EntropyCoder = "string",
GopDuration = "string",
HeightPixels = 0,
CrfLevel = 0,
PixelFormat = "string",
Preset = "string",
Profile = "string",
RateControlMode = "string",
Sdr = null,
VbvFullnessBits = 0,
VbvSizeBits = 0,
WidthPixels = 0,
},
},
},
},
Encryptions = new[]
{
new Gcp.Transcoder.Inputs.JobConfigEncryptionArgs
{
Id = "string",
Aes128 = null,
DrmSystems = new Gcp.Transcoder.Inputs.JobConfigEncryptionDrmSystemsArgs
{
Clearkey = null,
Fairplay = null,
Playready = null,
Widevine = null,
},
MpegCenc = new Gcp.Transcoder.Inputs.JobConfigEncryptionMpegCencArgs
{
Scheme = "string",
},
SampleAes = null,
SecretManagerKeySource = new Gcp.Transcoder.Inputs.JobConfigEncryptionSecretManagerKeySourceArgs
{
SecretVersion = "string",
},
},
},
Inputs = new[]
{
new Gcp.Transcoder.Inputs.JobConfigInputArgs
{
Key = "string",
Uri = "string",
},
},
Manifests = new[]
{
new Gcp.Transcoder.Inputs.JobConfigManifestArgs
{
FileName = "string",
MuxStreams = new[]
{
"string",
},
Type = "string",
},
},
MuxStreams = new[]
{
new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs
{
Container = "string",
ElementaryStreams = new[]
{
"string",
},
EncryptionId = "string",
FileName = "string",
Key = "string",
SegmentSettings = new Gcp.Transcoder.Inputs.JobConfigMuxStreamSegmentSettingsArgs
{
SegmentDuration = "string",
},
},
},
Output = new Gcp.Transcoder.Inputs.JobConfigOutputArgs
{
Uri = "string",
},
Overlays = new[]
{
new Gcp.Transcoder.Inputs.JobConfigOverlayArgs
{
Animations = new[]
{
new Gcp.Transcoder.Inputs.JobConfigOverlayAnimationArgs
{
AnimationFade = new Gcp.Transcoder.Inputs.JobConfigOverlayAnimationAnimationFadeArgs
{
FadeType = "string",
EndTimeOffset = "string",
StartTimeOffset = "string",
Xy = new Gcp.Transcoder.Inputs.JobConfigOverlayAnimationAnimationFadeXyArgs
{
X = 0,
Y = 0,
},
},
},
},
Image = new Gcp.Transcoder.Inputs.JobConfigOverlayImageArgs
{
Uri = "string",
},
},
},
PubsubDestination = new Gcp.Transcoder.Inputs.JobConfigPubsubDestinationArgs
{
Topic = "string",
},
},
Labels =
{
{ "string", "string" },
},
Project = "string",
TemplateId = "string",
});
example, err := transcoder.NewJob(ctx, "examplejobResourceResourceFromTranscoderjob", &transcoder.JobArgs{
Location: pulumi.String("string"),
Config: &transcoder.JobConfigArgs{
AdBreaks: transcoder.JobConfigAdBreakArray{
&transcoder.JobConfigAdBreakArgs{
StartTimeOffset: pulumi.String("string"),
},
},
EditLists: transcoder.JobConfigEditListArray{
&transcoder.JobConfigEditListArgs{
Inputs: pulumi.StringArray{
pulumi.String("string"),
},
Key: pulumi.String("string"),
StartTimeOffset: pulumi.String("string"),
},
},
ElementaryStreams: transcoder.JobConfigElementaryStreamArray{
&transcoder.JobConfigElementaryStreamArgs{
AudioStream: &transcoder.JobConfigElementaryStreamAudioStreamArgs{
BitrateBps: pulumi.Int(0),
ChannelCount: pulumi.Int(0),
ChannelLayouts: pulumi.StringArray{
pulumi.String("string"),
},
Codec: pulumi.String("string"),
SampleRateHertz: pulumi.Int(0),
},
Key: pulumi.String("string"),
VideoStream: &transcoder.JobConfigElementaryStreamVideoStreamArgs{
H264: &transcoder.JobConfigElementaryStreamVideoStreamH264Args{
FrameRate: pulumi.Int(0),
BitrateBps: pulumi.Int(0),
Hlg: &transcoder.JobConfigElementaryStreamVideoStreamH264HlgArgs{},
EntropyCoder: pulumi.String("string"),
GopDuration: pulumi.String("string"),
HeightPixels: pulumi.Int(0),
CrfLevel: pulumi.Int(0),
PixelFormat: pulumi.String("string"),
Preset: pulumi.String("string"),
Profile: pulumi.String("string"),
RateControlMode: pulumi.String("string"),
Sdr: &transcoder.JobConfigElementaryStreamVideoStreamH264SdrArgs{},
VbvFullnessBits: pulumi.Int(0),
VbvSizeBits: pulumi.Int(0),
WidthPixels: pulumi.Int(0),
},
},
},
},
Encryptions: transcoder.JobConfigEncryptionArray{
&transcoder.JobConfigEncryptionArgs{
Id: pulumi.String("string"),
Aes128: &transcoder.JobConfigEncryptionAes128Args{},
DrmSystems: &transcoder.JobConfigEncryptionDrmSystemsArgs{
Clearkey: &transcoder.JobConfigEncryptionDrmSystemsClearkeyArgs{},
Fairplay: &transcoder.JobConfigEncryptionDrmSystemsFairplayArgs{},
Playready: &transcoder.JobConfigEncryptionDrmSystemsPlayreadyArgs{},
Widevine: &transcoder.JobConfigEncryptionDrmSystemsWidevineArgs{},
},
MpegCenc: &transcoder.JobConfigEncryptionMpegCencArgs{
Scheme: pulumi.String("string"),
},
SampleAes: &transcoder.JobConfigEncryptionSampleAesArgs{},
SecretManagerKeySource: &transcoder.JobConfigEncryptionSecretManagerKeySourceArgs{
SecretVersion: pulumi.String("string"),
},
},
},
Inputs: transcoder.JobConfigInputTypeArray{
&transcoder.JobConfigInputTypeArgs{
Key: pulumi.String("string"),
Uri: pulumi.String("string"),
},
},
Manifests: transcoder.JobConfigManifestArray{
&transcoder.JobConfigManifestArgs{
FileName: pulumi.String("string"),
MuxStreams: pulumi.StringArray{
pulumi.String("string"),
},
Type: pulumi.String("string"),
},
},
MuxStreams: transcoder.JobConfigMuxStreamArray{
&transcoder.JobConfigMuxStreamArgs{
Container: pulumi.String("string"),
ElementaryStreams: pulumi.StringArray{
pulumi.String("string"),
},
EncryptionId: pulumi.String("string"),
FileName: pulumi.String("string"),
Key: pulumi.String("string"),
SegmentSettings: &transcoder.JobConfigMuxStreamSegmentSettingsArgs{
SegmentDuration: pulumi.String("string"),
},
},
},
Output: &transcoder.JobConfigOutputTypeArgs{
Uri: pulumi.String("string"),
},
Overlays: transcoder.JobConfigOverlayArray{
&transcoder.JobConfigOverlayArgs{
Animations: transcoder.JobConfigOverlayAnimationArray{
&transcoder.JobConfigOverlayAnimationArgs{
AnimationFade: &transcoder.JobConfigOverlayAnimationAnimationFadeArgs{
FadeType: pulumi.String("string"),
EndTimeOffset: pulumi.String("string"),
StartTimeOffset: pulumi.String("string"),
Xy: &transcoder.JobConfigOverlayAnimationAnimationFadeXyArgs{
X: pulumi.Float64(0),
Y: pulumi.Float64(0),
},
},
},
},
Image: &transcoder.JobConfigOverlayImageArgs{
Uri: pulumi.String("string"),
},
},
},
PubsubDestination: &transcoder.JobConfigPubsubDestinationArgs{
Topic: pulumi.String("string"),
},
},
Labels: pulumi.StringMap{
"string": pulumi.String("string"),
},
Project: pulumi.String("string"),
TemplateId: pulumi.String("string"),
})
var examplejobResourceResourceFromTranscoderjob = new Job("examplejobResourceResourceFromTranscoderjob", JobArgs.builder()
.location("string")
.config(JobConfigArgs.builder()
.adBreaks(JobConfigAdBreakArgs.builder()
.startTimeOffset("string")
.build())
.editLists(JobConfigEditListArgs.builder()
.inputs("string")
.key("string")
.startTimeOffset("string")
.build())
.elementaryStreams(JobConfigElementaryStreamArgs.builder()
.audioStream(JobConfigElementaryStreamAudioStreamArgs.builder()
.bitrateBps(0)
.channelCount(0)
.channelLayouts("string")
.codec("string")
.sampleRateHertz(0)
.build())
.key("string")
.videoStream(JobConfigElementaryStreamVideoStreamArgs.builder()
.h264(JobConfigElementaryStreamVideoStreamH264Args.builder()
.frameRate(0)
.bitrateBps(0)
.hlg()
.entropyCoder("string")
.gopDuration("string")
.heightPixels(0)
.crfLevel(0)
.pixelFormat("string")
.preset("string")
.profile("string")
.rateControlMode("string")
.sdr()
.vbvFullnessBits(0)
.vbvSizeBits(0)
.widthPixels(0)
.build())
.build())
.build())
.encryptions(JobConfigEncryptionArgs.builder()
.id("string")
.aes128()
.drmSystems(JobConfigEncryptionDrmSystemsArgs.builder()
.clearkey()
.fairplay()
.playready()
.widevine()
.build())
.mpegCenc(JobConfigEncryptionMpegCencArgs.builder()
.scheme("string")
.build())
.sampleAes()
.secretManagerKeySource(JobConfigEncryptionSecretManagerKeySourceArgs.builder()
.secretVersion("string")
.build())
.build())
.inputs(JobConfigInputArgs.builder()
.key("string")
.uri("string")
.build())
.manifests(JobConfigManifestArgs.builder()
.fileName("string")
.muxStreams("string")
.type("string")
.build())
.muxStreams(JobConfigMuxStreamArgs.builder()
.container("string")
.elementaryStreams("string")
.encryptionId("string")
.fileName("string")
.key("string")
.segmentSettings(JobConfigMuxStreamSegmentSettingsArgs.builder()
.segmentDuration("string")
.build())
.build())
.output(JobConfigOutputArgs.builder()
.uri("string")
.build())
.overlays(JobConfigOverlayArgs.builder()
.animations(JobConfigOverlayAnimationArgs.builder()
.animationFade(JobConfigOverlayAnimationAnimationFadeArgs.builder()
.fadeType("string")
.endTimeOffset("string")
.startTimeOffset("string")
.xy(JobConfigOverlayAnimationAnimationFadeXyArgs.builder()
.x(0)
.y(0)
.build())
.build())
.build())
.image(JobConfigOverlayImageArgs.builder()
.uri("string")
.build())
.build())
.pubsubDestination(JobConfigPubsubDestinationArgs.builder()
.topic("string")
.build())
.build())
.labels(Map.of("string", "string"))
.project("string")
.templateId("string")
.build());
examplejob_resource_resource_from_transcoderjob = gcp.transcoder.Job("examplejobResourceResourceFromTranscoderjob",
location="string",
config={
"ad_breaks": [{
"start_time_offset": "string",
}],
"edit_lists": [{
"inputs": ["string"],
"key": "string",
"start_time_offset": "string",
}],
"elementary_streams": [{
"audio_stream": {
"bitrate_bps": 0,
"channel_count": 0,
"channel_layouts": ["string"],
"codec": "string",
"sample_rate_hertz": 0,
},
"key": "string",
"video_stream": {
"h264": {
"frame_rate": 0,
"bitrate_bps": 0,
"hlg": {},
"entropy_coder": "string",
"gop_duration": "string",
"height_pixels": 0,
"crf_level": 0,
"pixel_format": "string",
"preset": "string",
"profile": "string",
"rate_control_mode": "string",
"sdr": {},
"vbv_fullness_bits": 0,
"vbv_size_bits": 0,
"width_pixels": 0,
},
},
}],
"encryptions": [{
"id": "string",
"aes128": {},
"drm_systems": {
"clearkey": {},
"fairplay": {},
"playready": {},
"widevine": {},
},
"mpeg_cenc": {
"scheme": "string",
},
"sample_aes": {},
"secret_manager_key_source": {
"secret_version": "string",
},
}],
"inputs": [{
"key": "string",
"uri": "string",
}],
"manifests": [{
"file_name": "string",
"mux_streams": ["string"],
"type": "string",
}],
"mux_streams": [{
"container": "string",
"elementary_streams": ["string"],
"encryption_id": "string",
"file_name": "string",
"key": "string",
"segment_settings": {
"segment_duration": "string",
},
}],
"output": {
"uri": "string",
},
"overlays": [{
"animations": [{
"animation_fade": {
"fade_type": "string",
"end_time_offset": "string",
"start_time_offset": "string",
"xy": {
"x": 0,
"y": 0,
},
},
}],
"image": {
"uri": "string",
},
}],
"pubsub_destination": {
"topic": "string",
},
},
labels={
"string": "string",
},
project="string",
template_id="string")
const examplejobResourceResourceFromTranscoderjob = new gcp.transcoder.Job("examplejobResourceResourceFromTranscoderjob", {
location: "string",
config: {
adBreaks: [{
startTimeOffset: "string",
}],
editLists: [{
inputs: ["string"],
key: "string",
startTimeOffset: "string",
}],
elementaryStreams: [{
audioStream: {
bitrateBps: 0,
channelCount: 0,
channelLayouts: ["string"],
codec: "string",
sampleRateHertz: 0,
},
key: "string",
videoStream: {
h264: {
frameRate: 0,
bitrateBps: 0,
hlg: {},
entropyCoder: "string",
gopDuration: "string",
heightPixels: 0,
crfLevel: 0,
pixelFormat: "string",
preset: "string",
profile: "string",
rateControlMode: "string",
sdr: {},
vbvFullnessBits: 0,
vbvSizeBits: 0,
widthPixels: 0,
},
},
}],
encryptions: [{
id: "string",
aes128: {},
drmSystems: {
clearkey: {},
fairplay: {},
playready: {},
widevine: {},
},
mpegCenc: {
scheme: "string",
},
sampleAes: {},
secretManagerKeySource: {
secretVersion: "string",
},
}],
inputs: [{
key: "string",
uri: "string",
}],
manifests: [{
fileName: "string",
muxStreams: ["string"],
type: "string",
}],
muxStreams: [{
container: "string",
elementaryStreams: ["string"],
encryptionId: "string",
fileName: "string",
key: "string",
segmentSettings: {
segmentDuration: "string",
},
}],
output: {
uri: "string",
},
overlays: [{
animations: [{
animationFade: {
fadeType: "string",
endTimeOffset: "string",
startTimeOffset: "string",
xy: {
x: 0,
y: 0,
},
},
}],
image: {
uri: "string",
},
}],
pubsubDestination: {
topic: "string",
},
},
labels: {
string: "string",
},
project: "string",
templateId: "string",
});
type: gcp:transcoder:Job
properties:
config:
adBreaks:
- startTimeOffset: string
editLists:
- inputs:
- string
key: string
startTimeOffset: string
elementaryStreams:
- audioStream:
bitrateBps: 0
channelCount: 0
channelLayouts:
- string
codec: string
sampleRateHertz: 0
key: string
videoStream:
h264:
bitrateBps: 0
crfLevel: 0
entropyCoder: string
frameRate: 0
gopDuration: string
heightPixels: 0
hlg: {}
pixelFormat: string
preset: string
profile: string
rateControlMode: string
sdr: {}
vbvFullnessBits: 0
vbvSizeBits: 0
widthPixels: 0
encryptions:
- aes128: {}
drmSystems:
clearkey: {}
fairplay: {}
playready: {}
widevine: {}
id: string
mpegCenc:
scheme: string
sampleAes: {}
secretManagerKeySource:
secretVersion: string
inputs:
- key: string
uri: string
manifests:
- fileName: string
muxStreams:
- string
type: string
muxStreams:
- container: string
elementaryStreams:
- string
encryptionId: string
fileName: string
key: string
segmentSettings:
segmentDuration: string
output:
uri: string
overlays:
- animations:
- animationFade:
endTimeOffset: string
fadeType: string
startTimeOffset: string
xy:
x: 0
"y": 0
image:
uri: string
pubsubDestination:
topic: string
labels:
string: string
location: string
project: string
templateId: string
Job Resource Properties
To learn more about resource properties and how to use them, see Inputs and Outputs in the Architecture and Concepts docs.
Inputs
In Python, inputs that are objects can be passed either as argument classes or as dictionary literals.
The Job resource accepts the following input properties:
- Location string
- The location of the transcoding job resource.
- Config
Job
Config - The configuration for this template. Structure is documented below.
- Labels Dictionary<string, string>
The labels associated with this job. You can use these to organize and group your jobs.
Note: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer to the field
effective_labels
for all of the labels present on the resource.- Project string
- The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
- Template
Id string - Specify the templateId to use for populating Job.config. The default is preset/web-hd, which is the only supported preset.
- Location string
- The location of the transcoding job resource.
- Config
Job
Config Args - The configuration for this template. Structure is documented below.
- Labels map[string]string
The labels associated with this job. You can use these to organize and group your jobs.
Note: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer to the field
effective_labels
for all of the labels present on the resource.- Project string
- The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
- Template
Id string - Specify the templateId to use for populating Job.config. The default is preset/web-hd, which is the only supported preset.
- location String
- The location of the transcoding job resource.
- config
Job
Config - The configuration for this template. Structure is documented below.
- labels Map<String,String>
The labels associated with this job. You can use these to organize and group your jobs.
Note: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer to the field
effective_labels
for all of the labels present on the resource.- project String
- The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
- template
Id String - Specify the templateId to use for populating Job.config. The default is preset/web-hd, which is the only supported preset.
- location string
- The location of the transcoding job resource.
- config
Job
Config - The configuration for this template. Structure is documented below.
- labels {[key: string]: string}
The labels associated with this job. You can use these to organize and group your jobs.
Note: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer to the field
effective_labels
for all of the labels present on the resource.- project string
- The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
- template
Id string - Specify the templateId to use for populating Job.config. The default is preset/web-hd, which is the only supported preset.
- location str
- The location of the transcoding job resource.
- config
Job
Config Args - The configuration for this template. Structure is documented below.
- labels Mapping[str, str]
The labels associated with this job. You can use these to organize and group your jobs.
Note: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer to the field
effective_labels
for all of the labels present on the resource.- project str
- The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
- template_
id str - Specify the templateId to use for populating Job.config. The default is preset/web-hd, which is the only supported preset.
- location String
- The location of the transcoding job resource.
- config Property Map
- The configuration for this template. Structure is documented below.
- labels Map<String>
The labels associated with this job. You can use these to organize and group your jobs.
Note: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer to the field
effective_labels
for all of the labels present on the resource.- project String
- The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
- template
Id String - Specify the templateId to use for populating Job.config. The default is preset/web-hd, which is the only supported preset.
Outputs
All input properties are implicitly available as output properties. Additionally, the Job resource produces the following output properties:
- Create
Time string - The time the job was created.
- Effective
Labels Dictionary<string, string> - All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
- End
Time string - The time the transcoding finished.
- Id string
- The provider-assigned unique ID for this managed resource.
- Name string
- The resource name of the job.
- Pulumi
Labels Dictionary<string, string> - The combination of labels configured directly on the resource and default labels configured on the provider.
- Start
Time string - The time the transcoding started.
- State string
- The current state of the job.
- Create
Time string - The time the job was created.
- Effective
Labels map[string]string - All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
- End
Time string - The time the transcoding finished.
- Id string
- The provider-assigned unique ID for this managed resource.
- Name string
- The resource name of the job.
- Pulumi
Labels map[string]string - The combination of labels configured directly on the resource and default labels configured on the provider.
- Start
Time string - The time the transcoding started.
- State string
- The current state of the job.
- create
Time String - The time the job was created.
- effective
Labels Map<String,String> - All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
- end
Time String - The time the transcoding finished.
- id String
- The provider-assigned unique ID for this managed resource.
- name String
- The resource name of the job.
- pulumi
Labels Map<String,String> - The combination of labels configured directly on the resource and default labels configured on the provider.
- start
Time String - The time the transcoding started.
- state String
- The current state of the job.
- create
Time string - The time the job was created.
- effective
Labels {[key: string]: string} - All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
- end
Time string - The time the transcoding finished.
- id string
- The provider-assigned unique ID for this managed resource.
- name string
- The resource name of the job.
- pulumi
Labels {[key: string]: string} - The combination of labels configured directly on the resource and default labels configured on the provider.
- start
Time string - The time the transcoding started.
- state string
- The current state of the job.
- create_
time str - The time the job was created.
- effective_
labels Mapping[str, str] - All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
- end_
time str - The time the transcoding finished.
- id str
- The provider-assigned unique ID for this managed resource.
- name str
- The resource name of the job.
- pulumi_
labels Mapping[str, str] - The combination of labels configured directly on the resource and default labels configured on the provider.
- start_
time str - The time the transcoding started.
- state str
- The current state of the job.
- create
Time String - The time the job was created.
- effective
Labels Map<String> - All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
- end
Time String - The time the transcoding finished.
- id String
- The provider-assigned unique ID for this managed resource.
- name String
- The resource name of the job.
- pulumi
Labels Map<String> - The combination of labels configured directly on the resource and default labels configured on the provider.
- start
Time String - The time the transcoding started.
- state String
- The current state of the job.
Look up Existing Job Resource
Get an existing Job resource’s state with the given name, ID, and optional extra properties used to qualify the lookup.
public static get(name: string, id: Input<ID>, state?: JobState, opts?: CustomResourceOptions): Job
@staticmethod
def get(resource_name: str,
id: str,
opts: Optional[ResourceOptions] = None,
config: Optional[JobConfigArgs] = None,
create_time: Optional[str] = None,
effective_labels: Optional[Mapping[str, str]] = None,
end_time: Optional[str] = None,
labels: Optional[Mapping[str, str]] = None,
location: Optional[str] = None,
name: Optional[str] = None,
project: Optional[str] = None,
pulumi_labels: Optional[Mapping[str, str]] = None,
start_time: Optional[str] = None,
state: Optional[str] = None,
template_id: Optional[str] = None) -> Job
func GetJob(ctx *Context, name string, id IDInput, state *JobState, opts ...ResourceOption) (*Job, error)
public static Job Get(string name, Input<string> id, JobState? state, CustomResourceOptions? opts = null)
public static Job get(String name, Output<String> id, JobState state, CustomResourceOptions options)
Resource lookup is not supported in YAML
- name
- The unique name of the resulting resource.
- id
- The unique provider ID of the resource to lookup.
- state
- Any extra arguments used during the lookup.
- opts
- A bag of options that control this resource's behavior.
- resource_name
- The unique name of the resulting resource.
- id
- The unique provider ID of the resource to lookup.
- name
- The unique name of the resulting resource.
- id
- The unique provider ID of the resource to lookup.
- state
- Any extra arguments used during the lookup.
- opts
- A bag of options that control this resource's behavior.
- name
- The unique name of the resulting resource.
- id
- The unique provider ID of the resource to lookup.
- state
- Any extra arguments used during the lookup.
- opts
- A bag of options that control this resource's behavior.
- name
- The unique name of the resulting resource.
- id
- The unique provider ID of the resource to lookup.
- state
- Any extra arguments used during the lookup.
- opts
- A bag of options that control this resource's behavior.
- Config
Job
Config - The configuration for this template. Structure is documented below.
- Create
Time string - The time the job was created.
- Effective
Labels Dictionary<string, string> - All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
- End
Time string - The time the transcoding finished.
- Labels Dictionary<string, string>
The labels associated with this job. You can use these to organize and group your jobs.
Note: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer to the field
effective_labels
for all of the labels present on the resource.- Location string
- The location of the transcoding job resource.
- Name string
- The resource name of the job.
- Project string
- The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
- Pulumi
Labels Dictionary<string, string> - The combination of labels configured directly on the resource and default labels configured on the provider.
- Start
Time string - The time the transcoding started.
- State string
- The current state of the job.
- Template
Id string - Specify the templateId to use for populating Job.config. The default is preset/web-hd, which is the only supported preset.
- Config
Job
Config Args - The configuration for this template. Structure is documented below.
- Create
Time string - The time the job was created.
- Effective
Labels map[string]string - All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
- End
Time string - The time the transcoding finished.
- Labels map[string]string
The labels associated with this job. You can use these to organize and group your jobs.
Note: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer to the field
effective_labels
for all of the labels present on the resource.- Location string
- The location of the transcoding job resource.
- Name string
- The resource name of the job.
- Project string
- The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
- Pulumi
Labels map[string]string - The combination of labels configured directly on the resource and default labels configured on the provider.
- Start
Time string - The time the transcoding started.
- State string
- The current state of the job.
- Template
Id string - Specify the templateId to use for populating Job.config. The default is preset/web-hd, which is the only supported preset.
- config
Job
Config - The configuration for this template. Structure is documented below.
- create
Time String - The time the job was created.
- effective
Labels Map<String,String> - All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
- end
Time String - The time the transcoding finished.
- labels Map<String,String>
The labels associated with this job. You can use these to organize and group your jobs.
Note: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer to the field
effective_labels
for all of the labels present on the resource.- location String
- The location of the transcoding job resource.
- name String
- The resource name of the job.
- project String
- The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
- pulumi
Labels Map<String,String> - The combination of labels configured directly on the resource and default labels configured on the provider.
- start
Time String - The time the transcoding started.
- state String
- The current state of the job.
- template
Id String - Specify the templateId to use for populating Job.config. The default is preset/web-hd, which is the only supported preset.
- config
Job
Config - The configuration for this template. Structure is documented below.
- create
Time string - The time the job was created.
- effective
Labels {[key: string]: string} - All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
- end
Time string - The time the transcoding finished.
- labels {[key: string]: string}
The labels associated with this job. You can use these to organize and group your jobs.
Note: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer to the field
effective_labels
for all of the labels present on the resource.- location string
- The location of the transcoding job resource.
- name string
- The resource name of the job.
- project string
- The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
- pulumi
Labels {[key: string]: string} - The combination of labels configured directly on the resource and default labels configured on the provider.
- start
Time string - The time the transcoding started.
- state string
- The current state of the job.
- template
Id string - Specify the templateId to use for populating Job.config. The default is preset/web-hd, which is the only supported preset.
- config
Job
Config Args - The configuration for this template. Structure is documented below.
- create_
time str - The time the job was created.
- effective_
labels Mapping[str, str] - All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
- end_
time str - The time the transcoding finished.
- labels Mapping[str, str]
The labels associated with this job. You can use these to organize and group your jobs.
Note: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer to the field
effective_labels
for all of the labels present on the resource.- location str
- The location of the transcoding job resource.
- name str
- The resource name of the job.
- project str
- The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
- pulumi_
labels Mapping[str, str] - The combination of labels configured directly on the resource and default labels configured on the provider.
- start_
time str - The time the transcoding started.
- state str
- The current state of the job.
- template_
id str - Specify the templateId to use for populating Job.config. The default is preset/web-hd, which is the only supported preset.
- config Property Map
- The configuration for this template. Structure is documented below.
- create
Time String - The time the job was created.
- effective
Labels Map<String> - All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
- end
Time String - The time the transcoding finished.
- labels Map<String>
The labels associated with this job. You can use these to organize and group your jobs.
Note: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer to the field
effective_labels
for all of the labels present on the resource.- location String
- The location of the transcoding job resource.
- name String
- The resource name of the job.
- project String
- The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
- pulumi
Labels Map<String> - The combination of labels configured directly on the resource and default labels configured on the provider.
- start
Time String - The time the transcoding started.
- state String
- The current state of the job.
- template
Id String - Specify the templateId to use for populating Job.config. The default is preset/web-hd, which is the only supported preset.
Supporting Types
JobConfig, JobConfigArgs
- Ad
Breaks List<JobConfig Ad Break> - Ad break. Structure is documented below.
- Edit
Lists List<JobConfig Edit List> - List of input assets stored in Cloud Storage. Structure is documented below.
- Elementary
Streams List<JobConfig Elementary Stream> - List of input assets stored in Cloud Storage. Structure is documented below.
- Encryptions
List<Job
Config Encryption> - List of encryption configurations for the content. Structure is documented below.
- Inputs
List<Job
Config Input> - List of input assets stored in Cloud Storage. Structure is documented below.
- Manifests
List<Job
Config Manifest> - Manifest configuration. Structure is documented below.
- Mux
Streams List<JobConfig Mux Stream> - Multiplexing settings for output stream. Structure is documented below.
- Output
Job
Config Output - Location of output file(s) in a Cloud Storage bucket. Structure is documented below.
- Overlays
List<Job
Config Overlay> - List of overlays on the output video, in descending Z-order. Structure is documented below.
- Pubsub
Destination JobConfig Pubsub Destination - Pub/Sub destination. Structure is documented below.
- Ad
Breaks []JobConfig Ad Break - Ad break. Structure is documented below.
- Edit
Lists []JobConfig Edit List - List of input assets stored in Cloud Storage. Structure is documented below.
- Elementary
Streams []JobConfig Elementary Stream - List of input assets stored in Cloud Storage. Structure is documented below.
- Encryptions
[]Job
Config Encryption - List of encryption configurations for the content. Structure is documented below.
- Inputs
[]Job
Config Input Type - List of input assets stored in Cloud Storage. Structure is documented below.
- Manifests
[]Job
Config Manifest - Manifest configuration. Structure is documented below.
- Mux
Streams []JobConfig Mux Stream - Multiplexing settings for output stream. Structure is documented below.
- Output
Job
Config Output Type - Location of output file(s) in a Cloud Storage bucket. Structure is documented below.
- Overlays
[]Job
Config Overlay - List of overlays on the output video, in descending Z-order. Structure is documented below.
- Pubsub
Destination JobConfig Pubsub Destination - Pub/Sub destination. Structure is documented below.
- ad
Breaks List<JobConfig Ad Break> - Ad break. Structure is documented below.
- edit
Lists List<JobConfig Edit List> - List of input assets stored in Cloud Storage. Structure is documented below.
- elementary
Streams List<JobConfig Elementary Stream> - List of input assets stored in Cloud Storage. Structure is documented below.
- encryptions
List<Job
Config Encryption> - List of encryption configurations for the content. Structure is documented below.
- inputs
List<Job
Config Input> - List of input assets stored in Cloud Storage. Structure is documented below.
- manifests
List<Job
Config Manifest> - Manifest configuration. Structure is documented below.
- mux
Streams List<JobConfig Mux Stream> - Multiplexing settings for output stream. Structure is documented below.
- output
Job
Config Output - Location of output file(s) in a Cloud Storage bucket. Structure is documented below.
- overlays
List<Job
Config Overlay> - List of overlays on the output video, in descending Z-order. Structure is documented below.
- pubsub
Destination JobConfig Pubsub Destination - Pub/Sub destination. Structure is documented below.
- ad
Breaks JobConfig Ad Break[] - Ad break. Structure is documented below.
- edit
Lists JobConfig Edit List[] - List of input assets stored in Cloud Storage. Structure is documented below.
- elementary
Streams JobConfig Elementary Stream[] - List of input assets stored in Cloud Storage. Structure is documented below.
- encryptions
Job
Config Encryption[] - List of encryption configurations for the content. Structure is documented below.
- inputs
Job
Config Input[] - List of input assets stored in Cloud Storage. Structure is documented below.
- manifests
Job
Config Manifest[] - Manifest configuration. Structure is documented below.
- mux
Streams JobConfig Mux Stream[] - Multiplexing settings for output stream. Structure is documented below.
- output
Job
Config Output - Location of output file(s) in a Cloud Storage bucket. Structure is documented below.
- overlays
Job
Config Overlay[] - List of overlays on the output video, in descending Z-order. Structure is documented below.
- pubsub
Destination JobConfig Pubsub Destination - Pub/Sub destination. Structure is documented below.
- ad_
breaks Sequence[JobConfig Ad Break] - Ad break. Structure is documented below.
- edit_
lists Sequence[JobConfig Edit List] - List of input assets stored in Cloud Storage. Structure is documented below.
- elementary_
streams Sequence[JobConfig Elementary Stream] - List of input assets stored in Cloud Storage. Structure is documented below.
- encryptions
Sequence[Job
Config Encryption] - List of encryption configurations for the content. Structure is documented below.
- inputs
Sequence[Job
Config Input] - List of input assets stored in Cloud Storage. Structure is documented below.
- manifests
Sequence[Job
Config Manifest] - Manifest configuration. Structure is documented below.
- mux_
streams Sequence[JobConfig Mux Stream] - Multiplexing settings for output stream. Structure is documented below.
- output
Job
Config Output - Location of output file(s) in a Cloud Storage bucket. Structure is documented below.
- overlays
Sequence[Job
Config Overlay] - List of overlays on the output video, in descending Z-order. Structure is documented below.
- pubsub_
destination JobConfig Pubsub Destination - Pub/Sub destination. Structure is documented below.
- ad
Breaks List<Property Map> - Ad break. Structure is documented below.
- edit
Lists List<Property Map> - List of input assets stored in Cloud Storage. Structure is documented below.
- elementary
Streams List<Property Map> - List of input assets stored in Cloud Storage. Structure is documented below.
- encryptions List<Property Map>
- List of encryption configurations for the content. Structure is documented below.
- inputs List<Property Map>
- List of input assets stored in Cloud Storage. Structure is documented below.
- manifests List<Property Map>
- Manifest configuration. Structure is documented below.
- mux
Streams List<Property Map> - Multiplexing settings for output stream. Structure is documented below.
- output Property Map
- Location of output file(s) in a Cloud Storage bucket. Structure is documented below.
- overlays List<Property Map>
- List of overlays on the output video, in descending Z-order. Structure is documented below.
- pubsub
Destination Property Map - Pub/Sub destination. Structure is documented below.
JobConfigAdBreak, JobConfigAdBreakArgs
- Start
Time stringOffset - Start time in seconds for the ad break, relative to the output file timeline
- Start
Time stringOffset - Start time in seconds for the ad break, relative to the output file timeline
- start
Time StringOffset - Start time in seconds for the ad break, relative to the output file timeline
- start
Time stringOffset - Start time in seconds for the ad break, relative to the output file timeline
- start_
time_ stroffset - Start time in seconds for the ad break, relative to the output file timeline
- start
Time StringOffset - Start time in seconds for the ad break, relative to the output file timeline
JobConfigEditList, JobConfigEditListArgs
- Inputs List<string>
- List of values identifying files that should be used in this atom.
- Key string
- A unique key for this atom.
- Start
Time stringOffset - Start time in seconds for the atom, relative to the input file timeline. The default is
0s
.
- Inputs []string
- List of values identifying files that should be used in this atom.
- Key string
- A unique key for this atom.
- Start
Time stringOffset - Start time in seconds for the atom, relative to the input file timeline. The default is
0s
.
- inputs List<String>
- List of values identifying files that should be used in this atom.
- key String
- A unique key for this atom.
- start
Time StringOffset - Start time in seconds for the atom, relative to the input file timeline. The default is
0s
.
- inputs string[]
- List of values identifying files that should be used in this atom.
- key string
- A unique key for this atom.
- start
Time stringOffset - Start time in seconds for the atom, relative to the input file timeline. The default is
0s
.
- inputs Sequence[str]
- List of values identifying files that should be used in this atom.
- key str
- A unique key for this atom.
- start_
time_ stroffset - Start time in seconds for the atom, relative to the input file timeline. The default is
0s
.
- inputs List<String>
- List of values identifying files that should be used in this atom.
- key String
- A unique key for this atom.
- start
Time StringOffset - Start time in seconds for the atom, relative to the input file timeline. The default is
0s
.
JobConfigElementaryStream, JobConfigElementaryStreamArgs
- Audio
Stream JobConfig Elementary Stream Audio Stream - Encoding of an audio stream. Structure is documented below.
- Key string
- A unique key for this atom.
- Video
Stream JobConfig Elementary Stream Video Stream - Encoding of a video stream. Structure is documented below.
- Audio
Stream JobConfig Elementary Stream Audio Stream - Encoding of an audio stream. Structure is documented below.
- Key string
- A unique key for this atom.
- Video
Stream JobConfig Elementary Stream Video Stream - Encoding of a video stream. Structure is documented below.
- audio
Stream JobConfig Elementary Stream Audio Stream - Encoding of an audio stream. Structure is documented below.
- key String
- A unique key for this atom.
- video
Stream JobConfig Elementary Stream Video Stream - Encoding of a video stream. Structure is documented below.
- audio
Stream JobConfig Elementary Stream Audio Stream - Encoding of an audio stream. Structure is documented below.
- key string
- A unique key for this atom.
- video
Stream JobConfig Elementary Stream Video Stream - Encoding of a video stream. Structure is documented below.
- audio_
stream JobConfig Elementary Stream Audio Stream - Encoding of an audio stream. Structure is documented below.
- key str
- A unique key for this atom.
- video_
stream JobConfig Elementary Stream Video Stream - Encoding of a video stream. Structure is documented below.
- audio
Stream Property Map - Encoding of an audio stream. Structure is documented below.
- key String
- A unique key for this atom.
- video
Stream Property Map - Encoding of a video stream. Structure is documented below.
JobConfigElementaryStreamAudioStream, JobConfigElementaryStreamAudioStreamArgs
- Bitrate
Bps int - Audio bitrate in bits per second.
- Channel
Count int - Number of audio channels. The default is
2
. - Channel
Layouts List<string> - A list of channel names specifying layout of the audio channels. The default is ["fl", "fr"].
- Codec string
- The codec for this audio stream. The default is
aac
. - Sample
Rate intHertz - The audio sample rate in Hertz. The default is
48000
.
- Bitrate
Bps int - Audio bitrate in bits per second.
- Channel
Count int - Number of audio channels. The default is
2
. - Channel
Layouts []string - A list of channel names specifying layout of the audio channels. The default is ["fl", "fr"].
- Codec string
- The codec for this audio stream. The default is
aac
. - Sample
Rate intHertz - The audio sample rate in Hertz. The default is
48000
.
- bitrate
Bps Integer - Audio bitrate in bits per second.
- channel
Count Integer - Number of audio channels. The default is
2
. - channel
Layouts List<String> - A list of channel names specifying layout of the audio channels. The default is ["fl", "fr"].
- codec String
- The codec for this audio stream. The default is
aac
. - sample
Rate IntegerHertz - The audio sample rate in Hertz. The default is
48000
.
- bitrate
Bps number - Audio bitrate in bits per second.
- channel
Count number - Number of audio channels. The default is
2
. - channel
Layouts string[] - A list of channel names specifying layout of the audio channels. The default is ["fl", "fr"].
- codec string
- The codec for this audio stream. The default is
aac
. - sample
Rate numberHertz - The audio sample rate in Hertz. The default is
48000
.
- bitrate_
bps int - Audio bitrate in bits per second.
- channel_
count int - Number of audio channels. The default is
2
. - channel_
layouts Sequence[str] - A list of channel names specifying layout of the audio channels. The default is ["fl", "fr"].
- codec str
- The codec for this audio stream. The default is
aac
. - sample_
rate_ inthertz - The audio sample rate in Hertz. The default is
48000
.
- bitrate
Bps Number - Audio bitrate in bits per second.
- channel
Count Number - Number of audio channels. The default is
2
. - channel
Layouts List<String> - A list of channel names specifying layout of the audio channels. The default is ["fl", "fr"].
- codec String
- The codec for this audio stream. The default is
aac
. - sample
Rate NumberHertz - The audio sample rate in Hertz. The default is
48000
.
JobConfigElementaryStreamVideoStream, JobConfigElementaryStreamVideoStreamArgs
- H264
Job
Config Elementary Stream Video Stream H264 H264 codec settings Structure is documented below.
The
h264
block supports:
- H264
Job
Config Elementary Stream Video Stream H264 H264 codec settings Structure is documented below.
The
h264
block supports:
- h264
Job
Config Elementary Stream Video Stream H264 H264 codec settings Structure is documented below.
The
h264
block supports:
- h264
Job
Config Elementary Stream Video Stream H264 H264 codec settings Structure is documented below.
The
h264
block supports:
- h264
Job
Config Elementary Stream Video Stream H264 H264 codec settings Structure is documented below.
The
h264
block supports:
- h264 Property Map
H264 codec settings Structure is documented below.
The
h264
block supports:
JobConfigElementaryStreamVideoStreamH264, JobConfigElementaryStreamVideoStreamH264Args
- Bitrate
Bps int - The video bitrate in bits per second.
- Frame
Rate int - The target video frame rate in frames per second (FPS).
- Crf
Level int - Target CRF level. The default is '21'.
- Entropy
Coder string - The entropy coder to use. The default is 'cabac'.
- Gop
Duration string - Select the GOP size based on the specified duration. The default is '3s'.
- Height
Pixels int - The height of the video in pixels.
- Hlg
Job
Config Elementary Stream Video Stream H264Hlg - HLG color format setting for H264.
- Pixel
Format string - Pixel format to use. The default is 'yuv420p'.
- Preset string
- Enforces the specified codec preset. The default is 'veryfast'.
- Profile string
- Enforces the specified codec profile.
- Rate
Control stringMode - Specify the mode. The default is 'vbr'.
- Sdr
Job
Config Elementary Stream Video Stream H264Sdr - SDR color format setting for H264.
- Vbv
Fullness intBits - Initial fullness of the Video Buffering Verifier (VBV) buffer in bits.
- Vbv
Size intBits - Size of the Video Buffering Verifier (VBV) buffer in bits.
- Width
Pixels int - The width of the video in pixels.
- Bitrate
Bps int - The video bitrate in bits per second.
- Frame
Rate int - The target video frame rate in frames per second (FPS).
- Crf
Level int - Target CRF level. The default is '21'.
- Entropy
Coder string - The entropy coder to use. The default is 'cabac'.
- Gop
Duration string - Select the GOP size based on the specified duration. The default is '3s'.
- Height
Pixels int - The height of the video in pixels.
- Hlg
Job
Config Elementary Stream Video Stream H264Hlg - HLG color format setting for H264.
- Pixel
Format string - Pixel format to use. The default is 'yuv420p'.
- Preset string
- Enforces the specified codec preset. The default is 'veryfast'.
- Profile string
- Enforces the specified codec profile.
- Rate
Control stringMode - Specify the mode. The default is 'vbr'.
- Sdr
Job
Config Elementary Stream Video Stream H264Sdr - SDR color format setting for H264.
- Vbv
Fullness intBits - Initial fullness of the Video Buffering Verifier (VBV) buffer in bits.
- Vbv
Size intBits - Size of the Video Buffering Verifier (VBV) buffer in bits.
- Width
Pixels int - The width of the video in pixels.
- bitrate
Bps Integer - The video bitrate in bits per second.
- frame
Rate Integer - The target video frame rate in frames per second (FPS).
- crf
Level Integer - Target CRF level. The default is '21'.
- entropy
Coder String - The entropy coder to use. The default is 'cabac'.
- gop
Duration String - Select the GOP size based on the specified duration. The default is '3s'.
- height
Pixels Integer - The height of the video in pixels.
- hlg
Job
Config Elementary Stream Video Stream H264Hlg - HLG color format setting for H264.
- pixel
Format String - Pixel format to use. The default is 'yuv420p'.
- preset String
- Enforces the specified codec preset. The default is 'veryfast'.
- profile String
- Enforces the specified codec profile.
- rate
Control StringMode - Specify the mode. The default is 'vbr'.
- sdr
Job
Config Elementary Stream Video Stream H264Sdr - SDR color format setting for H264.
- vbv
Fullness IntegerBits - Initial fullness of the Video Buffering Verifier (VBV) buffer in bits.
- vbv
Size IntegerBits - Size of the Video Buffering Verifier (VBV) buffer in bits.
- width
Pixels Integer - The width of the video in pixels.
- bitrate
Bps number - The video bitrate in bits per second.
- frame
Rate number - The target video frame rate in frames per second (FPS).
- crf
Level number - Target CRF level. The default is '21'.
- entropy
Coder string - The entropy coder to use. The default is 'cabac'.
- gop
Duration string - Select the GOP size based on the specified duration. The default is '3s'.
- height
Pixels number - The height of the video in pixels.
- hlg
Job
Config Elementary Stream Video Stream H264Hlg - HLG color format setting for H264.
- pixel
Format string - Pixel format to use. The default is 'yuv420p'.
- preset string
- Enforces the specified codec preset. The default is 'veryfast'.
- profile string
- Enforces the specified codec profile.
- rate
Control stringMode - Specify the mode. The default is 'vbr'.
- sdr
Job
Config Elementary Stream Video Stream H264Sdr - SDR color format setting for H264.
- vbv
Fullness numberBits - Initial fullness of the Video Buffering Verifier (VBV) buffer in bits.
- vbv
Size numberBits - Size of the Video Buffering Verifier (VBV) buffer in bits.
- width
Pixels number - The width of the video in pixels.
- bitrate_
bps int - The video bitrate in bits per second.
- frame_
rate int - The target video frame rate in frames per second (FPS).
- crf_
level int - Target CRF level. The default is '21'.
- entropy_
coder str - The entropy coder to use. The default is 'cabac'.
- gop_
duration str - Select the GOP size based on the specified duration. The default is '3s'.
- height_
pixels int - The height of the video in pixels.
- hlg
Job
Config Elementary Stream Video Stream H264Hlg - HLG color format setting for H264.
- pixel_
format str - Pixel format to use. The default is 'yuv420p'.
- preset str
- Enforces the specified codec preset. The default is 'veryfast'.
- profile str
- Enforces the specified codec profile.
- rate_
control_ strmode - Specify the mode. The default is 'vbr'.
- sdr
Job
Config Elementary Stream Video Stream H264Sdr - SDR color format setting for H264.
- vbv_
fullness_ intbits - Initial fullness of the Video Buffering Verifier (VBV) buffer in bits.
- vbv_
size_ intbits - Size of the Video Buffering Verifier (VBV) buffer in bits.
- width_
pixels int - The width of the video in pixels.
- bitrate
Bps Number - The video bitrate in bits per second.
- frame
Rate Number - The target video frame rate in frames per second (FPS).
- crf
Level Number - Target CRF level. The default is '21'.
- entropy
Coder String - The entropy coder to use. The default is 'cabac'.
- gop
Duration String - Select the GOP size based on the specified duration. The default is '3s'.
- height
Pixels Number - The height of the video in pixels.
- hlg Property Map
- HLG color format setting for H264.
- pixel
Format String - Pixel format to use. The default is 'yuv420p'.
- preset String
- Enforces the specified codec preset. The default is 'veryfast'.
- profile String
- Enforces the specified codec profile.
- rate
Control StringMode - Specify the mode. The default is 'vbr'.
- sdr Property Map
- SDR color format setting for H264.
- vbv
Fullness NumberBits - Initial fullness of the Video Buffering Verifier (VBV) buffer in bits.
- vbv
Size NumberBits - Size of the Video Buffering Verifier (VBV) buffer in bits.
- width
Pixels Number - The width of the video in pixels.
JobConfigEncryption, JobConfigEncryptionArgs
- Id string
- Identifier for this set of encryption options.
- Aes128
Job
Config Encryption Aes128 - Configuration for AES-128 encryption.
- Drm
Systems JobConfig Encryption Drm Systems - DRM system(s) to use; at least one must be specified. If a DRM system is omitted, it is considered disabled. Structure is documented below.
- Mpeg
Cenc JobConfig Encryption Mpeg Cenc - Configuration for MPEG Common Encryption (MPEG-CENC). Structure is documented below.
- Sample
Aes JobConfig Encryption Sample Aes - Configuration for SAMPLE-AES encryption.
- Secret
Manager JobKey Source Config Encryption Secret Manager Key Source - Configuration for secrets stored in Google Secret Manager. Structure is documented below.
- Id string
- Identifier for this set of encryption options.
- Aes128
Job
Config Encryption Aes128 - Configuration for AES-128 encryption.
- Drm
Systems JobConfig Encryption Drm Systems - DRM system(s) to use; at least one must be specified. If a DRM system is omitted, it is considered disabled. Structure is documented below.
- Mpeg
Cenc JobConfig Encryption Mpeg Cenc - Configuration for MPEG Common Encryption (MPEG-CENC). Structure is documented below.
- Sample
Aes JobConfig Encryption Sample Aes - Configuration for SAMPLE-AES encryption.
- Secret
Manager JobKey Source Config Encryption Secret Manager Key Source - Configuration for secrets stored in Google Secret Manager. Structure is documented below.
- id String
- Identifier for this set of encryption options.
- aes128
Job
Config Encryption Aes128 - Configuration for AES-128 encryption.
- drm
Systems JobConfig Encryption Drm Systems - DRM system(s) to use; at least one must be specified. If a DRM system is omitted, it is considered disabled. Structure is documented below.
- mpeg
Cenc JobConfig Encryption Mpeg Cenc - Configuration for MPEG Common Encryption (MPEG-CENC). Structure is documented below.
- sample
Aes JobConfig Encryption Sample Aes - Configuration for SAMPLE-AES encryption.
- secret
Manager JobKey Source Config Encryption Secret Manager Key Source - Configuration for secrets stored in Google Secret Manager. Structure is documented below.
- id string
- Identifier for this set of encryption options.
- aes128
Job
Config Encryption Aes128 - Configuration for AES-128 encryption.
- drm
Systems JobConfig Encryption Drm Systems - DRM system(s) to use; at least one must be specified. If a DRM system is omitted, it is considered disabled. Structure is documented below.
- mpeg
Cenc JobConfig Encryption Mpeg Cenc - Configuration for MPEG Common Encryption (MPEG-CENC). Structure is documented below.
- sample
Aes JobConfig Encryption Sample Aes - Configuration for SAMPLE-AES encryption.
- secret
Manager JobKey Source Config Encryption Secret Manager Key Source - Configuration for secrets stored in Google Secret Manager. Structure is documented below.
- id str
- Identifier for this set of encryption options.
- aes128
Job
Config Encryption Aes128 - Configuration for AES-128 encryption.
- drm_
systems JobConfig Encryption Drm Systems - DRM system(s) to use; at least one must be specified. If a DRM system is omitted, it is considered disabled. Structure is documented below.
- mpeg_
cenc JobConfig Encryption Mpeg Cenc - Configuration for MPEG Common Encryption (MPEG-CENC). Structure is documented below.
- sample_
aes JobConfig Encryption Sample Aes - Configuration for SAMPLE-AES encryption.
- secret_
manager_ Jobkey_ source Config Encryption Secret Manager Key Source - Configuration for secrets stored in Google Secret Manager. Structure is documented below.
- id String
- Identifier for this set of encryption options.
- aes128 Property Map
- Configuration for AES-128 encryption.
- drm
Systems Property Map - DRM system(s) to use; at least one must be specified. If a DRM system is omitted, it is considered disabled. Structure is documented below.
- mpeg
Cenc Property Map - Configuration for MPEG Common Encryption (MPEG-CENC). Structure is documented below.
- sample
Aes Property Map - Configuration for SAMPLE-AES encryption.
- secret
Manager Property MapKey Source - Configuration for secrets stored in Google Secret Manager. Structure is documented below.
JobConfigEncryptionDrmSystems, JobConfigEncryptionDrmSystemsArgs
- Clearkey
Job
Config Encryption Drm Systems Clearkey - Clearkey configuration.
- Fairplay
Job
Config Encryption Drm Systems Fairplay - Fairplay configuration.
- Playready
Job
Config Encryption Drm Systems Playready - Playready configuration.
- Widevine
Job
Config Encryption Drm Systems Widevine - Widevine configuration.
- Clearkey
Job
Config Encryption Drm Systems Clearkey - Clearkey configuration.
- Fairplay
Job
Config Encryption Drm Systems Fairplay - Fairplay configuration.
- Playready
Job
Config Encryption Drm Systems Playready - Playready configuration.
- Widevine
Job
Config Encryption Drm Systems Widevine - Widevine configuration.
- clearkey
Job
Config Encryption Drm Systems Clearkey - Clearkey configuration.
- fairplay
Job
Config Encryption Drm Systems Fairplay - Fairplay configuration.
- playready
Job
Config Encryption Drm Systems Playready - Playready configuration.
- widevine
Job
Config Encryption Drm Systems Widevine - Widevine configuration.
- clearkey
Job
Config Encryption Drm Systems Clearkey - Clearkey configuration.
- fairplay
Job
Config Encryption Drm Systems Fairplay - Fairplay configuration.
- playready
Job
Config Encryption Drm Systems Playready - Playready configuration.
- widevine
Job
Config Encryption Drm Systems Widevine - Widevine configuration.
- clearkey
Job
Config Encryption Drm Systems Clearkey - Clearkey configuration.
- fairplay
Job
Config Encryption Drm Systems Fairplay - Fairplay configuration.
- playready
Job
Config Encryption Drm Systems Playready - Playready configuration.
- widevine
Job
Config Encryption Drm Systems Widevine - Widevine configuration.
- clearkey Property Map
- Clearkey configuration.
- fairplay Property Map
- Fairplay configuration.
- playready Property Map
- Playready configuration.
- widevine Property Map
- Widevine configuration.
JobConfigEncryptionMpegCenc, JobConfigEncryptionMpegCencArgs
- Scheme string
- Specify the encryption scheme.
- Scheme string
- Specify the encryption scheme.
- scheme String
- Specify the encryption scheme.
- scheme string
- Specify the encryption scheme.
- scheme str
- Specify the encryption scheme.
- scheme String
- Specify the encryption scheme.
JobConfigEncryptionSecretManagerKeySource, JobConfigEncryptionSecretManagerKeySourceArgs
- Secret
Version string - The name of the Secret Version containing the encryption key in the following format: projects/{project}/secrets/{secret_id}/versions/{version_number}.
- Secret
Version string - The name of the Secret Version containing the encryption key in the following format: projects/{project}/secrets/{secret_id}/versions/{version_number}.
- secret
Version String - The name of the Secret Version containing the encryption key in the following format: projects/{project}/secrets/{secret_id}/versions/{version_number}.
- secret
Version string - The name of the Secret Version containing the encryption key in the following format: projects/{project}/secrets/{secret_id}/versions/{version_number}.
- secret_
version str - The name of the Secret Version containing the encryption key in the following format: projects/{project}/secrets/{secret_id}/versions/{version_number}.
- secret
Version String - The name of the Secret Version containing the encryption key in the following format: projects/{project}/secrets/{secret_id}/versions/{version_number}.
JobConfigInput, JobConfigInputArgs
- Key string
- A unique key for this input. Must be specified when using advanced mapping and edit lists.
- Uri string
- URI of the media. Input files must be at least 5 seconds in duration and stored in Cloud Storage (for example, gs://bucket/inputs/file.mp4). If empty, the value is populated from Job.input_uri.
- Key string
- A unique key for this input. Must be specified when using advanced mapping and edit lists.
- Uri string
- URI of the media. Input files must be at least 5 seconds in duration and stored in Cloud Storage (for example, gs://bucket/inputs/file.mp4). If empty, the value is populated from Job.input_uri.
- key String
- A unique key for this input. Must be specified when using advanced mapping and edit lists.
- uri String
- URI of the media. Input files must be at least 5 seconds in duration and stored in Cloud Storage (for example, gs://bucket/inputs/file.mp4). If empty, the value is populated from Job.input_uri.
- key string
- A unique key for this input. Must be specified when using advanced mapping and edit lists.
- uri string
- URI of the media. Input files must be at least 5 seconds in duration and stored in Cloud Storage (for example, gs://bucket/inputs/file.mp4). If empty, the value is populated from Job.input_uri.
- key String
- A unique key for this input. Must be specified when using advanced mapping and edit lists.
- uri String
- URI of the media. Input files must be at least 5 seconds in duration and stored in Cloud Storage (for example, gs://bucket/inputs/file.mp4). If empty, the value is populated from Job.input_uri.
JobConfigManifest, JobConfigManifestArgs
- File
Name string - The name of the generated file. The default is
manifest
. - Mux
Streams List<string> - List of user supplied MuxStream.key values that should appear in this manifest.
- Type string
- Type of the manifest.
Possible values are:
MANIFEST_TYPE_UNSPECIFIED
,HLS
,DASH
.
- File
Name string - The name of the generated file. The default is
manifest
. - Mux
Streams []string - List of user supplied MuxStream.key values that should appear in this manifest.
- Type string
- Type of the manifest.
Possible values are:
MANIFEST_TYPE_UNSPECIFIED
,HLS
,DASH
.
- file
Name String - The name of the generated file. The default is
manifest
. - mux
Streams List<String> - List of user supplied MuxStream.key values that should appear in this manifest.
- type String
- Type of the manifest.
Possible values are:
MANIFEST_TYPE_UNSPECIFIED
,HLS
,DASH
.
- file
Name string - The name of the generated file. The default is
manifest
. - mux
Streams string[] - List of user supplied MuxStream.key values that should appear in this manifest.
- type string
- Type of the manifest.
Possible values are:
MANIFEST_TYPE_UNSPECIFIED
,HLS
,DASH
.
- file_
name str - The name of the generated file. The default is
manifest
. - mux_
streams Sequence[str] - List of user supplied MuxStream.key values that should appear in this manifest.
- type str
- Type of the manifest.
Possible values are:
MANIFEST_TYPE_UNSPECIFIED
,HLS
,DASH
.
- file
Name String - The name of the generated file. The default is
manifest
. - mux
Streams List<String> - List of user supplied MuxStream.key values that should appear in this manifest.
- type String
- Type of the manifest.
Possible values are:
MANIFEST_TYPE_UNSPECIFIED
,HLS
,DASH
.
JobConfigMuxStream, JobConfigMuxStreamArgs
- Container string
- The container format. The default is
mp4
. - Elementary
Streams List<string> - List of ElementaryStream.key values multiplexed in this stream.
- Encryption
Id string - Identifier of the encryption configuration to use.
- File
Name string - The name of the generated file.
- Key string
- A unique key for this multiplexed stream.
- Segment
Settings JobConfig Mux Stream Segment Settings - Segment settings for ts, fmp4 and vtt. Structure is documented below.
- Container string
- The container format. The default is
mp4
. - Elementary
Streams []string - List of ElementaryStream.key values multiplexed in this stream.
- Encryption
Id string - Identifier of the encryption configuration to use.
- File
Name string - The name of the generated file.
- Key string
- A unique key for this multiplexed stream.
- Segment
Settings JobConfig Mux Stream Segment Settings - Segment settings for ts, fmp4 and vtt. Structure is documented below.
- container String
- The container format. The default is
mp4
. - elementary
Streams List<String> - List of ElementaryStream.key values multiplexed in this stream.
- encryption
Id String - Identifier of the encryption configuration to use.
- file
Name String - The name of the generated file.
- key String
- A unique key for this multiplexed stream.
- segment
Settings JobConfig Mux Stream Segment Settings - Segment settings for ts, fmp4 and vtt. Structure is documented below.
- container string
- The container format. The default is
mp4
. - elementary
Streams string[] - List of ElementaryStream.key values multiplexed in this stream.
- encryption
Id string - Identifier of the encryption configuration to use.
- file
Name string - The name of the generated file.
- key string
- A unique key for this multiplexed stream.
- segment
Settings JobConfig Mux Stream Segment Settings - Segment settings for ts, fmp4 and vtt. Structure is documented below.
- container str
- The container format. The default is
mp4
. - elementary_
streams Sequence[str] - List of ElementaryStream.key values multiplexed in this stream.
- encryption_
id str - Identifier of the encryption configuration to use.
- file_
name str - The name of the generated file.
- key str
- A unique key for this multiplexed stream.
- segment_
settings JobConfig Mux Stream Segment Settings - Segment settings for ts, fmp4 and vtt. Structure is documented below.
- container String
- The container format. The default is
mp4
. - elementary
Streams List<String> - List of ElementaryStream.key values multiplexed in this stream.
- encryption
Id String - Identifier of the encryption configuration to use.
- file
Name String - The name of the generated file.
- key String
- A unique key for this multiplexed stream.
- segment
Settings Property Map - Segment settings for ts, fmp4 and vtt. Structure is documented below.
JobConfigMuxStreamSegmentSettings, JobConfigMuxStreamSegmentSettingsArgs
- Segment
Duration string - Duration of the segments in seconds. The default is
6.0s
.
- Segment
Duration string - Duration of the segments in seconds. The default is
6.0s
.
- segment
Duration String - Duration of the segments in seconds. The default is
6.0s
.
- segment
Duration string - Duration of the segments in seconds. The default is
6.0s
.
- segment_
duration str - Duration of the segments in seconds. The default is
6.0s
.
- segment
Duration String - Duration of the segments in seconds. The default is
6.0s
.
JobConfigOutput, JobConfigOutputArgs
- Uri string
- URI for the output file(s). For example, gs://my-bucket/outputs/.
- Uri string
- URI for the output file(s). For example, gs://my-bucket/outputs/.
- uri String
- URI for the output file(s). For example, gs://my-bucket/outputs/.
- uri string
- URI for the output file(s). For example, gs://my-bucket/outputs/.
- uri str
- URI for the output file(s). For example, gs://my-bucket/outputs/.
- uri String
- URI for the output file(s). For example, gs://my-bucket/outputs/.
JobConfigOverlay, JobConfigOverlayArgs
- Animations
List<Job
Config Overlay Animation> - List of animations. The list should be chronological, without any time overlap. Structure is documented below.
- Image
Job
Config Overlay Image - Image overlay. Structure is documented below.
- Animations
[]Job
Config Overlay Animation - List of animations. The list should be chronological, without any time overlap. Structure is documented below.
- Image
Job
Config Overlay Image - Image overlay. Structure is documented below.
- animations
List<Job
Config Overlay Animation> - List of animations. The list should be chronological, without any time overlap. Structure is documented below.
- image
Job
Config Overlay Image - Image overlay. Structure is documented below.
- animations
Job
Config Overlay Animation[] - List of animations. The list should be chronological, without any time overlap. Structure is documented below.
- image
Job
Config Overlay Image - Image overlay. Structure is documented below.
- animations
Sequence[Job
Config Overlay Animation] - List of animations. The list should be chronological, without any time overlap. Structure is documented below.
- image
Job
Config Overlay Image - Image overlay. Structure is documented below.
- animations List<Property Map>
- List of animations. The list should be chronological, without any time overlap. Structure is documented below.
- image Property Map
- Image overlay. Structure is documented below.
JobConfigOverlayAnimation, JobConfigOverlayAnimationArgs
- Animation
Fade JobConfig Overlay Animation Animation Fade - Display overlay object with fade animation. Structure is documented below.
- Animation
Fade JobConfig Overlay Animation Animation Fade - Display overlay object with fade animation. Structure is documented below.
- animation
Fade JobConfig Overlay Animation Animation Fade - Display overlay object with fade animation. Structure is documented below.
- animation
Fade JobConfig Overlay Animation Animation Fade - Display overlay object with fade animation. Structure is documented below.
- animation_
fade JobConfig Overlay Animation Animation Fade - Display overlay object with fade animation. Structure is documented below.
- animation
Fade Property Map - Display overlay object with fade animation. Structure is documented below.
JobConfigOverlayAnimationAnimationFade, JobConfigOverlayAnimationAnimationFadeArgs
- Fade
Type string - Required. Type of fade animation:
FADE_IN
orFADE_OUT
. The possible values are:FADE_TYPE_UNSPECIFIED
: The fade type is not specified.FADE_IN
: Fade the overlay object into view.FADE_OUT
: Fade the overlay object out of view. Possible values are:FADE_TYPE_UNSPECIFIED
,FADE_IN
,FADE_OUT
.
- End
Time stringOffset - The time to end the fade animation, in seconds.
- Start
Time stringOffset - The time to start the fade animation, in seconds.
- Xy
Job
Config Overlay Animation Animation Fade Xy - Normalized coordinates based on output video resolution. Structure is documented below.
- Fade
Type string - Required. Type of fade animation:
FADE_IN
orFADE_OUT
. The possible values are:FADE_TYPE_UNSPECIFIED
: The fade type is not specified.FADE_IN
: Fade the overlay object into view.FADE_OUT
: Fade the overlay object out of view. Possible values are:FADE_TYPE_UNSPECIFIED
,FADE_IN
,FADE_OUT
.
- End
Time stringOffset - The time to end the fade animation, in seconds.
- Start
Time stringOffset - The time to start the fade animation, in seconds.
- Xy
Job
Config Overlay Animation Animation Fade Xy - Normalized coordinates based on output video resolution. Structure is documented below.
- fade
Type String - Required. Type of fade animation:
FADE_IN
orFADE_OUT
. The possible values are:FADE_TYPE_UNSPECIFIED
: The fade type is not specified.FADE_IN
: Fade the overlay object into view.FADE_OUT
: Fade the overlay object out of view. Possible values are:FADE_TYPE_UNSPECIFIED
,FADE_IN
,FADE_OUT
.
- end
Time StringOffset - The time to end the fade animation, in seconds.
- start
Time StringOffset - The time to start the fade animation, in seconds.
- xy
Job
Config Overlay Animation Animation Fade Xy - Normalized coordinates based on output video resolution. Structure is documented below.
- fade
Type string - Required. Type of fade animation:
FADE_IN
orFADE_OUT
. The possible values are:FADE_TYPE_UNSPECIFIED
: The fade type is not specified.FADE_IN
: Fade the overlay object into view.FADE_OUT
: Fade the overlay object out of view. Possible values are:FADE_TYPE_UNSPECIFIED
,FADE_IN
,FADE_OUT
.
- end
Time stringOffset - The time to end the fade animation, in seconds.
- start
Time stringOffset - The time to start the fade animation, in seconds.
- xy
Job
Config Overlay Animation Animation Fade Xy - Normalized coordinates based on output video resolution. Structure is documented below.
- fade_
type str - Required. Type of fade animation:
FADE_IN
orFADE_OUT
. The possible values are:FADE_TYPE_UNSPECIFIED
: The fade type is not specified.FADE_IN
: Fade the overlay object into view.FADE_OUT
: Fade the overlay object out of view. Possible values are:FADE_TYPE_UNSPECIFIED
,FADE_IN
,FADE_OUT
.
- end_
time_ stroffset - The time to end the fade animation, in seconds.
- start_
time_ stroffset - The time to start the fade animation, in seconds.
- xy
Job
Config Overlay Animation Animation Fade Xy - Normalized coordinates based on output video resolution. Structure is documented below.
- fade
Type String - Required. Type of fade animation:
FADE_IN
orFADE_OUT
. The possible values are:FADE_TYPE_UNSPECIFIED
: The fade type is not specified.FADE_IN
: Fade the overlay object into view.FADE_OUT
: Fade the overlay object out of view. Possible values are:FADE_TYPE_UNSPECIFIED
,FADE_IN
,FADE_OUT
.
- end
Time StringOffset - The time to end the fade animation, in seconds.
- start
Time StringOffset - The time to start the fade animation, in seconds.
- xy Property Map
- Normalized coordinates based on output video resolution. Structure is documented below.
JobConfigOverlayAnimationAnimationFadeXy, JobConfigOverlayAnimationAnimationFadeXyArgs
JobConfigOverlayImage, JobConfigOverlayImageArgs
- Uri string
- URI of the image in Cloud Storage. For example, gs://bucket/inputs/image.png.
- Uri string
- URI of the image in Cloud Storage. For example, gs://bucket/inputs/image.png.
- uri String
- URI of the image in Cloud Storage. For example, gs://bucket/inputs/image.png.
- uri string
- URI of the image in Cloud Storage. For example, gs://bucket/inputs/image.png.
- uri str
- URI of the image in Cloud Storage. For example, gs://bucket/inputs/image.png.
- uri String
- URI of the image in Cloud Storage. For example, gs://bucket/inputs/image.png.
JobConfigPubsubDestination, JobConfigPubsubDestinationArgs
- Topic string
- The name of the Pub/Sub topic to publish job completion notification to. For example: projects/{project}/topics/{topic}.
- Topic string
- The name of the Pub/Sub topic to publish job completion notification to. For example: projects/{project}/topics/{topic}.
- topic String
- The name of the Pub/Sub topic to publish job completion notification to. For example: projects/{project}/topics/{topic}.
- topic string
- The name of the Pub/Sub topic to publish job completion notification to. For example: projects/{project}/topics/{topic}.
- topic str
- The name of the Pub/Sub topic to publish job completion notification to. For example: projects/{project}/topics/{topic}.
- topic String
- The name of the Pub/Sub topic to publish job completion notification to. For example: projects/{project}/topics/{topic}.
Import
Job can be imported using any of these accepted formats:
{{project}}/{{name}}
{{project}} {{name}}
{{name}}
When using the pulumi import
command, Job can be imported using one of the formats above. For example:
$ pulumi import gcp:transcoder/job:Job default {{project}}/{{name}}
$ pulumi import gcp:transcoder/job:Job default "{{project}} {{name}}"
$ pulumi import gcp:transcoder/job:Job default {{name}}
To learn more about importing existing cloud resources, see Importing resources.
Package Details
- Repository
- Google Cloud (GCP) Classic pulumi/pulumi-gcp
- License
- Apache-2.0
- Notes
- This Pulumi package is based on the
google-beta
Terraform Provider.