File size: 4,502 Bytes
59c0ef4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
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
  }
}