in source/lambda/burncaption/burncaption.js [118:272]
async function burnCaptions(videoId, video, language, translated) {
const transcribeBucket = process.env.TRANSCRIBE_BUCKET;
var inputCaptionsKey = "";
var outputNameModifier = "";
if (translated == "true") {
inputCaptionsKey = "burnedcaptions/" + videoId + "_" + language + ".srt";
outputNameModifier = "_" + videoId + "_translated";
} else {
inputCaptionsKey = "burnedcaptions/" + videoId + ".srt";
outputNameModifier = "_" + videoId + "_";
}
var inputCaptionsS3Path = "s3://" + transcribeBucket + "/" + inputCaptionsKey;
var inputVideoS3Path = video["s3VideoPath"];
var outputVideoS3Path =
"s3://" +
process.env.OUTPUT_VIDEO_BUCKET +
"/" +
process.env.OUTPUT_VIDEO_KEY_PREFIX +
"/";
var mediaConvertEndpoint = await getMediaConvertEndpoint();
console.log("INFO mediaConvertEndpoint is ", mediaConvertEndpoint);
AWS.config.mediaconvert = { endpoint: mediaConvertEndpoint };
var mediaConvertRole = process.env.MEDIACONVERT_ROLE;
var mediaConvertQueue = process.env.MEDIACONVERT_QUEUE;
var mediaConvertParams = {
Queue: mediaConvertQueue,
UserMetadata: {},
Role: mediaConvertRole,
Settings: {
TimecodeConfig: {
Source: "ZEROBASED",
},
OutputGroups: [
{
Name: "File Group",
Outputs: [
{
ContainerSettings: {
Container: "MP4",
Mp4Settings: {},
},
VideoDescription: {
CodecSettings: {
Codec: "H_264",
H264Settings: {
MaxBitrate: 5000000,
RateControlMode: "QVBR",
SceneChangeDetect: "TRANSITION_DETECTION",
},
},
},
AudioDescriptions: [
{
AudioSourceName: "Audio Selector 1",
CodecSettings: {
Codec: "AAC",
AacSettings: {
Bitrate: 96000,
CodingMode: "CODING_MODE_2_0",
SampleRate: 48000,
},
},
},
],
NameModifier: outputNameModifier,
CaptionDescriptions: [
{
CaptionSelectorName: "Captions Selector 1",
DestinationSettings: {
DestinationType: "BURN_IN",
BurninDestinationSettings: {
Alignment: "CENTERED",
OutlineSize: 3,
FontOpacity: 255,
FontColor: "WHITE",
BackgroundColor: "NONE",
OutlineColor: "BLACK",
},
},
LanguageCode: "ZHO",
},
],
},
],
OutputGroupSettings: {
Type: "FILE_GROUP_SETTINGS",
FileGroupSettings: {
Destination: outputVideoS3Path,
},
},
},
],
Inputs: [
{
AudioSelectors: {
"Audio Selector 1": {
DefaultSelection: "DEFAULT",
},
},
VideoSelector: {},
TimecodeSource: "ZEROBASED",
CaptionSelectors: {
"Captions Selector 1": {
SourceSettings: {
SourceType: "SRT",
FileSourceSettings: {
SourceFile: inputCaptionsS3Path,
},
},
},
},
FileInput: inputVideoS3Path,
},
],
},
AccelerationSettings: {
Mode: "DISABLED",
},
StatusUpdateInterval: "SECONDS_60",
Priority: 0,
};
console.log(
"start to create media convert job, params: %j",
mediaConvertParams
);
var endpointPromise;
if (process.env.REGION === "cn-north-1") {
endpointPromise = new AWS.MediaConvert({
apiVersion: "2017-08-29",
region: "cn-northwest-1",
})
.createJob(mediaConvertParams)
.promise();
} else {
endpointPromise = new AWS.MediaConvert({ apiVersion: "2017-08-29" })
.createJob(mediaConvertParams)
.promise();
}
console.log("media convert job created");
// Handle promise's fulfilled/rejected status
await endpointPromise.then(
function (data) {
console.log("Job created! ", data);
},
function (err) {
console.log("Error", err);
}
);
}