remote-rdr / src /youtube /SequentialScene.tsx
shiveshnavin's picture
Fixe
519e0f2
import { Composition, delayRender, continueRender, useVideoConfig, staticFile, Sequence, Series, Audio, AbsoluteFill, Video } from 'remotion'
import { getVideoMetadata } from "@remotion/media-utils";
import React, { useEffect, useState } from 'react'
import { SingleTextWithBG } from './SingleTextWithBG';
import { SectionTextWithBG } from './SectionTextWithBG';
import Transitions from '../../public/assets/transitions.json'
import { MediaBackground } from './MediaBackground';
import { loadFont as PermanentMarker } from "@remotion/google-fonts/PermanentMarker";
export type SequentialSceneData = {
text: string,
textColor?: string,
bgImagePath?: string,
duration: number,
offset?: number,
audioPath?: string,
direction?: string
}
function getTransitionScene(scriptItem) {
if (!scriptItem || scriptItem.title?.length == 0) {
return <></>
}
const { fontFamily } = PermanentMarker()
const { fps, width, height } = useVideoConfig();
const transitionFile = scriptItem?.transition_file || Transitions[0].file
const transitionDuration = (scriptItem?.transition_duration_sec || Transitions[0].durationSec) * fps
const title = scriptItem.title
return (
<Series.Sequence
durationInFrames={transitionDuration * 0.8} >
<MediaBackground
emphasisOnImage={true}
direction={scriptItem.direction || 'left'}
duration={transitionDuration}
bgImagePaths={[{
path: transitionFile,
duration: transitionDuration
}]}
opacity={0.7}
muted={false}
>
<div className='flex items-center justify-center h-screen' style={{ padding: 10, height: '100%', width: '100%' }} >
<p className={`flex items-center justify-center h-screen text-white text-9xl text-center p-8 font-bold rounded-lg text-black-stroke-large text-red-fill`} style={{
fontFamily: fontFamily
}}>{title}</p>
</div>
</MediaBackground>
</Series.Sequence>
)
}
function getScene(data) {
if (!data) {
return <></>
}
return (
<Series.Sequence
durationInFrames={data?.duration || 30} >
<SectionTextWithBG
{...data}
/>
</Series.Sequence>
)
}
export const SequentialScene: React.FC = (
props
) => {
const contents = props.contents
const bgMusic = props.bgMusic
const bgMusicVolume = props.bgMusicVolume
return (
<div>
{bgMusic &&
<AbsoluteFill>
<Audio allowAmplificationDuringRender loop volume={bgMusicVolume ?? 0.05} src={staticFile(bgMusic)} />
</AbsoluteFill>
}
<Series>
{
props?.intro?.file && (
<Series.Sequence durationInFrames={props?.intro.durationInFrames}>
<Video src={staticFile(props?.intro.file)} />
</Series.Sequence>
)
}
{getScene(contents[0])}
{getTransitionScene(contents[1])}
{getScene(contents[1])}
{getTransitionScene(contents[2])}
{getScene(contents[2])}
{getTransitionScene(contents[3])}
{getScene(contents[3])}
{getTransitionScene(contents[4])}
{getScene(contents[4])}
{getTransitionScene(contents[5])}
{getScene(contents[5])}
{getTransitionScene(contents[6])}
{getScene(contents[6])}
{getTransitionScene(contents[7])}
{getScene(contents[7])}
{getTransitionScene(contents[8])}
{getScene(contents[8])}
{getTransitionScene(contents[9])}
{getScene(contents[9])}
{getTransitionScene(contents[10])}
{getScene(contents[10])}
{getTransitionScene(contents[11])}
{getScene(contents[11])}
{getTransitionScene(contents[12])}
{getScene(contents[12])}
{getTransitionScene(contents[13])}
{getScene(contents[13])}
{getTransitionScene(contents[14])}
{getScene(contents[14])}
{getTransitionScene(contents[15])}
{getScene(contents[15])}
{getTransitionScene(contents[16])}
{getScene(contents[16])}
{getTransitionScene(contents[17])}
{getScene(contents[17])}
{getTransitionScene(contents[18])}
{getScene(contents[18])}
{getTransitionScene(contents[19])}
{getScene(contents[19])}
{getTransitionScene(contents[20])}
{getScene(contents[20])}
{getTransitionScene(contents[21])}
{getScene(contents[21])}
{getTransitionScene(contents[22])}
{getScene(contents[22])}
{getTransitionScene(contents[23])}
{getScene(contents[23])}
{getTransitionScene(contents[24])}
{getScene(contents[24])}
{getTransitionScene(contents[25])}
{getScene(contents[25])}
{getTransitionScene(contents[26])}
{getScene(contents[26])}
{getTransitionScene(contents[27])}
{getScene(contents[27])}
{getTransitionScene(contents[28])}
{getScene(contents[28])}
{getTransitionScene(contents[29])}
{getScene(contents[29])}
{getTransitionScene(contents[30])}
{getScene(contents[30])}
{getTransitionScene(contents[31])}
{getScene(contents[31])}
{getTransitionScene(contents[32])}
{getScene(contents[32])}
{getTransitionScene(contents[33])}
{getScene(contents[33])}
{getTransitionScene(contents[34])}
{getScene(contents[34])}
{getTransitionScene(contents[35])}
{getScene(contents[35])}
{getTransitionScene(contents[36])}
{getScene(contents[36])}
{getTransitionScene(contents[37])}
{getScene(contents[37])}
{getTransitionScene(contents[38])}
{getScene(contents[38])}
{getTransitionScene(contents[39])}
{getScene(contents[39])}
{getTransitionScene(contents[40])}
{getScene(contents[40])}
{getTransitionScene(contents[41])}
{getScene(contents[41])}
{getTransitionScene(contents[42])}
{getScene(contents[42])}
{getTransitionScene(contents[43])}
{getScene(contents[43])}
{getTransitionScene(contents[44])}
{getScene(contents[44])}
{getTransitionScene(contents[45])}
{getScene(contents[45])}
{getTransitionScene(contents[46])}
{getScene(contents[46])}
{getTransitionScene(contents[47])}
{getScene(contents[47])}
{getTransitionScene(contents[48])}
{getScene(contents[48])}
{getTransitionScene(contents[49])}
{getScene(contents[49])}
{getTransitionScene(contents[50])}
{getScene(contents[50])}
{getTransitionScene(contents[51])}
{getScene(contents[51])}
{getTransitionScene(contents[52])}
{getScene(contents[52])}
{getTransitionScene(contents[53])}
{getScene(contents[53])}
{getTransitionScene(contents[54])}
{getScene(contents[54])}
{getTransitionScene(contents[55])}
{getScene(contents[55])}
{getTransitionScene(contents[56])}
{getScene(contents[56])}
{getTransitionScene(contents[57])}
{getScene(contents[57])}
{getTransitionScene(contents[58])}
{getScene(contents[58])}
{getTransitionScene(contents[59])}
{getScene(contents[59])}
{getTransitionScene(contents[60])}
{getScene(contents[60])}
{getTransitionScene(contents[61])}
{getScene(contents[61])}
{getTransitionScene(contents[62])}
{getScene(contents[62])}
{getTransitionScene(contents[63])}
{getScene(contents[63])}
{getTransitionScene(contents[64])}
{getScene(contents[64])}
{getTransitionScene(contents[65])}
{getScene(contents[65])}
{getTransitionScene(contents[66])}
{getScene(contents[66])}
{getTransitionScene(contents[67])}
{getScene(contents[67])}
{getTransitionScene(contents[68])}
{getScene(contents[68])}
{getTransitionScene(contents[69])}
{getScene(contents[69])}
{getTransitionScene(contents[70])}
{getScene(contents[70])}
{getTransitionScene(contents[71])}
{getScene(contents[71])}
{getTransitionScene(contents[72])}
{getScene(contents[72])}
{getTransitionScene(contents[73])}
{getScene(contents[73])}
{getTransitionScene(contents[74])}
{getScene(contents[74])}
{getTransitionScene(contents[75])}
{getScene(contents[75])}
{getTransitionScene(contents[76])}
{getScene(contents[76])}
{getTransitionScene(contents[77])}
{getScene(contents[77])}
{getTransitionScene(contents[78])}
{getScene(contents[78])}
{getTransitionScene(contents[79])}
{getScene(contents[79])}
{getTransitionScene(contents[80])}
{getScene(contents[80])}
{getTransitionScene(contents[81])}
{getScene(contents[81])}
{getTransitionScene(contents[82])}
{getScene(contents[82])}
{getTransitionScene(contents[83])}
{getScene(contents[83])}
{getTransitionScene(contents[84])}
{getScene(contents[84])}
{getTransitionScene(contents[85])}
{getScene(contents[85])}
{getTransitionScene(contents[86])}
{getScene(contents[86])}
{getTransitionScene(contents[87])}
{getScene(contents[87])}
{getTransitionScene(contents[88])}
{getScene(contents[88])}
{getTransitionScene(contents[89])}
{getScene(contents[89])}
{getTransitionScene(contents[90])}
{getScene(contents[90])}
{getTransitionScene(contents[91])}
{getScene(contents[91])}
{getTransitionScene(contents[92])}
{getScene(contents[92])}
{getTransitionScene(contents[93])}
{getScene(contents[93])}
{getTransitionScene(contents[94])}
{getScene(contents[94])}
{getTransitionScene(contents[95])}
{getScene(contents[95])}
{getTransitionScene(contents[96])}
{getScene(contents[96])}
{getTransitionScene(contents[97])}
{getScene(contents[97])}
{getTransitionScene(contents[98])}
{getScene(contents[98])}
{getTransitionScene(contents[99])}
{getScene(contents[99])}
{getTransitionScene(contents[100])}
{getScene(contents[100])}
{getTransitionScene(contents[101])}
{getScene(contents[101])}
{getTransitionScene(contents[102])}
{getScene(contents[102])}
{
props?.outro?.file && (
<Series.Sequence durationInFrames={props?.outro.durationInFrames}>
<Video src={staticFile(props?.outro.file)} />
</Series.Sequence>
)
}
</Series>
</div>
)
}