remote-rdr / src /GenerateScript.ts
shiveshnavin's picture
SSR working
59c0ef4
import { OriginalManuscript } from 'common-utils'
import Transitions from '../public/assets/transitions.json'
import { RenderUtils } from './RenderUtils'
import { YoutubeCategoriesConfig } from './models/Categories'
export function GenerateScript(Script: OriginalManuscript) {
let fps = Script?.meta?.fps
if (!fps) {
Script.meta.fps = 24
fps = 24
}
var durationInSec = 0
var lastDirection = false;
let preloadImages = []
let preloadVideos = []
let contents =
Script.transcript
.sort((t, u) => t.index - u.index)
// .filter(item => (item.audioCaptionFile != undefined))
// .slice(0, 2)
.map((section, idx, array) => {
section.index = section.index || idx;
var { text, duration: durationMilis, offset, mediaAbsPaths, mediaAbsPaths, audioFullPath, title, pointers } = section
mediaAbsPaths = mediaAbsPaths || mediaAbsPaths || []
if (!durationMilis) {
durationMilis = section.durationInSeconds * 1000
}
if (!durationMilis)
durationMilis = 10e3
// maybe required for youtube composition !!!
let curDurSecs = (durationMilis / 1e3)
if (curDurSecs < 3) {
curDurSecs = 3
}
//@ts-ignore
const transitionFile = (section?.transition_file || Transitions[0].file)
const transition_type = (section?.transition_type)
if (transition_type && transition_type != 'none') {
section.transition_duration_sec = section?.transition_duration_sec || 0.5
}
//@ts-ignore
const transitionDurationSec = (section?.transition_duration_sec || (transition_type && transition_type != 'none') ? 0.5 : 0)
const transitionDurationFrames = transitionDurationSec * fps
let commDuration = durationInSec //+ transitionDurationSec
durationInSec = durationInSec + curDurSecs;///+ transitionDurationSec
lastDirection = !lastDirection
mediaAbsPaths.forEach(p => {
let im = p.path
if (im.startsWith("http")) {
if (im.indexOf("-video-") > -1 || im.indexOf(".mp4") > -1 || im.indexOf(".webm") > -1) {
preloadVideos.push(im)
// preloadVideo(im)
}
else {
preloadImages.push(im)
// preloadImage(im)
}
}
})
let bgImagePaths = mediaAbsPaths.map(p => {
p.path = RenderUtils.getFileName(p?.path)!!
return p
})
if (!offset) {
offset = commDuration
}
let frame = Object.assign(section, {
"commulativeDurationStartSec": commDuration,
"text": text,
"transition_file": RenderUtils.getFileName(transitionFile),
"durationInSecs": curDurSecs,
"duration": Math.ceil(curDurSecs * fps),
"offset": offset * fps,
"direction": lastDirection ? 'left' : 'right',
"bgImagePaths": bgImagePaths,
"audioPath": RenderUtils.getFileName(audioFullPath),
"textColor": '#F44336',
"emphasisOnImage": title?.length > 0 && pointers?.length > 0 || Script.meta.emphasisOnImage
})
return frame
})
console.log('contents', contents)
const intro = {
durationInFrames: 0,
durationInSec: 5.433,
file: Script.meta.tenantVideoConfig ? RenderUtils.getFileName(Script.meta.tenantVideoConfig.introFile, "assets") : 'assets/music_intro.mp4'
}
let ADJUST_END_DUR_SEC = 3
const outro = {
durationInFrames: 0,
durationInSec: 8.034 - ADJUST_END_DUR_SEC,
file: Script.meta.tenantVideoConfig ? RenderUtils.getFileName(Script.meta.tenantVideoConfig.outroFile, "assets") : 'assets/music_outro.mp4'
}
if (intro && Script?.meta?.tenantVideoConfig?.introFile) {
durationInSec += intro.durationInSec
intro.durationInFrames = Math.ceil(fps * intro.durationInSec)
}
if (outro && Script?.meta?.tenantVideoConfig?.outroFile) {
durationInSec += outro.durationInSec
//hack for blank end
outro.durationInSec += 30
outro.durationInFrames = Math.ceil(fps * outro.durationInSec)
}
// durationInSec = 10
const duration = Math.ceil(durationInSec * fps)
console.log("Total Video Duration", durationInSec)
//@ts-ignore
const playListsIDs = YoutubeCategoriesConfig.GET_PLAY_LIST_IDS(Script.meta?.userId || "104349087108535511186")
return {
Script,
contents,
playListsIDs,
duration,
outro,
intro
}
}