Spaces:
Running
Running
Commit ·
b2d9ad7
1
Parent(s): b34f990
Committed with Git-Upload
Browse files- src/Compositions.tsx +1 -1
- src/RenderUtils.ts +3 -1
- src/anims/VideoSplash.tsx +2 -1
- src/ig-reel/IGSimpleScene.tsx +32 -19
src/Compositions.tsx
CHANGED
|
@@ -59,7 +59,7 @@ export const Compositions: React.FC = () => {
|
|
| 59 |
Script.transcript
|
| 60 |
.sort((t, u) => t.index - u.index)
|
| 61 |
// .filter(item => (item.audioCaptionFile != undefined))
|
| 62 |
-
// .slice(0,
|
| 63 |
.map((section, idx, array) => {
|
| 64 |
section.index = section.index || idx;
|
| 65 |
var { text, duration: durationMilis, offset, mediaAbsPaths, mediaAbsPaths, audioFullPath, title, pointers } = section
|
|
|
|
| 59 |
Script.transcript
|
| 60 |
.sort((t, u) => t.index - u.index)
|
| 61 |
// .filter(item => (item.audioCaptionFile != undefined))
|
| 62 |
+
// .slice(0, 5)
|
| 63 |
.map((section, idx, array) => {
|
| 64 |
section.index = section.index || idx;
|
| 65 |
var { text, duration: durationMilis, offset, mediaAbsPaths, mediaAbsPaths, audioFullPath, title, pointers } = section
|
src/RenderUtils.ts
CHANGED
|
@@ -71,7 +71,9 @@ export class RenderUtils {
|
|
| 71 |
|
| 72 |
return finalGroups?.map(group => {
|
| 73 |
return {
|
| 74 |
-
words: group
|
|
|
|
|
|
|
| 75 |
}
|
| 76 |
});
|
| 77 |
}
|
|
|
|
| 71 |
|
| 72 |
return finalGroups?.map(group => {
|
| 73 |
return {
|
| 74 |
+
words: group,
|
| 75 |
+
start: undefined,
|
| 76 |
+
end: undefined
|
| 77 |
}
|
| 78 |
});
|
| 79 |
}
|
src/anims/VideoSplash.tsx
CHANGED
|
@@ -38,5 +38,6 @@ export const VideoSplash:
|
|
| 38 |
|
| 39 |
export const VideoSplashSchema = z.object({
|
| 40 |
file: z.string(),
|
| 41 |
-
durationInFrames: z.number()
|
|
|
|
| 42 |
});
|
|
|
|
| 38 |
|
| 39 |
export const VideoSplashSchema = z.object({
|
| 40 |
file: z.string(),
|
| 41 |
+
durationInFrames: z.number().optional(),
|
| 42 |
+
style: z.any()
|
| 43 |
});
|
src/ig-reel/IGSimpleScene.tsx
CHANGED
|
@@ -28,7 +28,7 @@ export type DisplayMedia = SectionMedia &
|
|
| 28 |
|
| 29 |
|
| 30 |
export const GenerateWordGroupRanges = function (audioCaptionFile: string, setSubtitles: Function, setGroups: Function) {
|
| 31 |
-
const subFile = staticFile(RenderUtils.getFileName(audioCaptionFile))
|
| 32 |
axios.get(subFile).then((response) => {
|
| 33 |
let subtitles = response?.data
|
| 34 |
if (subtitles?.default) {
|
|
@@ -139,10 +139,8 @@ export const IGSimpleScene: React.FC<any> = (props: {
|
|
| 139 |
const isLastScene = script.transcript[script.transcript?.length - 1]?.index == itemIdx
|
| 140 |
const nextScene = script.transcript.find(i => i.index == itemIdx + 1);
|
| 141 |
let nextSceneMedia0 = nextScene?.mediaAbsPaths as any as DisplayMedia;
|
| 142 |
-
|
| 143 |
-
|
| 144 |
-
"isLastScene", isLastScene,
|
| 145 |
-
'item?.mediaAbsPaths?.[0]', item?.mediaAbsPaths?.[0])
|
| 146 |
if (nextSceneMedia0) {
|
| 147 |
nextSceneMedia0 = calculateDisplayMedia(nextScene as Transcript, durationInSeconds, frame, fps)
|
| 148 |
}
|
|
@@ -166,14 +164,14 @@ export const IGSimpleScene: React.FC<any> = (props: {
|
|
| 166 |
|
| 167 |
|
| 168 |
let curSecond: Number = frame / fps
|
| 169 |
-
let word = RenderUtils.findCurrentWord(curSecond, subtitles)
|
| 170 |
let group: Group = RenderUtils.findCurrentGroupByTime(curSecond, groups)
|
| 171 |
|
| 172 |
let currentDisplayMedia: DisplayMedia = calculateDisplayMedia(item, durationInSeconds, frame, fps)
|
| 173 |
|
| 174 |
|
| 175 |
|
| 176 |
-
let chunks: React.ReactNode[] = (item?.mediaAbsPaths?.map((displayMedia: DisplayMedia, i) => {
|
| 177 |
let chunk = []
|
| 178 |
let easeInOutExp = Easing.inOut(Easing.bezier(0.8, 0.22, 0.96, 0.65));
|
| 179 |
easeInOutExp = Easing.ease
|
|
@@ -187,13 +185,28 @@ export const IGSimpleScene: React.FC<any> = (props: {
|
|
| 187 |
</TransitionSeries.Sequence>
|
| 188 |
))
|
| 189 |
if (i < item?.mediaAbsPaths.length - 1 || true) {
|
| 190 |
-
|
| 191 |
-
|
| 192 |
-
|
| 193 |
-
|
| 194 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 195 |
const easeInOutExp = Easing.inOut(Easing.bezier(0.8, 0.22, 0.96, 0.65));
|
| 196 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 197 |
chunk.push((
|
| 198 |
<TransitionSeries.Transition
|
| 199 |
durationInFrames={60}
|
|
@@ -216,7 +229,7 @@ export const IGSimpleScene: React.FC<any> = (props: {
|
|
| 216 |
width: '100%',
|
| 217 |
height: '100%',
|
| 218 |
}} className='relative'>
|
| 219 |
-
<Audio volume={1} loop src={staticFile(speechPath)} />
|
| 220 |
{
|
| 221 |
nextSceneMedia0 && (
|
| 222 |
<TransitionSeries.Sequence durationInFrames={nextSceneMedia0.durationFrames || itemDurationInFrames}>
|
|
@@ -234,8 +247,8 @@ export const IGSimpleScene: React.FC<any> = (props: {
|
|
| 234 |
{
|
| 235 |
(item.transition_type?.includes("graphical")) && !isLastScene &&
|
| 236 |
currentDisplayMedia?.idx > -1 && (
|
| 237 |
-
item?.mediaAbsPaths?.map((displayMedia: DisplayMedia
|
| 238 |
-
let transitionsByMood = Transitions.filter(t => t.mood?.indexOf("happy") > -1)
|
| 239 |
let transition = RenderUtils.randomElement(transitionsByMood, `x-${displayMedia.idx * displayMedia.durationFrames}`)
|
| 240 |
// transition = transitionsByMood[5]
|
| 241 |
|
|
@@ -243,8 +256,9 @@ export const IGSimpleScene: React.FC<any> = (props: {
|
|
| 243 |
<Sequence from={displayMedia?.endFrame - transition.durationSec * fps / 2} durationInFrames={transition.durationSec * fps}>
|
| 244 |
<VideoSplash file={transition.file} style={{
|
| 245 |
position: 'relative',
|
| 246 |
-
height: '100%',
|
| 247 |
-
|
|
|
|
| 248 |
</Sequence>
|
| 249 |
)
|
| 250 |
})
|
|
@@ -275,7 +289,6 @@ export const IGSimpleScene: React.FC<any> = (props: {
|
|
| 275 |
<div style={{
|
| 276 |
display: 'flex',
|
| 277 |
flexDirection: 'row',
|
| 278 |
-
height: '100%',
|
| 279 |
justifyContent: 'center',
|
| 280 |
alignContent: 'center',
|
| 281 |
paddingTop: '20%',
|
|
|
|
| 28 |
|
| 29 |
|
| 30 |
export const GenerateWordGroupRanges = function (audioCaptionFile: string, setSubtitles: Function, setGroups: Function) {
|
| 31 |
+
const subFile = staticFile(RenderUtils.getFileName(audioCaptionFile)!!)
|
| 32 |
axios.get(subFile).then((response) => {
|
| 33 |
let subtitles = response?.data
|
| 34 |
if (subtitles?.default) {
|
|
|
|
| 139 |
const isLastScene = script.transcript[script.transcript?.length - 1]?.index == itemIdx
|
| 140 |
const nextScene = script.transcript.find(i => i.index == itemIdx + 1);
|
| 141 |
let nextSceneMedia0 = nextScene?.mediaAbsPaths as any as DisplayMedia;
|
| 142 |
+
|
| 143 |
+
|
|
|
|
|
|
|
| 144 |
if (nextSceneMedia0) {
|
| 145 |
nextSceneMedia0 = calculateDisplayMedia(nextScene as Transcript, durationInSeconds, frame, fps)
|
| 146 |
}
|
|
|
|
| 164 |
|
| 165 |
|
| 166 |
let curSecond: Number = frame / fps
|
| 167 |
+
let word = RenderUtils.findCurrentWord(curSecond, subtitles!!)
|
| 168 |
let group: Group = RenderUtils.findCurrentGroupByTime(curSecond, groups)
|
| 169 |
|
| 170 |
let currentDisplayMedia: DisplayMedia = calculateDisplayMedia(item, durationInSeconds, frame, fps)
|
| 171 |
|
| 172 |
|
| 173 |
|
| 174 |
+
let chunks: React.ReactNode[] = ((item?.mediaAbsPaths as any[])?.map((displayMedia: DisplayMedia, i) => {
|
| 175 |
let chunk = []
|
| 176 |
let easeInOutExp = Easing.inOut(Easing.bezier(0.8, 0.22, 0.96, 0.65));
|
| 177 |
easeInOutExp = Easing.ease
|
|
|
|
| 185 |
</TransitionSeries.Sequence>
|
| 186 |
))
|
| 187 |
if (i < item?.mediaAbsPaths.length - 1 || true) {
|
| 188 |
+
|
| 189 |
+
let animsObj = {
|
| 190 |
+
// CircularWipe, Slide,LinearWipe, // Not work
|
| 191 |
+
SlidingDoors: SlidingDoors,
|
| 192 |
+
Pan: Pan,
|
| 193 |
+
Dissolve: Dissolve
|
| 194 |
+
}
|
| 195 |
+
let anims = Object.values(animsObj);//.fill(SlidingDoors);
|
| 196 |
+
let seed = itemIdx + i * displayMedia.idx
|
| 197 |
+
let Anim = RenderUtils.randomElement(anims, `x-${seed}`)
|
| 198 |
const easeInOutExp = Easing.inOut(Easing.bezier(0.8, 0.22, 0.96, 0.65));
|
| 199 |
+
|
| 200 |
+
let transitionList = item.transition_type?.split(",");
|
| 201 |
+
let animFromTranscript = Object.keys(animsObj).find(n => {
|
| 202 |
+
return transitionList.includes(n)
|
| 203 |
+
})
|
| 204 |
+
if (animFromTranscript) {
|
| 205 |
+
//@ts-ignore
|
| 206 |
+
Anim = animsObj[animFromTranscript]
|
| 207 |
+
}
|
| 208 |
+
|
| 209 |
+
if (!isLastScene && (item.transition_type?.includes('geometrial') || animFromTranscript || item.transition_type == undefined)) {
|
| 210 |
chunk.push((
|
| 211 |
<TransitionSeries.Transition
|
| 212 |
durationInFrames={60}
|
|
|
|
| 229 |
width: '100%',
|
| 230 |
height: '100%',
|
| 231 |
}} className='relative'>
|
| 232 |
+
<Audio volume={1} loop src={staticFile(speechPath as string)} />
|
| 233 |
{
|
| 234 |
nextSceneMedia0 && (
|
| 235 |
<TransitionSeries.Sequence durationInFrames={nextSceneMedia0.durationFrames || itemDurationInFrames}>
|
|
|
|
| 247 |
{
|
| 248 |
(item.transition_type?.includes("graphical")) && !isLastScene &&
|
| 249 |
currentDisplayMedia?.idx > -1 && (
|
| 250 |
+
(item?.mediaAbsPaths as any)?.map((displayMedia: DisplayMedia) => {
|
| 251 |
+
let transitionsByMood = Transitions.filter(t => (t?.mood?.indexOf("happy") || -1) > -1)
|
| 252 |
let transition = RenderUtils.randomElement(transitionsByMood, `x-${displayMedia.idx * displayMedia.durationFrames}`)
|
| 253 |
// transition = transitionsByMood[5]
|
| 254 |
|
|
|
|
| 256 |
<Sequence from={displayMedia?.endFrame - transition.durationSec * fps / 2} durationInFrames={transition.durationSec * fps}>
|
| 257 |
<VideoSplash file={transition.file} style={{
|
| 258 |
position: 'relative',
|
| 259 |
+
height: '100%',
|
| 260 |
+
width: '100%'
|
| 261 |
+
} as any} />
|
| 262 |
</Sequence>
|
| 263 |
)
|
| 264 |
})
|
|
|
|
| 289 |
<div style={{
|
| 290 |
display: 'flex',
|
| 291 |
flexDirection: 'row',
|
|
|
|
| 292 |
justifyContent: 'center',
|
| 293 |
alignContent: 'center',
|
| 294 |
paddingTop: '20%',
|