in kotlin/services/mediaconvert/src/main/kotlin/com/kotlin/mediaconvert/CreateJob.kt [311:436]
fun createOutput(
customName: String,
nameModifierVal: String,
segmentModifierVal: String,
qvbrMaxBitrate: Int,
qvbrQualityLevelVal: Int,
originWidth: Int,
originHeight: Int,
targetWidth: Int
): Output? {
val targetHeight = (Math.round((originHeight * targetWidth / originWidth).toFloat())
- Math.round((originHeight * targetWidth / originWidth).toFloat()) % 4)
var output: Output? = null
try {
val audio1 = AudioDescription {
audioTypeControl = AudioTypeControl.FollowInput
languageCodeControl = AudioLanguageCodeControl.FollowInput
codecSettings = AudioCodecSettings {
codec = AudioCodec.Aac
aacSettings = AacSettings {
codecProfile = AacCodecProfile.Lc
rateControlMode = AacRateControlMode.Cbr
codingMode = AacCodingMode.CodingMode2_0
sampleRate = 44100
bitrate = 96000
rawFormat = AacRawFormat.None
specification = AacSpecification.Mpeg4
audioDescriptionBroadcasterMix = AacAudioDescriptionBroadcasterMix.Normal
}
}
}
output = Output {
nameModifier = nameModifierVal
outputSettings = OutputSettings {
hlsSettings = HlsSettings {
segmentModifier = segmentModifierVal
audioGroupId = "program_audio"
iFrameOnlyManifest = HlsIFrameOnlyManifest.Exclude
}
}
containerSettings = ContainerSettings {
container = ContainerType.M3U8
this.m3U8Settings = M3U8Settings {
audioFramesPerPes = 4
pcrControl = M3U8PcrControl.PcrEveryPesPacket
pmtPid = 480
privateMetadataPid = 503
programNumber = 1
patInterval = 0
pmtInterval = 0
scte35Source = M3U8Scte35Source.None
scte35Pid = 500
nielsenId3 = M3U8NielsenId3.None
timedMetadata = TimedMetadata.None
timedMetadataPid = 502
videoPid = 481
audioPids = listOf(482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492)
}
videoDescription = VideoDescription {
width = targetWidth
height = targetHeight
scalingBehavior = ScalingBehavior.Default
sharpness = 50
antiAlias = AntiAlias.Enabled
timecodeInsertion = VideoTimecodeInsertion.Disabled
colorMetadata = ColorMetadata.Insert
respondToAfd = RespondToAfd.None
afdSignaling = AfdSignaling.None
dropFrameTimecode = DropFrameTimecode.Enabled
codecSettings = VideoCodecSettings {
codec = VideoCodec.H264
h264Settings = H264Settings {
rateControlMode = H264RateControlMode.Qvbr
parControl = H264ParControl.InitializeFromSource
qualityTuningLevel = H264QualityTuningLevel.SinglePass
qvbrSettings = H264QvbrSettings {
qvbrQualityLevel = qvbrQualityLevelVal
}
codecLevel = H264CodecLevel.Auto
codecProfile =
if (targetHeight > 720 && targetWidth > 1280) H264CodecProfile.High else H264CodecProfile.Main
maxBitrate = qvbrMaxBitrate
framerateControl = H264FramerateControl.InitializeFromSource
gopSize = 2.0
gopSizeUnits = H264GopSizeUnits.Seconds
numberBFramesBetweenReferenceFrames = 2
gopClosedCadence = 1
gopBReference = H264GopBReference.Disabled
slowPal = H264SlowPal.Disabled
syntax = H264Syntax.Default
numberReferenceFrames = 3
dynamicSubGop = H264DynamicSubGop.Static
fieldEncoding = H264FieldEncoding.Paff
sceneChangeDetect = H264SceneChangeDetect.Enabled
minIInterval = 0
telecine = H264Telecine.None
framerateConversionAlgorithm = H264FramerateConversionAlgorithm.DuplicateDrop
entropyEncoding = H264EntropyEncoding.Cabac
slices = 1
unregisteredSeiTimecode = H264UnregisteredSeiTimecode.Disabled
repeatPps = H264RepeatPps.Disabled
adaptiveQuantization = H264AdaptiveQuantization.High
spatialAdaptiveQuantization = H264SpatialAdaptiveQuantization.Enabled
temporalAdaptiveQuantization = H264TemporalAdaptiveQuantization.Enabled
flickerAdaptiveQuantization = H264FlickerAdaptiveQuantization.Disabled
softness = 0
interlaceMode = H264InterlaceMode.Progressive
}
}
audioDescriptions = listOf(audio1)
}
}
}
} catch (ex: MediaConvertException) {
println(ex.toString())
exitProcess(0)
}
return output
}