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