async function burnCaptions()

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);
    }
  );
}