MediaConvert에서 작업 템플릿 사용 - AWS SDK for JavaScript

곧 AWS SDK for JavaScript(v2)에 대한 지원이 종료될 예정임을 알려드립니다. AWS SDK for JavaScript v3로 마이그레이션하실 것을 권장합니다. 마이그레이션 날짜, 추가 세부 정보 및 방법에 대한 자세한 내용은 링크된 공지 사항을 참조하세요.

MediaConvert에서 작업 템플릿 사용

JavaScript code example that applies to Node.js execution

이 Node.js 코드 예제는 다음을 보여 줍니다.

  • MediaConvert 작업 템플릿을 생성하는 방법

  • 작업 템플릿을 사용하여 트랜스코딩 작업을 생성하는 방법.

  • 모든 작업 템플릿의 목록을 표시하는 방법.

  • 작업 템플릿을 삭제하는 방법.

시나리오

MediaConvert에서 트랜스코딩 작업을 생성하는 데 필요한 JSON은 많은 수의 설정을 포함하여 세부적입니다. 후속 작업을 생성하는 데 사용할 수 있는 작업 템플릿에 알려진 좋은 설정을 저장하여 작업 생성을 대폭 간소화할 수 있습니다. 이 예에서는 Node.js 모듈을 사용해 MediaConvert를 직접적으로 호출하여 작업 템플릿을 생성, 사용 및 관리합니다. 이 코드는 SDK for JavaScript에서 MediaConvert 클라이언트 클래스의 다음 메서드를 사용하여 이 작업을 수행합니다.

사전 필수 작업

이 예제를 설정하고 실행하려면 먼저 다음 작업을 완료합니다.

  • Node.js를 설치합니다. 자세한 내용은 Node.js 웹 사이트를 참조하세요.

  • 사용자 자격 증명을 사용하여 공유 구성 파일을 생성합니다. 공유 자격 증명 파일 제공에 대한 자세한 내용은 공유 인증 자격 증명 파일에서 Node.js에 인증 자격 증명 로드 섹션을 참조하세요.

  • 출력 파일이 저장된 Amazon S3 버킷 및 입력 파일에 대한 액세스 권한을 MediaConvert에 부여하는 IAM 역할을 생성합니다. 자세한 내용은 AWS Elemental MediaConvert 사용 설명서IAM 권한 설정하기를 참조하세요.

작업 템플릿 생성

파일 이름이 emc_create_jobtemplate.js인 Node.js 모듈을 생성합니다. 위와 같이 SDK를 구성해야 합니다.

템플릿 생성을 위한 파라미터 JSON을 지정합니다. 이전에 성공한 작업에서 대부분의 JSON 파라미터를 사용하여 템플릿에서 Settings 값을 지정할 수 있습니다. 이 예제에서는 MediaConvert에서 트랜스코딩 작업 생성 및 관리의 작업 설정을 사용합니다.

파라미터를 전달하는 AWS.MediaConvert 서비스 객체를 호출하기 위한 promise를 생성하여 createJobTemplate 메서드를 호출합니다. 그런 다음 promise 콜백에서 response를 처리합니다.

