shiveshnavin commited on
Commit
721d060
·
1 Parent(s): c1d1210

Add motivationa;

Browse files
src/Compositions.tsx CHANGED
@@ -56,10 +56,11 @@ export const Compositions: React.FC = () => {
56
  let contents: SequentialSceneData[] =
57
  Script.transcript
58
  .sort((t, u) => t.index - u.index)
59
- .filter(item => item.audioCaptionFile != undefined)
60
- .slice(0, 2)
61
  .map((section) => {
62
- var { text, duration: durationMilis, offset, imageAbsPaths, audioFullPath, title, pointers } = section
 
63
  if (!durationMilis) {
64
  durationMilis = section.durationInSeconds * 1000
65
  }
@@ -117,7 +118,7 @@ export const Compositions: React.FC = () => {
117
  return frame
118
  })
119
 
120
-
121
  const intro = {
122
  durationInFrames: 0,
123
  durationInSec: 5.433,
 
56
  let contents: SequentialSceneData[] =
57
  Script.transcript
58
  .sort((t, u) => t.index - u.index)
59
+ // .filter(item => (item.audioCaptionFile != undefined))
60
+ // .slice(0, 2)
61
  .map((section) => {
62
+ var { text, duration: durationMilis, offset, mediaAbsPaths, imageAbsPaths, audioFullPath, title, pointers } = section
63
+ imageAbsPaths = imageAbsPaths || mediaAbsPaths || []
64
  if (!durationMilis) {
65
  durationMilis = section.durationInSeconds * 1000
66
  }
 
118
  return frame
119
  })
120
 
121
+ console.log('contents', contents)
122
  const intro = {
123
  durationInFrames: 0,
124
  durationInSec: 5.433,
src/common/Error.tsx ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import * as Montserrat from "@remotion/google-fonts/Montserrat";
2
+
3
+ export function ErrorMsg(props: { error?: string, children?: any }) {
4
+
5
+ const { fontFamily } = Montserrat.loadFont("normal", { weights: ["500"] });
6
+ const baseStyle = {
7
+ borderColor: "transparent",
8
+ borderRadius: "2rem",
9
+ borderLeftWidth: "4px",
10
+ borderRightWidth: "4px",
11
+ color: "#fff",
12
+ textShadow: "0px 0px 50px #000, 0px 0px 50px #000",
13
+ padding: "0.2rem 1.5rem",
14
+ };
15
+
16
+ return (
17
+ <center style={{
18
+ width: '100%',
19
+ height: '100%',
20
+ justifyContent: 'center',
21
+ alignItems: 'center',
22
+ alignContent: 'center'
23
+ }}>
24
+ <span style={{
25
+ ...baseStyle,
26
+ fontFamily,
27
+ fontSize: 42,
28
+ }}>
29
+ {props.error || props.children || 'An error occurred in rendering'}
30
+ </span>
31
+ </center>
32
+ )
33
+ }
src/examples/Logo.tsx DELETED
@@ -1,51 +0,0 @@
1
- import React from 'react';
2
- import {interpolate, spring, useCurrentFrame, useVideoConfig} from 'remotion';
3
-
4
- export const Logo: React.FC<{
5
- logoColor: string;
6
- }> = ({logoColor}) => {
7
- const frame = useCurrentFrame();
8
- const {height, fps} = useVideoConfig();
9
-
10
- const entrance = spring({
11
- fps,
12
- frame,
13
- config: {
14
- damping: 200,
15
- },
16
- durationInFrames: 30,
17
- });
18
-
19
- const entranceOffset = interpolate(entrance, [0, 1], [height, 0]);
20
-
21
- const wave1 = Math.cos(frame / 15) * 10 + entranceOffset;
22
- const wave2 = Math.cos((frame - 5) / 15) * 10 + entranceOffset;
23
-
24
- return (
25
- <div>
26
- <svg
27
- style={{transform: `translateY(${wave1}px)`}}
28
- className="absolute"
29
- height={120}
30
- viewBox="0 0 51 31"
31
- >
32
- <path
33
- d="M0 25.364C1.701 18.6 5.954 15.218 12.758 15.218C19.0815 15.218 21.9775 18.1395 24.4794 20.6634L24.48 20.664C26.015 22.213 27.403 23.613 29.344 24.096C32.746 24.941 35.723 23.673 38.275 20.291C36.574 27.055 32.321 30.436 25.517 30.436C19.1925 30.436 16.2975 27.5155 13.7956 24.9916L13.795 24.991C12.26 23.441 10.872 22.041 8.93 21.559C5.529 20.714 2.552 21.982 0 25.364Z"
34
- className="fill-sky-400"
35
- style={{fill: logoColor}}
36
- />
37
- </svg>
38
- <svg
39
- style={{transform: `translateY(${wave2}px)`}}
40
- height={120}
41
- viewBox="0 0 51 31"
42
- >
43
- <path
44
- d="M12 10.146C13.701 3.382 17.954 0 24.758 0C31.0815 0 33.9775 2.92151 36.4794 5.44536L36.48 5.446C38.015 6.995 39.403 8.395 41.344 8.878C44.746 9.723 47.723 8.455 50.275 5.073C48.574 11.837 44.321 15.218 37.517 15.218C31.1925 15.218 28.2975 12.2975 25.7956 9.77365L25.795 9.773C24.26 8.223 22.872 6.823 20.93 6.341C17.529 5.496 14.552 6.764 12 10.146Z"
45
- className="fill-sky-400"
46
- style={{fill: logoColor}}
47
- />
48
- </svg>
49
- </div>
50
- );
51
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/examples/Root.tsx DELETED
@@ -1,24 +0,0 @@
1
- import { Composition } from 'remotion';
2
- import { MyComposition, myCompSchema } from './SampleComposition';
3
- import '../style.css';
4
-
5
- export const RemotionRoot: React.FC = () => {
6
- return (
7
- <>
8
- <Composition
9
- id="SemibitComposition"
10
- component={MyComposition}
11
- durationInFrames={240}
12
- fps={30}
13
- width={1280}
14
- height={720}
15
- schema={myCompSchema}
16
- defaultProps={{
17
- titleText: 'Welcome to Remotion with Tailwind CSS',
18
- titleColor: '#000000',
19
- logoColor: '#00bfff',
20
- }}
21
- />
22
- </>
23
- );
24
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/examples/SampleComposition.tsx DELETED
@@ -1,28 +0,0 @@
1
- import { AbsoluteFill } from 'remotion';
2
- import { Logo } from './Logo';
3
- import { Subtitle } from './Subtitle';
4
- import { Title } from './Title';
5
- import { z } from 'zod';
6
- import { zColor } from '@remotion/zod-types';
7
-
8
- export const myCompSchema = z.object({
9
- titleText: z.string(),
10
- titleColor: zColor(),
11
- logoColor: zColor(),
12
- });
13
-
14
- export const MyComposition: React.FC<z.infer<typeof myCompSchema>> = ({
15
- titleText: propOne,
16
- titleColor: propTwo,
17
- logoColor: propThree,
18
- }) => {
19
- return (
20
- <AbsoluteFill className="bg-gray-100 items-center justify-center">
21
- <div className="m-10" />
22
- <Logo logoColor={propThree} />
23
- <div className="m-3" />
24
- <Title titleText={propOne} titleColor={propTwo} />
25
- <Subtitle />
26
- </AbsoluteFill>
27
- );
28
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/examples/Subtitle.tsx DELETED
@@ -1,16 +0,0 @@
1
- import React from 'react';
2
- import {interpolate, useCurrentFrame} from 'remotion';
3
-
4
- export const Subtitle: React.FC = () => {
5
- const frame = useCurrentFrame();
6
- const opacity = interpolate(frame, [30, 50], [0, 1], {
7
- extrapolateLeft: 'clamp',
8
- extrapolateRight: 'clamp',
9
- });
10
-
11
- return (
12
- <div className="text-gray-600 text-3xl" style={{opacity}}>
13
- Edit <code>src/Composition.tsx</code> and save to reload.
14
- </div>
15
- );
16
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/examples/TestComposition.tsx DELETED
@@ -1,63 +0,0 @@
1
- //@ts-nocheck
2
- import { Composition, delayRender, continueRender, staticFile, Easing } from 'remotion'
3
- import { getVideoMetadata } from "@remotion/media-utils";
4
- import React, { useEffect, useState } from 'react'
5
- import { SingleTextWithBG } from '../youtube/SingleTextWithBG';
6
- import TransitionSeries from 'remotion-transition-series/lib/TransitionSeries';
7
- import { Plate } from '../anims/Plate';
8
- import { Pan } from '../anims/Pan';
9
-
10
- import { TransitionImplementationProps } from 'remotion-transition-series/lib/components/Transition';
11
-
12
- const Transition: React.FC<{
13
- transitionComponent: (
14
- props: TransitionImplementationProps,
15
- componentA: any,
16
- componentB: any
17
- ) => React.ReactNode;
18
- }> = ({ transitionComponent, componentA, componentB }) => {
19
- return (
20
- <TransitionSeries>
21
- <TransitionSeries.Sequence durationInFrames={60}>
22
- (componentA || <Plate style={{ backgroundColor: 'salmon', color: 'black' }}>A</Plate>)
23
- </TransitionSeries.Sequence>
24
-
25
- <TransitionSeries.Transition
26
- durationInFrames={30}
27
- transitionComponent={transitionComponent}
28
- />
29
-
30
- <TransitionSeries.Sequence durationInFrames={60}>
31
- (componentB || <Plate style={{ backgroundColor: 'indigo', color: 'white' }}>B</Plate>)
32
- </TransitionSeries.Sequence>
33
- </TransitionSeries>
34
- );
35
- };
36
-
37
-
38
- export const TestComposition: React.FC = () => {
39
-
40
-
41
- const duration = 100;
42
- const easeInOutExp = Easing.inOut(Easing.exp);
43
-
44
- return (
45
- <>
46
- <Composition
47
- id="TestComposition"
48
- component={() => <Transition transitionComponent={
49
- ({ progress, ...props }) => (
50
- <Pan {...props} progress={easeInOutExp(progress)} />
51
- )
52
- } />}
53
- width={1920}
54
- height={1080}
55
- fps={30}
56
- durationInFrames={90}
57
- />
58
-
59
- </>
60
- )
61
-
62
-
63
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/examples/TestRoot.tsx DELETED
@@ -1,19 +0,0 @@
1
- import { Composition } from "remotion";
2
-
3
- function MyComponent() {
4
- return <div>Hi</div>
5
- }
6
- export const RemotionRoot = () => {
7
- return (
8
- <>
9
- <Composition
10
- id="comp"
11
- fps={30}
12
- height={1080}
13
- width={1920}
14
- durationInFrames={90}
15
- component={MyComponent}
16
- />
17
- </>
18
- );
19
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/examples/Title.tsx DELETED
@@ -1,23 +0,0 @@
1
- import {interpolate} from 'remotion';
2
- import {useCurrentFrame} from 'remotion';
3
- import React from 'react';
4
-
5
- export const Title: React.FC<{
6
- titleText: string;
7
- titleColor: string;
8
- }> = ({titleText, titleColor}) => {
9
- const frame = useCurrentFrame();
10
- const opacity = interpolate(frame, [20, 40], [0, 1], {
11
- extrapolateLeft: 'clamp',
12
- extrapolateRight: 'clamp',
13
- });
14
- return (
15
- <div
16
- style={{opacity, color: titleColor}}
17
- className="text-gray-700 text-5xl font-bold leading-relaxed"
18
- >
19
- {' '}
20
- {titleText}
21
- </div>
22
- );
23
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/ig-reel/IG2LineMotivationalScene.tsx ADDED
@@ -0,0 +1,142 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { Meta, Transcript } from "common-utils";
2
+ import { Audio, Img, spring, staticFile, useCurrentFrame } from "remotion";
3
+ import * as Montserrat from "@remotion/google-fonts/Montserrat";
4
+ import { MediaBackground } from "../youtube/MediaBackground";
5
+ import { ErrorMsg } from "../common/Error";
6
+ import { Animated, Fade } from 'remotion-animated';
7
+
8
+ export default function IG2LineMotivationalScene(props: { meta: Meta; item: Transcript }) {
9
+ const { meta, item: transcript } = props;
10
+ const { fps } = meta;
11
+ const { mediaAbsPaths, audioFullPath, durationInSeconds } = transcript;
12
+
13
+ const media = mediaAbsPaths[0];
14
+ const watermark = mediaAbsPaths[1];
15
+ const bgMusicPath = staticFile(audioFullPath || "");
16
+ const { fontFamily } = Montserrat.loadFont("normal", { weights: ["400"] });
17
+ const frame = useCurrentFrame();
18
+
19
+
20
+
21
+ const scale = spring({ fps, frame });
22
+
23
+ const baseStyle = {
24
+ textAlign: 'center',
25
+ borderColor: "transparent",
26
+ borderRadius: "2rem",
27
+ borderLeftWidth: "4px",
28
+ borderRightWidth: "4px",
29
+ color: "#fff",
30
+ textShadow: "0px 0px 50px #000, 0px 0px 50px #000",
31
+ padding: "0.2rem 1.5rem",
32
+ };
33
+
34
+ const highlightStyle = {
35
+ backgroundColor: "#FFFF00",
36
+ color: "#fff",
37
+ textShadow: "0px 0px 50px #000, 0px 0px 50px #000",
38
+ borderStyle: "solid",
39
+ };
40
+ const audioCaption = transcript.audioCaption
41
+ if (!audioCaption) {
42
+ return (
43
+ <ErrorMsg>
44
+ Missing `audioCaption` in transcript item {`[${transcript.title || transcript.index}]`}
45
+ </ErrorMsg>
46
+ )
47
+ }
48
+
49
+ let line1 = audioCaption.words[0]
50
+ let line2 = audioCaption.words[1]
51
+ let line2String = line2.word
52
+ let line2Opacity = 0
53
+ let line2animStartFrame = line2.start * fps;
54
+ let line2animEndFrame = line2.end * fps;
55
+ if (frame > line2animStartFrame) {
56
+ line2Opacity = Math.min(
57
+ 1,
58
+ (frame - line2animStartFrame) / (line2animEndFrame - line2animStartFrame)
59
+ );
60
+ }
61
+
62
+ let watermarkPath;
63
+ if (watermark) {
64
+ watermarkPath = staticFile(watermark.path)
65
+ }
66
+ let watermarkText = audioCaption.words[2]
67
+ let watermarkOpacity = 0
68
+ if (watermarkText) {
69
+ let watermarkanimStartFrame = watermarkText.start * fps;
70
+ let watermarkanimEndFrame = watermarkText.end * fps;
71
+ if (frame > line2animStartFrame) {
72
+ watermarkOpacity = Math.min(
73
+ 1,
74
+ (frame - watermarkanimStartFrame) / (watermarkanimEndFrame - watermarkanimStartFrame)
75
+ );
76
+ }
77
+ }
78
+
79
+ return (
80
+ <>
81
+ <MediaBackground
82
+ direction="none"
83
+ emphasisOnImage={true}
84
+ duration={fps * durationInSeconds}
85
+ bgImagePaths={[{ path: media.path! }]}
86
+ >
87
+ {audioFullPath && <Audio src={bgMusicPath} />}
88
+
89
+ <div
90
+ className="p-6 rounded-lg"
91
+ style={{
92
+ width: "100%",
93
+ height: "100%",
94
+ display: "flex",
95
+ flexDirection: "column",
96
+ justifyContent: "center",
97
+ alignItems: "center",
98
+ alignContent: "center",
99
+ flex: 1,
100
+ }}
101
+ >
102
+ <span
103
+ style={{
104
+ ...baseStyle,
105
+ fontFamily,
106
+ fontSize: 42,
107
+ ...line1.textStyle
108
+ } as any}
109
+ >
110
+ {line1.word}
111
+ </span>
112
+
113
+ <span
114
+ style={{
115
+ ...baseStyle,
116
+ fontFamily,
117
+ fontSize: 42,
118
+ opacity: line2Opacity,
119
+ color: highlightStyle.color,
120
+ ...line2.textStyle
121
+ } as any}
122
+ >
123
+ {line2.word}
124
+ </span>
125
+
126
+
127
+ </div>
128
+
129
+ {
130
+ watermarkPath && (
131
+ <Img src={watermarkPath}
132
+ style={{
133
+ width: '50%',
134
+ ...audioCaption.words[2]?.textStyle,
135
+ opacity: watermarkOpacity ?? 1
136
+ }} />
137
+ )
138
+ }
139
+ </MediaBackground>
140
+ </>
141
+ );
142
+ }
src/ig-reel/IGMediaRender.tsx CHANGED
@@ -8,7 +8,7 @@ import Transitions from '../../public/assets/transitions.json'
8
  import { RenderUtils } from "../RenderUtils";
9
 
10
 
11
- export function IGMediaRender(props) {
12
  let displayMedia: DisplayMedia = props.displayMedia
13
  let bgMediaPath = staticFile(displayMedia?.path || '')
14
  let curZoom = props.curZoom
 
8
  import { RenderUtils } from "../RenderUtils";
9
 
10
 
11
+ export function IGMediaRender(props: { curZoom: number, displayMedia: DisplayMedia }) {
12
  let displayMedia: DisplayMedia = props.displayMedia
13
  let bgMediaPath = staticFile(displayMedia?.path || '')
14
  let curZoom = props.curZoom
src/ig-reel/IGReelComposition.tsx CHANGED
@@ -3,12 +3,13 @@ import { AbsoluteFill, Audio, Easing, Img, interpolate, staticFile, useCurrentFr
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 'common-utils';
8
  import TransitionSeries from 'remotion-transition-series';
9
  import { VideoSplash } from '../anims/VideoSplash';
10
  import Transitions from '../../public/assets/transitions.json'
11
  import { RenderUtils } from '../RenderUtils';
 
12
 
13
  export const IGReelComposition: React.FC = (props: OriginalManuscript) => {
14
  const { fontFamily } = loadFont();
@@ -21,6 +22,7 @@ export const IGReelComposition: React.FC = (props: OriginalManuscript) => {
21
  let transitions = Transitions.filter(t => t.mood?.indexOf("intro") > -1)
22
  let startTransition = RenderUtils.randomElement(transitions, `x-${textLen}`)
23
 
 
24
  let bgMusicPath = staticFile(bgMusic || '')
25
  return (
26
  <AbsoluteFill style={{
@@ -40,11 +42,27 @@ export const IGReelComposition: React.FC = (props: OriginalManuscript) => {
40
  transcripts.map((scriptItem: Transcript, i) => {
41
  let { durationInSeconds } = scriptItem
42
  let durationInFrames = meta.fps * durationInSeconds
43
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
  return (
45
  <>
46
  <TransitionSeries.Sequence durationInFrames={durationInFrames}>
47
- <IGScene script={props} item={scriptItem} />
 
 
48
  </TransitionSeries.Sequence>
49
  </>
50
  )
@@ -52,12 +70,16 @@ export const IGReelComposition: React.FC = (props: OriginalManuscript) => {
52
  }
53
  </TransitionSeries>
54
 
55
- <div
56
- style={{
57
- width: '100%',
58
- height: '100%'
59
- }}
60
- ><VideoSplash file={startTransition.file} /></div>
 
 
 
 
61
 
62
  </AbsoluteFill >
63
  );
 
3
  import React from 'react'
4
  import { loadFont } from "@remotion/google-fonts/MontserratAlternates";
5
  import { Series } from "remotion";
6
+ import { IGSimpleScene } from './IGSimpleScene';
7
  import { OriginalManuscript, Transcript } from 'common-utils';
8
  import TransitionSeries from 'remotion-transition-series';
9
  import { VideoSplash } from '../anims/VideoSplash';
10
  import Transitions from '../../public/assets/transitions.json'
11
  import { RenderUtils } from '../RenderUtils';
12
+ import IG2LineMotivationalScene from './IG2LineMotivationalScene';
13
 
14
  export const IGReelComposition: React.FC = (props: OriginalManuscript) => {
15
  const { fontFamily } = loadFont();
 
22
  let transitions = Transitions.filter(t => t.mood?.indexOf("intro") > -1)
23
  let startTransition = RenderUtils.randomElement(transitions, `x-${textLen}`)
24
 
25
+ // console.log('IGReelComposition props', props)
26
  let bgMusicPath = staticFile(bgMusic || '')
27
  return (
28
  <AbsoluteFill style={{
 
42
  transcripts.map((scriptItem: Transcript, i) => {
43
  let { durationInSeconds } = scriptItem
44
  let durationInFrames = meta.fps * durationInSeconds
45
+ let template = scriptItem.extras?.template
46
+ let Component = (
47
+ <IGSimpleScene
48
+ meta={props.meta}
49
+ script={props}
50
+ item={scriptItem} />
51
+ );
52
+ if (template == 'motivational-2-liner') {
53
+ Component = (
54
+ <IG2LineMotivationalScene
55
+ meta={props.meta}
56
+ script={props}
57
+ item={scriptItem} />
58
+ )
59
+ }
60
  return (
61
  <>
62
  <TransitionSeries.Sequence durationInFrames={durationInFrames}>
63
+
64
+ {Component}
65
+
66
  </TransitionSeries.Sequence>
67
  </>
68
  )
 
70
  }
71
  </TransitionSeries>
72
 
73
+ {
74
+ transcripts.find(a => a.transition_type != 'none') && (
75
+ <div
76
+ style={{
77
+ width: '100%',
78
+ height: '100%'
79
+ }}
80
+ ><VideoSplash file={startTransition.file} /></div>
81
+ )
82
+ }
83
 
84
  </AbsoluteFill >
85
  );
src/ig-reel/IGSimpleScene.tsx CHANGED
@@ -20,7 +20,12 @@ import { VideoSplash } from '../anims/VideoSplash';
20
  import Transitions from '../../public/assets/transitions.json'
21
 
22
  export type DisplayMedia = SectionMedia &
23
- { idx: number, durationFrames: number, startFrame: number, endFrame: number, }
 
 
 
 
 
24
 
25
 
26
  export const GenerateWordGroupRanges = function (audioCaptionFile: string, setSubtitles: Function, setGroups: Function) {
@@ -85,11 +90,12 @@ export const GenerateWordGroupRanges = function (audioCaptionFile: string, setSu
85
  })
86
  }
87
 
88
- export const IGScene: React.FC<any> = (props: {
89
  script: OriginalManuscript,
90
  item: Transcript,
91
  SubtitleComponent: React.FC<any>
92
  }) => {
 
93
  const [subtitles, setSubtitles] = useState(undefined)
94
  const [groups, setGroups] = useState(undefined)
95
  const item: Transcript = props.item
@@ -103,7 +109,8 @@ export const IGScene: React.FC<any> = (props: {
103
 
104
 
105
  useEffect(() => {
106
- GenerateWordGroupRanges(audioCaptionFile, setSubtitles, setGroups)
 
107
  }, [])
108
 
109
  if (!groups) {
 
20
  import Transitions from '../../public/assets/transitions.json'
21
 
22
  export type DisplayMedia = SectionMedia &
23
+ {
24
+ idx: number,
25
+ durationFrames: number,
26
+ startFrame: number,
27
+ endFrame: number,
28
+ }
29
 
30
 
31
  export const GenerateWordGroupRanges = function (audioCaptionFile: string, setSubtitles: Function, setGroups: Function) {
 
90
  })
91
  }
92
 
93
+ export const IGSimpleScene: React.FC<any> = (props: {
94
  script: OriginalManuscript,
95
  item: Transcript,
96
  SubtitleComponent: React.FC<any>
97
  }) => {
98
+
99
  const [subtitles, setSubtitles] = useState(undefined)
100
  const [groups, setGroups] = useState(undefined)
101
  const item: Transcript = props.item
 
109
 
110
 
111
  useEffect(() => {
112
+ if (audioCaptionFile)
113
+ GenerateWordGroupRanges(audioCaptionFile, setSubtitles, setGroups)
114
  }, [])
115
 
116
  if (!groups) {
src/linkedin-video/LinkedinFullSysDesignComposition.tsx CHANGED
@@ -3,7 +3,7 @@ import { AbsoluteFill, Audio, Easing, Img, interpolate, staticFile, useCurrentFr
3
  import React from 'react'
4
  import { loadFont } from "@remotion/google-fonts/MontserratAlternates";
5
  import { Series } from "remotion";
6
- import { IGScene } from '../ig-reel/IGSimpleScene';
7
  import { OriginalManuscript, Transcript } from 'common-utils';
8
  import TransitionSeries from 'remotion-transition-series';
9
  import { VideoSplash } from '../anims/VideoSplash';
@@ -53,7 +53,7 @@ export const LinkedinFullSysDesignComposition: React.FC = (props: OriginalManusc
53
  script={props}
54
  item={scriptItem} />
55
  :
56
- <IGScene
57
  script={props}
58
  item={scriptItem}
59
  SubtitleComponent={({ group, word }) => {
 
3
  import React from 'react'
4
  import { loadFont } from "@remotion/google-fonts/MontserratAlternates";
5
  import { Series } from "remotion";
6
+ import { IGSimpleScene } from '../ig-reel/IGSimpleScene';
7
  import { OriginalManuscript, Transcript } from 'common-utils';
8
  import TransitionSeries from 'remotion-transition-series';
9
  import { VideoSplash } from '../anims/VideoSplash';
 
53
  script={props}
54
  item={scriptItem} />
55
  :
56
+ <IGSimpleScene
57
  script={props}
58
  item={scriptItem}
59
  SubtitleComponent={({ group, word }) => {
src/models/Types.ts CHANGED
@@ -1,19 +1,10 @@
1
- export interface Word {
2
- start: Number
3
- end: Number
4
- phenomes: Array<any>
5
- startOffset: Number
6
- endOffset: Number
7
- idx: Number
8
- sentence_end: Boolean
9
- case: "success" | "failure"
10
- alignedWord: String
11
- word: String
12
  }
13
 
14
 
15
- export interface Group {
16
- words: Word[]
17
- start: Number
18
- end: Number
19
  }
 
1
+ import { Word as IWord, Group as IGroup } from "common-utils"
2
+
3
+ export interface Word extends IWord {
4
+
 
 
 
 
 
 
 
5
  }
6
 
7
 
8
+ export interface Group extends IGroup {
9
+
 
 
10
  }
src/samples/IG2LineMotivationalScene.json ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "meta": {
3
+ "workspaceFolderPath": ".",
4
+ "generationConfig": {
5
+ "platform": "instagram",
6
+ "playlistName": "motivational-2-liner",
7
+ "sourceVariantName": "myusername",
8
+ "publisherUserId": "myusername",
9
+ "disableCache": false,
10
+ "runGeneration": "1",
11
+ "runPublish": "1",
12
+ "asyncRender": "1",
13
+ "isTestMode": false,
14
+ "isChatGptTestMode": false,
15
+ "isDoParaphraseSource": true,
16
+ "youtubeSourceUrl": "",
17
+ "sourceContentUrl": "",
18
+ "wikipediaTopicUrl": "",
19
+ "blogUrl": "",
20
+ "chatgptConfig": {
21
+ "topic_name": "",
22
+ "style": "",
23
+ "word_count": "400",
24
+ "words_per_section": "200"
25
+ },
26
+ "speechVariantName": "",
27
+ "speechVoiceName": "",
28
+ "speechEndDelaySec": "",
29
+ "videoTitleOverride": "",
30
+ "bgMusicYoutubeVideoUrl": "",
31
+ "publishWebhookUrl": "https://app.semibit.in/api/webhooks/custom-notebook",
32
+ "genId": "myusername",
33
+ "playlistId": "myusername",
34
+ "extras": {}
35
+ },
36
+ "callback_url": "http://mediacore.semibit.in/generator/render_callback",
37
+ "renderComposition": "PaperDriveComposition",
38
+ "fps": 40,
39
+ "resolution": {
40
+ "width": 720,
41
+ "height": 1280
42
+ },
43
+ "publish_config": {
44
+ "platform": "instagram",
45
+ "userId": "myusername",
46
+ "playlistId": "myusername"
47
+ },
48
+ "filesRootDir": "."
49
+ },
50
+ "transcript": [
51
+ {
52
+ "audioFullPath": "audio.mp3",
53
+ "text": "",
54
+ "index": 0,
55
+ "status": true,
56
+ "transition_type": "none",
57
+ "title": "",
58
+ "durationInSeconds": 12,
59
+ "mediaAbsPaths": [
60
+ {
61
+ "type": "video",
62
+ "path": "background.mp4",
63
+ "durationSec": 12,
64
+ "dimensions": {
65
+ "width": 720,
66
+ "height": 1280
67
+ }
68
+ },
69
+ {
70
+ "type": "image",
71
+ "path": "logo.png"
72
+ }
73
+ ],
74
+ "extras": {
75
+ "template": "motivational-2-liner"
76
+ },
77
+ "total_syllables": 0,
78
+ "audioCaption": {
79
+ "transcript": "Hello world.",
80
+ "words": [
81
+ {
82
+ "textStyle": {
83
+ "fontSize": 35
84
+ },
85
+ "start": 0.0,
86
+ "end": 0.0,
87
+ "idx": 0,
88
+ "word": "If you want to hide the element"
89
+ },
90
+ {
91
+ "textStyle": {
92
+ "color": "#FFFF00",
93
+ "fontSize": 40
94
+ },
95
+ "start": 2.5,
96
+ "end": 3,
97
+ "idx": 1,
98
+ "word": "Hide it before the animation starts."
99
+ },
100
+ {
101
+ "textStyle": {
102
+ "position": "absolute",
103
+ "bottom": "10%"
104
+ },
105
+ "start": 6,
106
+ "end": 6.5,
107
+ "idx": 2,
108
+ "word": "WATERMARK"
109
+ }
110
+ ]
111
+ },
112
+ "calculate_duration_sec": null
113
+ }
114
+ ],
115
+ "status": true,
116
+ "outputFile": "./original_manuscript.json",
117
+ "id": "3f8c288aed",
118
+ "transcriptText": "None"
119
+ }
src/samples/sample-caption.json ADDED
@@ -0,0 +1,1855 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "transcript": "A surreal and intense scene of a man hand wrestling a gadha (donkey) in human form, the gadha depicted as a muscular humanoid with donkey ears, a furry face, and a powerful build; both locked in a fierce arm-wrestling match on a rough stone table, muscles straining, expressions full of determination; dramatic lighting casting deep shadows, with a rugged, ancient arena setting creating an epic and mythical atmosphere.",
3
+ "words": [
4
+ {
5
+ "case": "not-found-in-transcript",
6
+ "end": 0.01,
7
+ "phones": [
8
+ {
9
+ "duration": 0.01,
10
+ "phone": "ah_S"
11
+ }
12
+ ],
13
+ "start": 0.0,
14
+ "word": "uh"
15
+ },
16
+ {
17
+ "alignedWord": "a",
18
+ "case": "success",
19
+ "end": 0.14,
20
+ "endOffset": 1,
21
+ "phones": [
22
+ {
23
+ "duration": 0.1,
24
+ "phone": "ah_S"
25
+ }
26
+ ],
27
+ "start": 0.04,
28
+ "startOffset": 0,
29
+ "word": "A"
30
+ },
31
+ {
32
+ "alignedWord": "surreal",
33
+ "case": "success",
34
+ "end": 0.65,
35
+ "endOffset": 9,
36
+ "phones": [
37
+ {
38
+ "duration": 0.14,
39
+ "phone": "s_B"
40
+ },
41
+ {
42
+ "duration": 0.16,
43
+ "phone": "er_I"
44
+ },
45
+ {
46
+ "duration": 0.1,
47
+ "phone": "iy_I"
48
+ },
49
+ {
50
+ "duration": 0.11,
51
+ "phone": "l_E"
52
+ }
53
+ ],
54
+ "start": 0.14,
55
+ "startOffset": 2,
56
+ "word": "surreal"
57
+ },
58
+ {
59
+ "alignedWord": "and",
60
+ "case": "success",
61
+ "end": 0.78,
62
+ "endOffset": 13,
63
+ "phones": [
64
+ {
65
+ "duration": 0.04,
66
+ "phone": "ae_B"
67
+ },
68
+ {
69
+ "duration": 0.06,
70
+ "phone": "n_I"
71
+ },
72
+ {
73
+ "duration": 0.03,
74
+ "phone": "d_E"
75
+ }
76
+ ],
77
+ "start": 0.65,
78
+ "startOffset": 10,
79
+ "word": "and"
80
+ },
81
+ {
82
+ "alignedWord": "intense",
83
+ "case": "success",
84
+ "end": 1.23,
85
+ "endOffset": 21,
86
+ "phones": [
87
+ {
88
+ "duration": 0.06,
89
+ "phone": "ih_B"
90
+ },
91
+ {
92
+ "duration": 0.07,
93
+ "phone": "n_I"
94
+ },
95
+ {
96
+ "duration": 0.09,
97
+ "phone": "t_I"
98
+ },
99
+ {
100
+ "duration": 0.09,
101
+ "phone": "eh_I"
102
+ },
103
+ {
104
+ "duration": 0.1,
105
+ "phone": "n_I"
106
+ },
107
+ {
108
+ "duration": 0.04,
109
+ "phone": "s_E"
110
+ }
111
+ ],
112
+ "start": 0.78,
113
+ "startOffset": 14,
114
+ "word": "intense"
115
+ },
116
+ {
117
+ "alignedWord": "scene",
118
+ "case": "success",
119
+ "end": 1.52,
120
+ "endOffset": 27,
121
+ "phones": [
122
+ {
123
+ "duration": 0.12,
124
+ "phone": "s_B"
125
+ },
126
+ {
127
+ "duration": 0.11,
128
+ "phone": "iy_I"
129
+ },
130
+ {
131
+ "duration": 0.05,
132
+ "phone": "n_E"
133
+ }
134
+ ],
135
+ "start": 1.24,
136
+ "startOffset": 22,
137
+ "word": "scene"
138
+ },
139
+ {
140
+ "alignedWord": "of",
141
+ "case": "success",
142
+ "end": 1.69,
143
+ "endOffset": 30,
144
+ "phones": [
145
+ {
146
+ "duration": 0.07,
147
+ "phone": "ah_B"
148
+ },
149
+ {
150
+ "duration": 0.1,
151
+ "phone": "v_E"
152
+ }
153
+ ],
154
+ "start": 1.52,
155
+ "startOffset": 28,
156
+ "word": "of"
157
+ },
158
+ {
159
+ "alignedWord": "a",
160
+ "case": "success",
161
+ "end": 1.74,
162
+ "endOffset": 32,
163
+ "phones": [
164
+ {
165
+ "duration": 0.05,
166
+ "phone": "ah_S"
167
+ }
168
+ ],
169
+ "start": 1.69,
170
+ "startOffset": 31,
171
+ "word": "a"
172
+ },
173
+ {
174
+ "alignedWord": "man",
175
+ "case": "success",
176
+ "end": 2.08,
177
+ "endOffset": 36,
178
+ "phones": [
179
+ {
180
+ "duration": 0.11,
181
+ "phone": "m_B"
182
+ },
183
+ {
184
+ "duration": 0.14,
185
+ "phone": "ae_I"
186
+ },
187
+ {
188
+ "duration": 0.09,
189
+ "phone": "n_E"
190
+ }
191
+ ],
192
+ "start": 1.74,
193
+ "startOffset": 33,
194
+ "word": "man"
195
+ },
196
+ {
197
+ "alignedWord": "hand",
198
+ "case": "success",
199
+ "end": 2.38,
200
+ "endOffset": 41,
201
+ "phones": [
202
+ {
203
+ "duration": 0.06,
204
+ "phone": "hh_B"
205
+ },
206
+ {
207
+ "duration": 0.11,
208
+ "phone": "ae_I"
209
+ },
210
+ {
211
+ "duration": 0.04,
212
+ "phone": "n_I"
213
+ },
214
+ {
215
+ "duration": 0.09,
216
+ "phone": "d_E"
217
+ }
218
+ ],
219
+ "start": 2.08,
220
+ "startOffset": 37,
221
+ "word": "hand"
222
+ },
223
+ {
224
+ "alignedWord": "wrestling",
225
+ "case": "success",
226
+ "end": 2.82,
227
+ "endOffset": 51,
228
+ "phones": [
229
+ {
230
+ "duration": 0.06,
231
+ "phone": "r_B"
232
+ },
233
+ {
234
+ "duration": 0.07,
235
+ "phone": "eh_I"
236
+ },
237
+ {
238
+ "duration": 0.1,
239
+ "phone": "s_I"
240
+ },
241
+ {
242
+ "duration": 0.06,
243
+ "phone": "l_I"
244
+ },
245
+ {
246
+ "duration": 0.06,
247
+ "phone": "ih_I"
248
+ },
249
+ {
250
+ "duration": 0.09,
251
+ "phone": "ng_E"
252
+ }
253
+ ],
254
+ "start": 2.38,
255
+ "startOffset": 42,
256
+ "word": "wrestling"
257
+ },
258
+ {
259
+ "case": "not-found-in-audio",
260
+ "endOffset": 53,
261
+ "startOffset": 52,
262
+ "word": "a"
263
+ },
264
+ {
265
+ "alignedWord": "<unk>",
266
+ "case": "success",
267
+ "end": 3.4000000000000004,
268
+ "endOffset": 59,
269
+ "phones": [
270
+ {
271
+ "duration": 0.43,
272
+ "phone": "oov_S"
273
+ }
274
+ ],
275
+ "start": 2.97,
276
+ "startOffset": 54,
277
+ "word": "gadha"
278
+ },
279
+ {
280
+ "alignedWord": "donkey",
281
+ "case": "success",
282
+ "end": 4.38,
283
+ "endOffset": 67,
284
+ "phones": [
285
+ {
286
+ "duration": 0.13,
287
+ "phone": "d_B"
288
+ },
289
+ {
290
+ "duration": 0.07,
291
+ "phone": "aa_I"
292
+ },
293
+ {
294
+ "duration": 0.1,
295
+ "phone": "ng_I"
296
+ },
297
+ {
298
+ "duration": 0.12,
299
+ "phone": "k_I"
300
+ },
301
+ {
302
+ "duration": 0.3,
303
+ "phone": "iy_E"
304
+ }
305
+ ],
306
+ "start": 3.66,
307
+ "startOffset": 61,
308
+ "word": "donkey"
309
+ },
310
+ {
311
+ "alignedWord": "in",
312
+ "case": "success",
313
+ "end": 4.66,
314
+ "endOffset": 71,
315
+ "phones": [
316
+ {
317
+ "duration": 0.1,
318
+ "phone": "ih_B"
319
+ },
320
+ {
321
+ "duration": 0.09,
322
+ "phone": "n_E"
323
+ }
324
+ ],
325
+ "start": 4.47,
326
+ "startOffset": 69,
327
+ "word": "in"
328
+ },
329
+ {
330
+ "alignedWord": "human",
331
+ "case": "success",
332
+ "end": 5.03,
333
+ "endOffset": 77,
334
+ "phones": [
335
+ {
336
+ "duration": 0.04,
337
+ "phone": "hh_B"
338
+ },
339
+ {
340
+ "duration": 0.06,
341
+ "phone": "y_I"
342
+ },
343
+ {
344
+ "duration": 0.09,
345
+ "phone": "uw_I"
346
+ },
347
+ {
348
+ "duration": 0.01,
349
+ "phone": "m_I"
350
+ },
351
+ {
352
+ "duration": 0.08,
353
+ "phone": "ah_I"
354
+ },
355
+ {
356
+ "duration": 0.09,
357
+ "phone": "n_E"
358
+ }
359
+ ],
360
+ "start": 4.66,
361
+ "startOffset": 72,
362
+ "word": "human"
363
+ },
364
+ {
365
+ "alignedWord": "form",
366
+ "case": "success",
367
+ "end": 5.48,
368
+ "endOffset": 82,
369
+ "phones": [
370
+ {
371
+ "duration": 0.09,
372
+ "phone": "f_B"
373
+ },
374
+ {
375
+ "duration": 0.16,
376
+ "phone": "ao_I"
377
+ },
378
+ {
379
+ "duration": 0.07,
380
+ "phone": "r_I"
381
+ },
382
+ {
383
+ "duration": 0.13,
384
+ "phone": "m_E"
385
+ }
386
+ ],
387
+ "start": 5.03,
388
+ "startOffset": 78,
389
+ "word": "form"
390
+ },
391
+ {
392
+ "alignedWord": "the",
393
+ "case": "success",
394
+ "end": 5.88,
395
+ "endOffset": 87,
396
+ "phones": [
397
+ {
398
+ "duration": 0.08,
399
+ "phone": "dh_B"
400
+ },
401
+ {
402
+ "duration": 0.08,
403
+ "phone": "ah_E"
404
+ }
405
+ ],
406
+ "start": 5.72,
407
+ "startOffset": 84,
408
+ "word": "the"
409
+ },
410
+ {
411
+ "alignedWord": "<unk>",
412
+ "case": "success",
413
+ "end": 6.16,
414
+ "endOffset": 93,
415
+ "phones": [
416
+ {
417
+ "duration": 0.28,
418
+ "phone": "oov_S"
419
+ }
420
+ ],
421
+ "start": 5.88,
422
+ "startOffset": 88,
423
+ "word": "gadha"
424
+ },
425
+ {
426
+ "alignedWord": "depicted",
427
+ "case": "success",
428
+ "end": 6.64,
429
+ "endOffset": 102,
430
+ "phones": [
431
+ {
432
+ "duration": 0.06,
433
+ "phone": "d_B"
434
+ },
435
+ {
436
+ "duration": 0.04,
437
+ "phone": "ih_I"
438
+ },
439
+ {
440
+ "duration": 0.09,
441
+ "phone": "p_I"
442
+ },
443
+ {
444
+ "duration": 0.05,
445
+ "phone": "ih_I"
446
+ },
447
+ {
448
+ "duration": 0.07,
449
+ "phone": "k_I"
450
+ },
451
+ {
452
+ "duration": 0.05,
453
+ "phone": "t_I"
454
+ },
455
+ {
456
+ "duration": 0.05,
457
+ "phone": "ah_I"
458
+ },
459
+ {
460
+ "duration": 0.06,
461
+ "phone": "d_E"
462
+ }
463
+ ],
464
+ "start": 6.17,
465
+ "startOffset": 94,
466
+ "word": "depicted"
467
+ },
468
+ {
469
+ "alignedWord": "as",
470
+ "case": "success",
471
+ "end": 6.79,
472
+ "endOffset": 105,
473
+ "phones": [
474
+ {
475
+ "duration": 0.08,
476
+ "phone": "ae_B"
477
+ },
478
+ {
479
+ "duration": 0.07,
480
+ "phone": "z_E"
481
+ }
482
+ ],
483
+ "start": 6.64,
484
+ "startOffset": 103,
485
+ "word": "as"
486
+ },
487
+ {
488
+ "alignedWord": "a",
489
+ "case": "success",
490
+ "end": 6.83,
491
+ "endOffset": 107,
492
+ "phones": [
493
+ {
494
+ "duration": 0.04,
495
+ "phone": "ah_S"
496
+ }
497
+ ],
498
+ "start": 6.79,
499
+ "startOffset": 106,
500
+ "word": "a"
501
+ },
502
+ {
503
+ "alignedWord": "muscular",
504
+ "case": "success",
505
+ "end": 7.3,
506
+ "endOffset": 116,
507
+ "phones": [
508
+ {
509
+ "duration": 0.1,
510
+ "phone": "m_B"
511
+ },
512
+ {
513
+ "duration": 0.09,
514
+ "phone": "ah_I"
515
+ },
516
+ {
517
+ "duration": 0.09,
518
+ "phone": "s_I"
519
+ },
520
+ {
521
+ "duration": 0.04,
522
+ "phone": "k_I"
523
+ },
524
+ {
525
+ "duration": 0.03,
526
+ "phone": "y_I"
527
+ },
528
+ {
529
+ "duration": 0.03,
530
+ "phone": "ah_I"
531
+ },
532
+ {
533
+ "duration": 0.08,
534
+ "phone": "l_I"
535
+ },
536
+ {
537
+ "duration": 0.01,
538
+ "phone": "er_E"
539
+ }
540
+ ],
541
+ "start": 6.83,
542
+ "startOffset": 108,
543
+ "word": "muscular"
544
+ },
545
+ {
546
+ "case": "not-found-in-transcript",
547
+ "end": 7.34,
548
+ "phones": [
549
+ {
550
+ "duration": 0.04,
551
+ "phone": "ah_S"
552
+ }
553
+ ],
554
+ "start": 7.3,
555
+ "word": "uh"
556
+ },
557
+ {
558
+ "alignedWord": "<unk>",
559
+ "case": "success",
560
+ "end": 7.88,
561
+ "endOffset": 125,
562
+ "phones": [
563
+ {
564
+ "duration": 0.22,
565
+ "phone": "oov_S"
566
+ }
567
+ ],
568
+ "start": 7.66,
569
+ "startOffset": 117,
570
+ "word": "humanoid"
571
+ },
572
+ {
573
+ "alignedWord": "with",
574
+ "case": "success",
575
+ "end": 8.04,
576
+ "endOffset": 130,
577
+ "phones": [
578
+ {
579
+ "duration": 0.06,
580
+ "phone": "w_B"
581
+ },
582
+ {
583
+ "duration": 0.05,
584
+ "phone": "ih_I"
585
+ },
586
+ {
587
+ "duration": 0.04,
588
+ "phone": "dh_E"
589
+ }
590
+ ],
591
+ "start": 7.89,
592
+ "startOffset": 126,
593
+ "word": "with"
594
+ },
595
+ {
596
+ "alignedWord": "donkey",
597
+ "case": "success",
598
+ "end": 8.510000000000002,
599
+ "endOffset": 137,
600
+ "phones": [
601
+ {
602
+ "duration": 0.09,
603
+ "phone": "d_B"
604
+ },
605
+ {
606
+ "duration": 0.07,
607
+ "phone": "aa_I"
608
+ },
609
+ {
610
+ "duration": 0.09,
611
+ "phone": "ng_I"
612
+ },
613
+ {
614
+ "duration": 0.11,
615
+ "phone": "k_I"
616
+ },
617
+ {
618
+ "duration": 0.1,
619
+ "phone": "iy_E"
620
+ }
621
+ ],
622
+ "start": 8.05,
623
+ "startOffset": 131,
624
+ "word": "donkey"
625
+ },
626
+ {
627
+ "alignedWord": "ears",
628
+ "case": "success",
629
+ "end": 8.92,
630
+ "endOffset": 142,
631
+ "phones": [
632
+ {
633
+ "duration": 0.17,
634
+ "phone": "iy_B"
635
+ },
636
+ {
637
+ "duration": 0.1,
638
+ "phone": "r_I"
639
+ },
640
+ {
641
+ "duration": 0.14,
642
+ "phone": "z_E"
643
+ }
644
+ ],
645
+ "start": 8.51,
646
+ "startOffset": 138,
647
+ "word": "ears"
648
+ },
649
+ {
650
+ "alignedWord": "a",
651
+ "case": "success",
652
+ "end": 9.08,
653
+ "endOffset": 145,
654
+ "phones": [
655
+ {
656
+ "duration": 0.13,
657
+ "phone": "ah_S"
658
+ }
659
+ ],
660
+ "start": 8.95,
661
+ "startOffset": 144,
662
+ "word": "a"
663
+ },
664
+ {
665
+ "alignedWord": "furry",
666
+ "case": "success",
667
+ "end": 9.41,
668
+ "endOffset": 151,
669
+ "phones": [
670
+ {
671
+ "duration": 0.13,
672
+ "phone": "f_B"
673
+ },
674
+ {
675
+ "duration": 0.11,
676
+ "phone": "er_I"
677
+ },
678
+ {
679
+ "duration": 0.09,
680
+ "phone": "iy_E"
681
+ }
682
+ ],
683
+ "start": 9.08,
684
+ "startOffset": 146,
685
+ "word": "furry"
686
+ },
687
+ {
688
+ "alignedWord": "face",
689
+ "case": "success",
690
+ "end": 9.75,
691
+ "endOffset": 156,
692
+ "phones": [
693
+ {
694
+ "duration": 0.13,
695
+ "phone": "f_B"
696
+ },
697
+ {
698
+ "duration": 0.11,
699
+ "phone": "ey_I"
700
+ },
701
+ {
702
+ "duration": 0.1,
703
+ "phone": "s_E"
704
+ }
705
+ ],
706
+ "start": 9.41,
707
+ "startOffset": 152,
708
+ "word": "face"
709
+ },
710
+ {
711
+ "alignedWord": "and",
712
+ "case": "success",
713
+ "end": 9.95,
714
+ "endOffset": 161,
715
+ "phones": [
716
+ {
717
+ "duration": 0.06,
718
+ "phone": "ah_B"
719
+ },
720
+ {
721
+ "duration": 0.06,
722
+ "phone": "n_I"
723
+ },
724
+ {
725
+ "duration": 0.05,
726
+ "phone": "d_E"
727
+ }
728
+ ],
729
+ "start": 9.78,
730
+ "startOffset": 158,
731
+ "word": "and"
732
+ },
733
+ {
734
+ "alignedWord": "a",
735
+ "case": "success",
736
+ "end": 10.02,
737
+ "endOffset": 163,
738
+ "phones": [
739
+ {
740
+ "duration": 0.07,
741
+ "phone": "ah_S"
742
+ }
743
+ ],
744
+ "start": 9.95,
745
+ "startOffset": 162,
746
+ "word": "a"
747
+ },
748
+ {
749
+ "alignedWord": "powerful",
750
+ "case": "success",
751
+ "end": 10.54,
752
+ "endOffset": 172,
753
+ "phones": [
754
+ {
755
+ "duration": 0.09,
756
+ "phone": "p_B"
757
+ },
758
+ {
759
+ "duration": 0.14,
760
+ "phone": "aw_I"
761
+ },
762
+ {
763
+ "duration": 0.08,
764
+ "phone": "er_I"
765
+ },
766
+ {
767
+ "duration": 0.07,
768
+ "phone": "f_I"
769
+ },
770
+ {
771
+ "duration": 0.04,
772
+ "phone": "ah_I"
773
+ },
774
+ {
775
+ "duration": 0.1,
776
+ "phone": "l_E"
777
+ }
778
+ ],
779
+ "start": 10.02,
780
+ "startOffset": 164,
781
+ "word": "powerful"
782
+ },
783
+ {
784
+ "alignedWord": "build",
785
+ "case": "success",
786
+ "end": 10.92,
787
+ "endOffset": 178,
788
+ "phones": [
789
+ {
790
+ "duration": 0.07,
791
+ "phone": "b_B"
792
+ },
793
+ {
794
+ "duration": 0.1,
795
+ "phone": "ih_I"
796
+ },
797
+ {
798
+ "duration": 0.11,
799
+ "phone": "l_I"
800
+ },
801
+ {
802
+ "duration": 0.09,
803
+ "phone": "d_E"
804
+ }
805
+ ],
806
+ "start": 10.55,
807
+ "startOffset": 173,
808
+ "word": "build"
809
+ },
810
+ {
811
+ "alignedWord": "both",
812
+ "case": "success",
813
+ "end": 11.409999999999998,
814
+ "endOffset": 184,
815
+ "phones": [
816
+ {
817
+ "duration": 0.11,
818
+ "phone": "b_B"
819
+ },
820
+ {
821
+ "duration": 0.1,
822
+ "phone": "ow_I"
823
+ },
824
+ {
825
+ "duration": 0.08,
826
+ "phone": "th_E"
827
+ }
828
+ ],
829
+ "start": 11.12,
830
+ "startOffset": 180,
831
+ "word": "both"
832
+ },
833
+ {
834
+ "alignedWord": "locked",
835
+ "case": "success",
836
+ "end": 11.77,
837
+ "endOffset": 191,
838
+ "phones": [
839
+ {
840
+ "duration": 0.12,
841
+ "phone": "l_B"
842
+ },
843
+ {
844
+ "duration": 0.09,
845
+ "phone": "aa_I"
846
+ },
847
+ {
848
+ "duration": 0.08,
849
+ "phone": "k_I"
850
+ },
851
+ {
852
+ "duration": 0.06,
853
+ "phone": "t_E"
854
+ }
855
+ ],
856
+ "start": 11.42,
857
+ "startOffset": 185,
858
+ "word": "locked"
859
+ },
860
+ {
861
+ "alignedWord": "in",
862
+ "case": "success",
863
+ "end": 11.879999999999999,
864
+ "endOffset": 194,
865
+ "phones": [
866
+ {
867
+ "duration": 0.04,
868
+ "phone": "ih_B"
869
+ },
870
+ {
871
+ "duration": 0.07,
872
+ "phone": "n_E"
873
+ }
874
+ ],
875
+ "start": 11.77,
876
+ "startOffset": 192,
877
+ "word": "in"
878
+ },
879
+ {
880
+ "alignedWord": "a",
881
+ "case": "success",
882
+ "end": 11.940000000000001,
883
+ "endOffset": 196,
884
+ "phones": [
885
+ {
886
+ "duration": 0.06,
887
+ "phone": "ah_S"
888
+ }
889
+ ],
890
+ "start": 11.88,
891
+ "startOffset": 195,
892
+ "word": "a"
893
+ },
894
+ {
895
+ "alignedWord": "fierce",
896
+ "case": "success",
897
+ "end": 12.35,
898
+ "endOffset": 203,
899
+ "phones": [
900
+ {
901
+ "duration": 0.13,
902
+ "phone": "f_B"
903
+ },
904
+ {
905
+ "duration": 0.1,
906
+ "phone": "ih_I"
907
+ },
908
+ {
909
+ "duration": 0.07,
910
+ "phone": "r_I"
911
+ },
912
+ {
913
+ "duration": 0.11,
914
+ "phone": "s_E"
915
+ }
916
+ ],
917
+ "start": 11.94,
918
+ "startOffset": 197,
919
+ "word": "fierce"
920
+ },
921
+ {
922
+ "alignedWord": "arm",
923
+ "case": "success",
924
+ "end": 12.67,
925
+ "endOffset": 207,
926
+ "phones": [
927
+ {
928
+ "duration": 0.15,
929
+ "phone": "aa_B"
930
+ },
931
+ {
932
+ "duration": 0.07,
933
+ "phone": "r_I"
934
+ },
935
+ {
936
+ "duration": 0.09,
937
+ "phone": "m_E"
938
+ }
939
+ ],
940
+ "start": 12.36,
941
+ "startOffset": 204,
942
+ "word": "arm"
943
+ },
944
+ {
945
+ "alignedWord": "wrestling",
946
+ "case": "success",
947
+ "end": 13.06,
948
+ "endOffset": 217,
949
+ "phones": [
950
+ {
951
+ "duration": 0.05,
952
+ "phone": "r_B"
953
+ },
954
+ {
955
+ "duration": 0.06,
956
+ "phone": "eh_I"
957
+ },
958
+ {
959
+ "duration": 0.09,
960
+ "phone": "s_I"
961
+ },
962
+ {
963
+ "duration": 0.05,
964
+ "phone": "l_I"
965
+ },
966
+ {
967
+ "duration": 0.05,
968
+ "phone": "ih_I"
969
+ },
970
+ {
971
+ "duration": 0.09,
972
+ "phone": "ng_E"
973
+ }
974
+ ],
975
+ "start": 12.67,
976
+ "startOffset": 208,
977
+ "word": "wrestling"
978
+ },
979
+ {
980
+ "alignedWord": "match",
981
+ "case": "success",
982
+ "end": 13.309999,
983
+ "endOffset": 223,
984
+ "phones": [
985
+ {
986
+ "duration": 0.05,
987
+ "phone": "m_B"
988
+ },
989
+ {
990
+ "duration": 0.1,
991
+ "phone": "ae_I"
992
+ },
993
+ {
994
+ "duration": 0.1,
995
+ "phone": "ch_E"
996
+ }
997
+ ],
998
+ "start": 13.059999,
999
+ "startOffset": 218,
1000
+ "word": "match"
1001
+ },
1002
+ {
1003
+ "alignedWord": "on",
1004
+ "case": "success",
1005
+ "end": 13.429998999999999,
1006
+ "endOffset": 226,
1007
+ "phones": [
1008
+ {
1009
+ "duration": 0.06,
1010
+ "phone": "aa_B"
1011
+ },
1012
+ {
1013
+ "duration": 0.06,
1014
+ "phone": "n_E"
1015
+ }
1016
+ ],
1017
+ "start": 13.309999,
1018
+ "startOffset": 224,
1019
+ "word": "on"
1020
+ },
1021
+ {
1022
+ "alignedWord": "a",
1023
+ "case": "success",
1024
+ "end": 13.509999,
1025
+ "endOffset": 228,
1026
+ "phones": [
1027
+ {
1028
+ "duration": 0.08,
1029
+ "phone": "ah_S"
1030
+ }
1031
+ ],
1032
+ "start": 13.429999,
1033
+ "startOffset": 227,
1034
+ "word": "a"
1035
+ },
1036
+ {
1037
+ "alignedWord": "rough",
1038
+ "case": "success",
1039
+ "end": 13.739999000000001,
1040
+ "endOffset": 234,
1041
+ "phones": [
1042
+ {
1043
+ "duration": 0.08,
1044
+ "phone": "r_B"
1045
+ },
1046
+ {
1047
+ "duration": 0.07,
1048
+ "phone": "ah_I"
1049
+ },
1050
+ {
1051
+ "duration": 0.08,
1052
+ "phone": "f_E"
1053
+ }
1054
+ ],
1055
+ "start": 13.509999,
1056
+ "startOffset": 229,
1057
+ "word": "rough"
1058
+ },
1059
+ {
1060
+ "alignedWord": "stone",
1061
+ "case": "success",
1062
+ "end": 14.11,
1063
+ "endOffset": 240,
1064
+ "phones": [
1065
+ {
1066
+ "duration": 0.08,
1067
+ "phone": "s_B"
1068
+ },
1069
+ {
1070
+ "duration": 0.09,
1071
+ "phone": "t_I"
1072
+ },
1073
+ {
1074
+ "duration": 0.1,
1075
+ "phone": "ow_I"
1076
+ },
1077
+ {
1078
+ "duration": 0.1,
1079
+ "phone": "n_E"
1080
+ }
1081
+ ],
1082
+ "start": 13.74,
1083
+ "startOffset": 235,
1084
+ "word": "stone"
1085
+ },
1086
+ {
1087
+ "alignedWord": "table",
1088
+ "case": "success",
1089
+ "end": 14.579998999999999,
1090
+ "endOffset": 246,
1091
+ "phones": [
1092
+ {
1093
+ "duration": 0.08,
1094
+ "phone": "t_B"
1095
+ },
1096
+ {
1097
+ "duration": 0.12,
1098
+ "phone": "ey_I"
1099
+ },
1100
+ {
1101
+ "duration": 0.03,
1102
+ "phone": "b_I"
1103
+ },
1104
+ {
1105
+ "duration": 0.08,
1106
+ "phone": "ah_I"
1107
+ },
1108
+ {
1109
+ "duration": 0.13,
1110
+ "phone": "l_E"
1111
+ }
1112
+ ],
1113
+ "start": 14.139999,
1114
+ "startOffset": 241,
1115
+ "word": "table"
1116
+ },
1117
+ {
1118
+ "alignedWord": "muscles",
1119
+ "case": "success",
1120
+ "end": 15.309999999999999,
1121
+ "endOffset": 255,
1122
+ "phones": [
1123
+ {
1124
+ "duration": 0.13,
1125
+ "phone": "m_B"
1126
+ },
1127
+ {
1128
+ "duration": 0.07,
1129
+ "phone": "ah_I"
1130
+ },
1131
+ {
1132
+ "duration": 0.08,
1133
+ "phone": "s_I"
1134
+ },
1135
+ {
1136
+ "duration": 0.05,
1137
+ "phone": "ah_I"
1138
+ },
1139
+ {
1140
+ "duration": 0.09,
1141
+ "phone": "l_I"
1142
+ },
1143
+ {
1144
+ "duration": 0.03,
1145
+ "phone": "z_E"
1146
+ }
1147
+ ],
1148
+ "start": 14.86,
1149
+ "startOffset": 248,
1150
+ "word": "muscles"
1151
+ },
1152
+ {
1153
+ "alignedWord": "straining",
1154
+ "case": "success",
1155
+ "end": 15.92,
1156
+ "endOffset": 265,
1157
+ "phones": [
1158
+ {
1159
+ "duration": 0.08,
1160
+ "phone": "s_B"
1161
+ },
1162
+ {
1163
+ "duration": 0.09,
1164
+ "phone": "t_I"
1165
+ },
1166
+ {
1167
+ "duration": 0.08,
1168
+ "phone": "r_I"
1169
+ },
1170
+ {
1171
+ "duration": 0.09,
1172
+ "phone": "ey_I"
1173
+ },
1174
+ {
1175
+ "duration": 0.04,
1176
+ "phone": "n_I"
1177
+ },
1178
+ {
1179
+ "duration": 0.08,
1180
+ "phone": "ih_I"
1181
+ },
1182
+ {
1183
+ "duration": 0.14,
1184
+ "phone": "ng_E"
1185
+ }
1186
+ ],
1187
+ "start": 15.32,
1188
+ "startOffset": 256,
1189
+ "word": "straining"
1190
+ },
1191
+ {
1192
+ "alignedWord": "expressions",
1193
+ "case": "success",
1194
+ "end": 16.66,
1195
+ "endOffset": 278,
1196
+ "phones": [
1197
+ {
1198
+ "duration": 0.09,
1199
+ "phone": "ih_B"
1200
+ },
1201
+ {
1202
+ "duration": 0.07,
1203
+ "phone": "k_I"
1204
+ },
1205
+ {
1206
+ "duration": 0.07,
1207
+ "phone": "s_I"
1208
+ },
1209
+ {
1210
+ "duration": 0.06,
1211
+ "phone": "p_I"
1212
+ },
1213
+ {
1214
+ "duration": 0.06,
1215
+ "phone": "r_I"
1216
+ },
1217
+ {
1218
+ "duration": 0.06,
1219
+ "phone": "eh_I"
1220
+ },
1221
+ {
1222
+ "duration": 0.09,
1223
+ "phone": "sh_I"
1224
+ },
1225
+ {
1226
+ "duration": 0.06,
1227
+ "phone": "ah_I"
1228
+ },
1229
+ {
1230
+ "duration": 0.07,
1231
+ "phone": "n_I"
1232
+ },
1233
+ {
1234
+ "duration": 0.07,
1235
+ "phone": "z_E"
1236
+ }
1237
+ ],
1238
+ "start": 15.96,
1239
+ "startOffset": 267,
1240
+ "word": "expressions"
1241
+ },
1242
+ {
1243
+ "alignedWord": "full",
1244
+ "case": "success",
1245
+ "end": 16.91,
1246
+ "endOffset": 283,
1247
+ "phones": [
1248
+ {
1249
+ "duration": 0.1,
1250
+ "phone": "f_B"
1251
+ },
1252
+ {
1253
+ "duration": 0.09,
1254
+ "phone": "uh_I"
1255
+ },
1256
+ {
1257
+ "duration": 0.06,
1258
+ "phone": "l_E"
1259
+ }
1260
+ ],
1261
+ "start": 16.66,
1262
+ "startOffset": 279,
1263
+ "word": "full"
1264
+ },
1265
+ {
1266
+ "alignedWord": "of",
1267
+ "case": "success",
1268
+ "end": 17.03,
1269
+ "endOffset": 286,
1270
+ "phones": [
1271
+ {
1272
+ "duration": 0.04,
1273
+ "phone": "ah_B"
1274
+ },
1275
+ {
1276
+ "duration": 0.08,
1277
+ "phone": "v_E"
1278
+ }
1279
+ ],
1280
+ "start": 16.91,
1281
+ "startOffset": 284,
1282
+ "word": "of"
1283
+ },
1284
+ {
1285
+ "alignedWord": "determination",
1286
+ "case": "success",
1287
+ "end": 17.909999,
1288
+ "endOffset": 300,
1289
+ "phones": [
1290
+ {
1291
+ "duration": 0.04,
1292
+ "phone": "d_B"
1293
+ },
1294
+ {
1295
+ "duration": 0.07,
1296
+ "phone": "ih_I"
1297
+ },
1298
+ {
1299
+ "duration": 0.09,
1300
+ "phone": "t_I"
1301
+ },
1302
+ {
1303
+ "duration": 0.1,
1304
+ "phone": "er_I"
1305
+ },
1306
+ {
1307
+ "duration": 0.03,
1308
+ "phone": "m_I"
1309
+ },
1310
+ {
1311
+ "duration": 0.07,
1312
+ "phone": "ah_I"
1313
+ },
1314
+ {
1315
+ "duration": 0.08,
1316
+ "phone": "n_I"
1317
+ },
1318
+ {
1319
+ "duration": 0.1,
1320
+ "phone": "ey_I"
1321
+ },
1322
+ {
1323
+ "duration": 0.11,
1324
+ "phone": "sh_I"
1325
+ },
1326
+ {
1327
+ "duration": 0.06,
1328
+ "phone": "ah_I"
1329
+ },
1330
+ {
1331
+ "duration": 0.13,
1332
+ "phone": "n_E"
1333
+ }
1334
+ ],
1335
+ "start": 17.029999,
1336
+ "startOffset": 287,
1337
+ "word": "determination"
1338
+ },
1339
+ {
1340
+ "alignedWord": "dramatic",
1341
+ "case": "success",
1342
+ "end": 18.8,
1343
+ "endOffset": 310,
1344
+ "phones": [
1345
+ {
1346
+ "duration": 0.09,
1347
+ "phone": "d_B"
1348
+ },
1349
+ {
1350
+ "duration": 0.07,
1351
+ "phone": "r_I"
1352
+ },
1353
+ {
1354
+ "duration": 0.05,
1355
+ "phone": "ah_I"
1356
+ },
1357
+ {
1358
+ "duration": 0.06,
1359
+ "phone": "m_I"
1360
+ },
1361
+ {
1362
+ "duration": 0.1,
1363
+ "phone": "ae_I"
1364
+ },
1365
+ {
1366
+ "duration": 0.07,
1367
+ "phone": "t_I"
1368
+ },
1369
+ {
1370
+ "duration": 0.08,
1371
+ "phone": "ih_I"
1372
+ },
1373
+ {
1374
+ "duration": 0.07,
1375
+ "phone": "k_E"
1376
+ }
1377
+ ],
1378
+ "start": 18.21,
1379
+ "startOffset": 302,
1380
+ "word": "dramatic"
1381
+ },
1382
+ {
1383
+ "alignedWord": "lighting",
1384
+ "case": "success",
1385
+ "end": 19.29,
1386
+ "endOffset": 319,
1387
+ "phones": [
1388
+ {
1389
+ "duration": 0.09,
1390
+ "phone": "l_B"
1391
+ },
1392
+ {
1393
+ "duration": 0.11,
1394
+ "phone": "ay_I"
1395
+ },
1396
+ {
1397
+ "duration": 0.07,
1398
+ "phone": "t_I"
1399
+ },
1400
+ {
1401
+ "duration": 0.09,
1402
+ "phone": "ih_I"
1403
+ },
1404
+ {
1405
+ "duration": 0.13,
1406
+ "phone": "ng_E"
1407
+ }
1408
+ ],
1409
+ "start": 18.8,
1410
+ "startOffset": 311,
1411
+ "word": "lighting"
1412
+ },
1413
+ {
1414
+ "alignedWord": "casting",
1415
+ "case": "success",
1416
+ "end": 19.81,
1417
+ "endOffset": 327,
1418
+ "phones": [
1419
+ {
1420
+ "duration": 0.05,
1421
+ "phone": "k_B"
1422
+ },
1423
+ {
1424
+ "duration": 0.13,
1425
+ "phone": "ae_I"
1426
+ },
1427
+ {
1428
+ "duration": 0.09,
1429
+ "phone": "s_I"
1430
+ },
1431
+ {
1432
+ "duration": 0.06,
1433
+ "phone": "t_I"
1434
+ },
1435
+ {
1436
+ "duration": 0.06,
1437
+ "phone": "ih_I"
1438
+ },
1439
+ {
1440
+ "duration": 0.09,
1441
+ "phone": "ng_E"
1442
+ }
1443
+ ],
1444
+ "start": 19.33,
1445
+ "startOffset": 320,
1446
+ "word": "casting"
1447
+ },
1448
+ {
1449
+ "alignedWord": "deep",
1450
+ "case": "success",
1451
+ "end": 20.09,
1452
+ "endOffset": 332,
1453
+ "phones": [
1454
+ {
1455
+ "duration": 0.08,
1456
+ "phone": "d_B"
1457
+ },
1458
+ {
1459
+ "duration": 0.11,
1460
+ "phone": "iy_I"
1461
+ },
1462
+ {
1463
+ "duration": 0.09,
1464
+ "phone": "p_E"
1465
+ }
1466
+ ],
1467
+ "start": 19.81,
1468
+ "startOffset": 328,
1469
+ "word": "deep"
1470
+ },
1471
+ {
1472
+ "alignedWord": "shadows",
1473
+ "case": "success",
1474
+ "end": 20.66,
1475
+ "endOffset": 340,
1476
+ "phones": [
1477
+ {
1478
+ "duration": 0.13,
1479
+ "phone": "sh_B"
1480
+ },
1481
+ {
1482
+ "duration": 0.09,
1483
+ "phone": "ae_I"
1484
+ },
1485
+ {
1486
+ "duration": 0.07,
1487
+ "phone": "d_I"
1488
+ },
1489
+ {
1490
+ "duration": 0.11,
1491
+ "phone": "ow_I"
1492
+ },
1493
+ {
1494
+ "duration": 0.17,
1495
+ "phone": "z_E"
1496
+ }
1497
+ ],
1498
+ "start": 20.09,
1499
+ "startOffset": 333,
1500
+ "word": "shadows"
1501
+ },
1502
+ {
1503
+ "alignedWord": "with",
1504
+ "case": "success",
1505
+ "end": 21.14,
1506
+ "endOffset": 346,
1507
+ "phones": [
1508
+ {
1509
+ "duration": 0.09,
1510
+ "phone": "w_B"
1511
+ },
1512
+ {
1513
+ "duration": 0.06,
1514
+ "phone": "ih_I"
1515
+ },
1516
+ {
1517
+ "duration": 0.08,
1518
+ "phone": "th_E"
1519
+ }
1520
+ ],
1521
+ "start": 20.91,
1522
+ "startOffset": 342,
1523
+ "word": "with"
1524
+ },
1525
+ {
1526
+ "alignedWord": "a",
1527
+ "case": "success",
1528
+ "end": 21.240000000000002,
1529
+ "endOffset": 348,
1530
+ "phones": [
1531
+ {
1532
+ "duration": 0.1,
1533
+ "phone": "ah_S"
1534
+ }
1535
+ ],
1536
+ "start": 21.14,
1537
+ "startOffset": 347,
1538
+ "word": "a"
1539
+ },
1540
+ {
1541
+ "alignedWord": "rugged",
1542
+ "case": "success",
1543
+ "end": 21.610000000000003,
1544
+ "endOffset": 355,
1545
+ "phones": [
1546
+ {
1547
+ "duration": 0.11,
1548
+ "phone": "r_B"
1549
+ },
1550
+ {
1551
+ "duration": 0.05,
1552
+ "phone": "ah_I"
1553
+ },
1554
+ {
1555
+ "duration": 0.07,
1556
+ "phone": "g_I"
1557
+ },
1558
+ {
1559
+ "duration": 0.06,
1560
+ "phone": "ah_I"
1561
+ },
1562
+ {
1563
+ "duration": 0.08,
1564
+ "phone": "d_E"
1565
+ }
1566
+ ],
1567
+ "start": 21.240000000000002,
1568
+ "startOffset": 349,
1569
+ "word": "rugged"
1570
+ },
1571
+ {
1572
+ "alignedWord": "ancient",
1573
+ "case": "success",
1574
+ "end": 22.09,
1575
+ "endOffset": 364,
1576
+ "phones": [
1577
+ {
1578
+ "duration": 0.16,
1579
+ "phone": "ey_B"
1580
+ },
1581
+ {
1582
+ "duration": 0.06,
1583
+ "phone": "n_I"
1584
+ },
1585
+ {
1586
+ "duration": 0.06,
1587
+ "phone": "sh_I"
1588
+ },
1589
+ {
1590
+ "duration": 0.06,
1591
+ "phone": "ah_I"
1592
+ },
1593
+ {
1594
+ "duration": 0.05,
1595
+ "phone": "n_I"
1596
+ },
1597
+ {
1598
+ "duration": 0.06,
1599
+ "phone": "t_E"
1600
+ }
1601
+ ],
1602
+ "start": 21.64,
1603
+ "startOffset": 357,
1604
+ "word": "ancient"
1605
+ },
1606
+ {
1607
+ "alignedWord": "arena",
1608
+ "case": "success",
1609
+ "end": 22.529999999999998,
1610
+ "endOffset": 370,
1611
+ "phones": [
1612
+ {
1613
+ "duration": 0.17,
1614
+ "phone": "er_B"
1615
+ },
1616
+ {
1617
+ "duration": 0.09,
1618
+ "phone": "iy_I"
1619
+ },
1620
+ {
1621
+ "duration": 0.07,
1622
+ "phone": "n_I"
1623
+ },
1624
+ {
1625
+ "duration": 0.07,
1626
+ "phone": "ah_E"
1627
+ }
1628
+ ],
1629
+ "start": 22.13,
1630
+ "startOffset": 365,
1631
+ "word": "arena"
1632
+ },
1633
+ {
1634
+ "alignedWord": "setting",
1635
+ "case": "success",
1636
+ "end": 23.01,
1637
+ "endOffset": 378,
1638
+ "phones": [
1639
+ {
1640
+ "duration": 0.11,
1641
+ "phone": "s_B"
1642
+ },
1643
+ {
1644
+ "duration": 0.12,
1645
+ "phone": "eh_I"
1646
+ },
1647
+ {
1648
+ "duration": 0.06,
1649
+ "phone": "t_I"
1650
+ },
1651
+ {
1652
+ "duration": 0.09,
1653
+ "phone": "ih_I"
1654
+ },
1655
+ {
1656
+ "duration": 0.1,
1657
+ "phone": "ng_E"
1658
+ }
1659
+ ],
1660
+ "start": 22.53,
1661
+ "startOffset": 371,
1662
+ "word": "setting"
1663
+ },
1664
+ {
1665
+ "alignedWord": "creating",
1666
+ "case": "success",
1667
+ "end": 23.499999999999996,
1668
+ "endOffset": 387,
1669
+ "phones": [
1670
+ {
1671
+ "duration": 0.08,
1672
+ "phone": "k_B"
1673
+ },
1674
+ {
1675
+ "duration": 0.07,
1676
+ "phone": "r_I"
1677
+ },
1678
+ {
1679
+ "duration": 0.08,
1680
+ "phone": "iy_I"
1681
+ },
1682
+ {
1683
+ "duration": 0.07,
1684
+ "phone": "ey_I"
1685
+ },
1686
+ {
1687
+ "duration": 0.06,
1688
+ "phone": "t_I"
1689
+ },
1690
+ {
1691
+ "duration": 0.07,
1692
+ "phone": "ih_I"
1693
+ },
1694
+ {
1695
+ "duration": 0.06,
1696
+ "phone": "ng_E"
1697
+ }
1698
+ ],
1699
+ "start": 23.009999999999998,
1700
+ "startOffset": 379,
1701
+ "word": "creating"
1702
+ },
1703
+ {
1704
+ "alignedWord": "an",
1705
+ "case": "success",
1706
+ "end": 23.67,
1707
+ "endOffset": 390,
1708
+ "phones": [
1709
+ {
1710
+ "duration": 0.05,
1711
+ "phone": "ah_B"
1712
+ },
1713
+ {
1714
+ "duration": 0.12,
1715
+ "phone": "n_E"
1716
+ }
1717
+ ],
1718
+ "start": 23.5,
1719
+ "startOffset": 388,
1720
+ "word": "an"
1721
+ },
1722
+ {
1723
+ "alignedWord": "epic",
1724
+ "case": "success",
1725
+ "end": 24.169999999999998,
1726
+ "endOffset": 395,
1727
+ "phones": [
1728
+ {
1729
+ "duration": 0.14,
1730
+ "phone": "eh_B"
1731
+ },
1732
+ {
1733
+ "duration": 0.08,
1734
+ "phone": "p_I"
1735
+ },
1736
+ {
1737
+ "duration": 0.09,
1738
+ "phone": "ih_I"
1739
+ },
1740
+ {
1741
+ "duration": 0.1,
1742
+ "phone": "k_E"
1743
+ }
1744
+ ],
1745
+ "start": 23.759999999999998,
1746
+ "startOffset": 391,
1747
+ "word": "epic"
1748
+ },
1749
+ {
1750
+ "alignedWord": "and",
1751
+ "case": "success",
1752
+ "end": 24.4,
1753
+ "endOffset": 399,
1754
+ "phones": [
1755
+ {
1756
+ "duration": 0.08,
1757
+ "phone": "ae_B"
1758
+ },
1759
+ {
1760
+ "duration": 0.13,
1761
+ "phone": "n_I"
1762
+ },
1763
+ {
1764
+ "duration": 0.01,
1765
+ "phone": "d_E"
1766
+ }
1767
+ ],
1768
+ "start": 24.18,
1769
+ "startOffset": 396,
1770
+ "word": "and"
1771
+ },
1772
+ {
1773
+ "alignedWord": "mythical",
1774
+ "case": "success",
1775
+ "end": 24.92,
1776
+ "endOffset": 408,
1777
+ "phones": [
1778
+ {
1779
+ "duration": 0.1,
1780
+ "phone": "m_B"
1781
+ },
1782
+ {
1783
+ "duration": 0.07,
1784
+ "phone": "ih_I"
1785
+ },
1786
+ {
1787
+ "duration": 0.08,
1788
+ "phone": "th_I"
1789
+ },
1790
+ {
1791
+ "duration": 0.07,
1792
+ "phone": "ih_I"
1793
+ },
1794
+ {
1795
+ "duration": 0.03,
1796
+ "phone": "k_I"
1797
+ },
1798
+ {
1799
+ "duration": 0.08,
1800
+ "phone": "ah_I"
1801
+ },
1802
+ {
1803
+ "duration": 0.08,
1804
+ "phone": "l_E"
1805
+ }
1806
+ ],
1807
+ "start": 24.41,
1808
+ "startOffset": 400,
1809
+ "word": "mythical"
1810
+ },
1811
+ {
1812
+ "alignedWord": "atmosphere",
1813
+ "case": "success",
1814
+ "end": 25.650000000000002,
1815
+ "endOffset": 419,
1816
+ "phones": [
1817
+ {
1818
+ "duration": 0.11,
1819
+ "phone": "ae_B"
1820
+ },
1821
+ {
1822
+ "duration": 0.07,
1823
+ "phone": "t_I"
1824
+ },
1825
+ {
1826
+ "duration": 0.07,
1827
+ "phone": "m_I"
1828
+ },
1829
+ {
1830
+ "duration": 0.06,
1831
+ "phone": "ah_I"
1832
+ },
1833
+ {
1834
+ "duration": 0.06,
1835
+ "phone": "s_I"
1836
+ },
1837
+ {
1838
+ "duration": 0.09,
1839
+ "phone": "f_I"
1840
+ },
1841
+ {
1842
+ "duration": 0.1,
1843
+ "phone": "ih_I"
1844
+ },
1845
+ {
1846
+ "duration": 0.15,
1847
+ "phone": "r_E"
1848
+ }
1849
+ ],
1850
+ "start": 24.94,
1851
+ "startOffset": 409,
1852
+ "word": "atmosphere"
1853
+ }
1854
+ ]
1855
+ }
src/youtube/MediaBackground.tsx CHANGED
@@ -13,7 +13,7 @@ import { useTranslate } from "../anims/useTranslate";
13
  export type MediaBackgroundProps = {
14
  children?: React.ReactNode;
15
  duration: number;
16
- direction?: 'left' | 'right';
17
  bgImagePaths?: { path: string }[];
18
  emphasisOnImage?: boolean;
19
  opacity?: number;
@@ -118,7 +118,7 @@ export const MediaBackground = (props: MediaBackgroundProps) => {
118
  flex: 1,
119
  justifyContent: 'center',//flex-end
120
  flexDirection: 'column',
121
- background: "linear-gradient(to bottom, #000021, #010024)",
122
  }}
123
  >
124
 
@@ -127,7 +127,7 @@ export const MediaBackground = (props: MediaBackgroundProps) => {
127
  (bgFile?.toLocaleLowerCase().endsWith("mp4") || mediaType == 'video' ? (
128
  <Video src={bgFile} muted={muted}
129
  loop
130
- style={{
131
  opacity: bgOpaCity,
132
  transform: `scale(${(curZoom)}) translateX(${bgTranslateX}px)`
133
  }}
@@ -137,7 +137,7 @@ export const MediaBackground = (props: MediaBackgroundProps) => {
137
  (
138
  <Img
139
 
140
- style={{
141
  opacity: bgOpaCity,
142
  transform: `scale(${(curZoom)}) translateX(${bgTranslateX}px)`
143
  }}
@@ -160,7 +160,7 @@ export const MediaBackground = (props: MediaBackgroundProps) => {
160
  justifyContent: emphasisOnImage ? 'flex-end' : 'center',//flex-end
161
  alignItems: 'center',
162
  flexDirection: 'column',
163
- transform: `translateX(${textBoxTranslateX}px) translateY(${(textBoxTranslateY)}px)`
164
 
165
  }} >
166
  {children}
 
13
  export type MediaBackgroundProps = {
14
  children?: React.ReactNode;
15
  duration: number;
16
+ direction?: 'left' | 'right' | 'none';
17
  bgImagePaths?: { path: string }[];
18
  emphasisOnImage?: boolean;
19
  opacity?: number;
 
118
  flex: 1,
119
  justifyContent: 'center',//flex-end
120
  flexDirection: 'column',
121
+ background: emphasisOnImage ? undefined : "linear-gradient(to bottom, #000021, #010024)",
122
  }}
123
  >
124
 
 
127
  (bgFile?.toLocaleLowerCase().endsWith("mp4") || mediaType == 'video' ? (
128
  <Video src={bgFile} muted={muted}
129
  loop
130
+ style={direction == 'none' ? undefined : {
131
  opacity: bgOpaCity,
132
  transform: `scale(${(curZoom)}) translateX(${bgTranslateX}px)`
133
  }}
 
137
  (
138
  <Img
139
 
140
+ style={direction == 'none' ? undefined : {
141
  opacity: bgOpaCity,
142
  transform: `scale(${(curZoom)}) translateX(${bgTranslateX}px)`
143
  }}
 
160
  justifyContent: emphasisOnImage ? 'flex-end' : 'center',//flex-end
161
  alignItems: 'center',
162
  flexDirection: 'column',
163
+ transform: direction == 'none' ? undefined : `translateX(${textBoxTranslateX}px) translateY(${(textBoxTranslateY)}px)`
164
 
165
  }} >
166
  {children}