shiveshnavin commited on
Commit
96725a1
·
1 Parent(s): 388b98d

Base ready

Browse files
src/OriginalManuscriptModel.ts CHANGED
@@ -31,8 +31,8 @@ export interface Transcript {
31
  imageAbsPaths: SectionMedia[]
32
  audioFullPath: string
33
  durationInSeconds: number
34
- duration: number
35
- offset: number
36
  bubble: {
37
  image?: string
38
  text: string
 
31
  imageAbsPaths: SectionMedia[]
32
  audioFullPath: string
33
  durationInSeconds: number
34
+ duration: number // duration in frames
35
+ offset: number // offset in frames
36
  bubble: {
37
  image?: string
38
  text: string
src/ig-reel/IGReelComposition.tsx CHANGED
@@ -1,16 +1,20 @@
1
  //@ts-nocheck
2
- import { AbsoluteFill, Audio, Img, interpolate, staticFile } from 'remotion';
3
  import React from 'react'
4
  import { loadFont } from "@remotion/google-fonts/MontserratAlternates";
5
  import { Series } from "remotion";
6
  import { IGScene } from './IGSimpleScene';
7
- import { OriginalManuscript } from '../OriginalManuscriptModel';
 
 
8
 
9
 
10
  export const IGReelComposition: React.FC = (props: OriginalManuscript) => {
11
  const { fontFamily } = loadFont();
12
- let { contents, meta, bgMusic, bgMusicDuration } = props
 
13
  let fps = meta.fps
 
14
 
15
 
16
  let bgMusicPath = staticFile(bgMusic || '')
@@ -27,19 +31,22 @@ export const IGReelComposition: React.FC = (props: OriginalManuscript) => {
27
  src={bgMusicPath} />
28
  )
29
  }
30
- <Series>
31
  {
32
- contents.map((scriptItem, i) => {
33
  let { durationInSeconds } = scriptItem
34
  let durationInFrames = meta.fps * durationInSeconds
 
35
  return (
36
- <Series.Sequence durationInFrames={durationInFrames}>
37
- <IGScene script={props} item={scriptItem} />
38
- </Series.Sequence>
 
 
39
  )
40
  })
41
  }
42
- </Series>
43
 
44
 
45
  </AbsoluteFill >
 
1
  //@ts-nocheck
2
+ import { AbsoluteFill, Audio, Easing, Img, interpolate, staticFile, useCurrentFrame } from 'remotion';
3
  import React from 'react'
4
  import { loadFont } from "@remotion/google-fonts/MontserratAlternates";
5
  import { Series } from "remotion";
6
  import { IGScene } from './IGSimpleScene';
7
+ import { OriginalManuscript, Transcript } from '../OriginalManuscriptModel';
8
+ import TransitionSeries from 'remotion-transition-series';
9
+
10
 
11
 
12
  export const IGReelComposition: React.FC = (props: OriginalManuscript) => {
13
  const { fontFamily } = loadFont();
14
+ let { meta, bgMusic, bgMusicDuration } = props
15
+ let transcripts: Transcript[] = props.contents
16
  let fps = meta.fps
17
+ let frame = useCurrentFrame()
18
 
19
 
20
  let bgMusicPath = staticFile(bgMusic || '')
 
31
  src={bgMusicPath} />
32
  )
33
  }
34
+ <TransitionSeries>
35
  {
36
+ transcripts.map((scriptItem: Transcript, i) => {
37
  let { durationInSeconds } = scriptItem
38
  let durationInFrames = meta.fps * durationInSeconds
39
+
40
  return (
41
+ <>
42
+ <TransitionSeries.Sequence durationInFrames={durationInFrames}>
43
+ <IGScene script={props} item={scriptItem} />
44
+ </TransitionSeries.Sequence>
45
+ </>
46
  )
47
  })
48
  }
49
+ </TransitionSeries>
50
 
51
 
52
  </AbsoluteFill >
src/ig-reel/IGSimpleScene.tsx CHANGED
@@ -111,6 +111,17 @@ export const IGScene: React.FC<any> = (props: {
111
  return (<></>)
112
  }
113
 
 
 
 
 
 
 
 
 
 
 
 
114
  let curSecond: Number = frame / fps
115
  let word = findCurrentWord(curSecond, subtitles)
116
  let group: Group = findCurrentGroupByTime(curSecond, groups)
@@ -162,7 +173,6 @@ export const IGScene: React.FC<any> = (props: {
162
  let easeInOutExp = Easing.inOut(Easing.bezier(0.8, 0.22, 0.96, 0.65));
163
  easeInOutExp = Easing.ease
164
  let curZoom = 1 + 0.3 * (frame - displayMedia?.startFrame) / (displayMedia?.durationFrames || 1)
165
- console.log(`[${frame}]`, 'image zoon', curZoom, [displayMedia?.startFrame, displayMedia?.endFrame])
166
  chunk.push((
167
  <TransitionSeries.Sequence durationInFrames={displayMedia.durationFrames}>
168
  <IGMediaRender curZoom={curZoom} displayMedia={displayMedia} />
@@ -189,7 +199,10 @@ export const IGScene: React.FC<any> = (props: {
189
  return chunk
190
  }))
191
  return (
192
- <AbsoluteFill className='relative'>
 
 
 
193
  <Audio volume={1} src={staticFile(audioPath)} />
194
  <TransitionSeries>
195
  {
@@ -198,10 +211,21 @@ export const IGScene: React.FC<any> = (props: {
198
 
199
  </TransitionSeries>
200
 
201
-
202
- <div className='absolute inset-0'>
 
 
 
 
 
 
 
 
 
203
  <ExcitedSubtitles position='center' group={group} word={word} />
204
  </div>
 
 
205
  </AbsoluteFill >
206
  );
207
  };
 
111
  return (<></>)
112
  }
113
 
114
+
115
+ let itemDurationInFrames = item.durationInSeconds * fps
116
+ console.log('scriptItem.offset', frame, itemDurationInFrames)
117
+
118
+ const foregroundOpacity = interpolate(
119
+ frame,
120
+ [0, 10, itemDurationInFrames - 10, itemDurationInFrames],
121
+ [1, 0, 0, 1]
122
+ );
123
+
124
+
125
  let curSecond: Number = frame / fps
126
  let word = findCurrentWord(curSecond, subtitles)
127
  let group: Group = findCurrentGroupByTime(curSecond, groups)
 
173
  let easeInOutExp = Easing.inOut(Easing.bezier(0.8, 0.22, 0.96, 0.65));
174
  easeInOutExp = Easing.ease
175
  let curZoom = 1 + 0.3 * (frame - displayMedia?.startFrame) / (displayMedia?.durationFrames || 1)
 
176
  chunk.push((
177
  <TransitionSeries.Sequence durationInFrames={displayMedia.durationFrames}>
178
  <IGMediaRender curZoom={curZoom} displayMedia={displayMedia} />
 
199
  return chunk
200
  }))
201
  return (
202
+ <AbsoluteFill style={{
203
+ width: '100%',
204
+ height: '100%',
205
+ }} className='relative'>
206
  <Audio volume={1} src={staticFile(audioPath)} />
207
  <TransitionSeries>
208
  {
 
211
 
212
  </TransitionSeries>
213
 
214
+ <div style={{
215
+ opacity: foregroundOpacity,
216
+ zIndex: 10,
217
+ width: '100%',
218
+ height: '100%',
219
+ background: 'black'
220
+ }}></div>
221
+
222
+ <div style={{
223
+ zIndex: 20,
224
+ }} className='absolute inset-0'>
225
  <ExcitedSubtitles position='center' group={group} word={word} />
226
  </div>
227
+
228
+
229
  </AbsoluteFill >
230
  );
231
  };