// Load the AWS SDK for Node.js var AWS = require("aws-sdk"); // Set the Region AWS.config.update({ region: "us-west-2" }); // Set the custom endpoint for your account AWS.config.mediaconvert = { endpoint: "ACCOUNT_ENDPOINT" }; var params = { Category: "YouTube Jobs", Description: "Final production transcode", Name: "DemoTemplate", Queue: "JOB_QUEUE_ARN", Settings: { OutputGroups: [ { Name: "File Group", OutputGroupSettings: { Type: "FILE_GROUP_SETTINGS", FileGroupSettings: { Destination: "s3://BUCKET_NAME/", }, }, Outputs: [ { VideoDescription: { ScalingBehavior: "DEFAULT", TimecodeInsertion: "DISABLED", AntiAlias: "ENABLED", Sharpness: 50, CodecSettings: { Codec: "H_264", H264Settings: { InterlaceMode: "PROGRESSIVE", NumberReferenceFrames: 3, Syntax: "DEFAULT", Softness: 0, GopClosedCadence: 1, GopSize: 90, Slices: 1, GopBReference: "DISABLED", SlowPal: "DISABLED", SpatialAdaptiveQuantization: "ENABLED", TemporalAdaptiveQuantization: "ENABLED", FlickerAdaptiveQuantization: "DISABLED", EntropyEncoding: "CABAC", Bitrate: 5000000, FramerateControl: "SPECIFIED", RateControlMode: "CBR", CodecProfile: "MAIN", Telecine: "NONE", MinIInterval: 0, AdaptiveQuantization: "HIGH", CodecLevel: "AUTO", FieldEncoding: "PAFF", SceneChangeDetect: "ENABLED", QualityTuningLevel: "SINGLE_PASS", FramerateConversionAlgorithm: "DUPLICATE_DROP", UnregisteredSeiTimecode: "DISABLED", GopSizeUnits: "FRAMES", ParControl: "SPECIFIED", NumberBFramesBetweenReferenceFrames: 2, RepeatPps: "DISABLED", FramerateNumerator: 30, FramerateDenominator: 1, ParNumerator: 1, ParDenominator: 1, }, }, AfdSignaling: "NONE", DropFrameTimecode: "ENABLED", RespondToAfd: "NONE", ColorMetadata: "INSERT", }, AudioDescriptions: [ { AudioTypeControl: "FOLLOW_INPUT", CodecSettings: { Codec: "AAC", AacSettings: { AudioDescriptionBroadcasterMix: "NORMAL", RateControlMode: "CBR", CodecProfile: "LC", CodingMode: "CODING_MODE_2_0", RawFormat: "NONE", SampleRate: 48000, Specification: "MPEG4", Bitrate: 64000, }, }, LanguageCodeControl: "FOLLOW_INPUT", AudioSourceName: "Audio Selector 1", }, ], ContainerSettings: { Container: "MP4", Mp4Settings: { CslgAtom: "INCLUDE", FreeSpaceBox: "EXCLUDE", MoovPlacement: "PROGRESSIVE_DOWNLOAD", }, }, NameModifier: "_1", }, ], }, ], AdAvailOffset: 0, Inputs: [ { AudioSelectors: { "Audio Selector 1": { Offset: 0, DefaultSelection: "NOT_DEFAULT", ProgramSelection: 1, SelectorType: "TRACK", Tracks: [1], }, }, VideoSelector: { ColorSpace: "FOLLOW", }, FilterEnable: "AUTO", PsiControl: "USE_PSI", FilterStrength: 0, DeblockFilter: "DISABLED", DenoiseFilter: "DISABLED", TimecodeSource: "EMBEDDED", }, ], TimecodeConfig: { Source: "EMBEDDED", }, }, }; // Create a promise on a MediaConvert object var templatePromise = new AWS.MediaConvert({ apiVersion: "2017-08-29" }) .createJobTemplate(params) .promise(); // Handle promise's fulfilled/rejected status templatePromise.then( function (data) { console.log("Success!", data); }, function (err) { console.log("Error", err); } );

예제를 실행하려면 명령줄에서 다음을 입력합니다.

node emc_create_jobtemplate.js

이 샘플 코드는 GitHub에서 찾을 수 있습니다.

작업 템플릿에서 트랜스코딩 작업 생성

파일 이름이 emc_template_createjob.js인 Node.js 모듈을 생성합니다. 위와 같이 SDK를 구성해야 합니다.

사용할 작업 템플릿의 이름, 생성하는 작업에 특정하게 사용할 Settings를 포함하여 작업 생성 파라미터 JSON을 생성합니다. 그런 다음 파라미터를 전달하는 AWS.MediaConvert 서비스 객체를 호출하기 위한 promise를 생성하여 createJobs 메서드를 호출합니다. promise 콜백에서 응답을 처리합니다.

