Mbonea's picture
Faster renders?
b2fa231
raw
history blame
No virus
1.77 kB
import {AbsoluteFill} from 'remotion';
import React, {useMemo} from 'react';
import {
staticFile,
useVideoConfig,
Img,
Easing,
useCurrentFrame,
interpolate,
} from 'remotion';
import imageSequences from './Assets/ImageSequences.json';
import {TransitionSeries} from '@remotion/transitions';
const ImageStream = React.memo(() => {
const {fps} = useVideoConfig();
const imageComponents = useMemo(() => {
return imageSequences.map((entry, index) => (
<TransitionSeries.Sequence
key={index}
durationInFrames={fps * (entry.end - entry.start)}
>
<Images key={index} entry={entry} />
</TransitionSeries.Sequence>
));
}, [fps]);
return (
<AbsoluteFill
style={{
top: '50%',
left: '50%',
transform: 'translate(-50%, -50%)',
color: 'white',
position: 'absolute',
width: '100%',
height: '100%',
zIndex: 0,
objectFit: 'cover',
}}
>
<TransitionSeries>{imageComponents}</TransitionSeries>
</AbsoluteFill>
);
});
const Images = React.memo(({entry}) => {
const frame = useCurrentFrame();
const {fps} = useVideoConfig();
const duration = useMemo(() => fps * 2.5, [fps]);
const ImgScale = useMemo(
() =>
interpolate(frame, [0, duration], [1, 1.2], {
easing: Easing.bezier(0.65, 0, 0.35, 1),
extrapolateRight: 'clamp',
extrapolateLeft: 'clamp',
}),
[frame, duration]
);
return (
<AbsoluteFill
style={{
backgroundColor: 'black',
}}
>
<Img
id="imagex"
style={{
transform: `translate(-50%, -50%) scale(${ImgScale})`,
position: 'absolute',
top: '50%',
left: '50%',
width: 1080,
height: 1920,
objectFit: 'cover',
}}
src={staticFile(entry.name)}
/>
</AbsoluteFill>
);
});
export default ImageStream;