// Load the AWS SDK for Node.js var AWS = require("aws-sdk"); // Set the Region AWS.config.update({ region: "us-west-2" }); // Set the custom endpoint for your account AWS.config.mediaconvert = { endpoint: "ACCOUNT_ENDPOINT" }; var params = { Queue: "QUEUE_ARN", JobTemplate: "TEMPLATE_NAME", Role: "ROLE_ARN", Settings: { Inputs: [ { AudioSelectors: { "Audio Selector 1": { Offset: 0, DefaultSelection: "NOT_DEFAULT", ProgramSelection: 1, SelectorType: "TRACK", Tracks: [1], }, }, VideoSelector: { ColorSpace: "FOLLOW", }, FilterEnable: "AUTO", PsiControl: "USE_PSI", FilterStrength: 0, DeblockFilter: "DISABLED", DenoiseFilter: "DISABLED", TimecodeSource: "EMBEDDED", FileInput: "s3://BUCKET_NAME/FILE_NAME", }, ], }, }; // Create a promise on a MediaConvert object var templateJobPromise = new AWS.MediaConvert({ apiVersion: "2017-08-29" }) .createJob(params) .promise(); // Handle promise's fulfilled/rejected status templateJobPromise.then( function (data) { console.log("Success! ", data); }, function (err) { console.log("Error", err); } );

예제를 실행하려면 명령줄에서 다음을 입력합니다.

node emc_template_createjob.js

이 샘플 코드는 GitHub에서 찾을 수 있습니다.

작업 템플릿 목록 표시

파일 이름이 emc_listtemplates.js인 Node.js 모듈을 생성합니다. 위와 같이 SDK를 구성해야 합니다.

AWS.MediaConvert 클라이언트 클래스의 listTemplates 메서드에 대한 요청 파라미터를 전달할 객체를 생성합니다. 나열할 템플릿(NAME, CREATION DATE, SYSTEM), 나열할 개수 및 정렬 순서를 결정하는 값을 포함시킵니다. listTemplates 메서드를 직접 호출하려면 MediaConvert 서비스 객체를 간접 호출하기 위한 promise를 생성하고 파라미터를 전달합니다. 그런 다음 promise 콜백에서 response를 처리합니다.

// Load the AWS SDK for Node.js var AWS = require("aws-sdk"); // Set the Region AWS.config.update({ region: "us-west-2" }); // Set the customer endpoint AWS.config.mediaconvert = { endpoint: "ACCOUNT_ENDPOINT" }; var params = { ListBy: "NAME", MaxResults: 10, Order: "ASCENDING", }; // Create a promise on a MediaConvert object var listTemplatesPromise = new AWS.MediaConvert({ apiVersion: "2017-08-29" }) .listJobTemplates(params) .promise(); // Handle promise's fulfilled/rejected status listTemplatesPromise.then( function (data) { console.log("Success ", data); }, function (err) { console.log("Error", err); } );

예제를 실행하려면 명령줄에서 다음을 입력합니다.

node emc_listtemplates.js

이 샘플 코드는 GitHub에서 찾을 수 있습니다.

작업 템플릿 삭제

파일 이름이 emc_deletetemplate.js인 Node.js 모듈을 생성합니다. 위와 같이 SDK를 구성해야 합니다.

삭제하려는 작업 템플릿의 이름을 AWS.MediaConvert 클라이언트 클래스의 deleteJobTemplate 메서드에 대한 파라미터로 전달할 객체를 생성합니다. deleteJobTemplate 메서드를 직접 호출하려면 MediaConvert 서비스 객체를 간접 호출하기 위한 promise를 생성하고 파라미터를 전달합니다. promise 콜백에서 응답을 처리합니다.

// Load the AWS SDK for Node.js var AWS = require("aws-sdk"); // Set the Region AWS.config.update({ region: "us-west-2" }); // Set the customer endpoint AWS.config.mediaconvert = { endpoint: "ACCOUNT_ENDPOINT" }; var params = { Name: "TEMPLATE_NAME", }; // Create a promise on a MediaConvert object var deleteTemplatePromise = new AWS.MediaConvert({ apiVersion: "2017-08-29" }) .deleteJobTemplate(params) .promise(); // Handle promise's fulfilled/rejected status deleteTemplatePromise.then( function (data) { console.log("Success ", data); }, function (err) { console.log("Error", err); } );

예제를 실행하려면 명령줄에서 다음을 입력합니다.

node emc_deletetemplate.js

이 샘플 코드는 GitHub에서 찾을 수 있습니다.