File size: 1,566 Bytes
57155b1 d86c84c 7380380 d86c84c 520b716 a78d9ef d86c84c 2d9a860 14a8e84 d86c84c 57155b1 adc8df4 57155b1 2d9a860 57155b1 c7979cb 57155b1 14a8e84 57155b1 2d9a860 57155b1 d86c84c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
import {
AbsoluteFill,
Series,
interpolate,
spring,
useCurrentFrame,
} from 'remotion';
import React from 'react';
import {staticFile, useVideoConfig, Img, Easing} from 'remotion';
import imageSequences from './Assets/ImageSequences.json';
import {TransitionSeries, linearTiming} from '@remotion/transitions';
export default function ImageStream() {
const {fps} = useVideoConfig();
const frame = useCurrentFrame();
return (
<AbsoluteFill>
<TransitionSeries
style={{
top: '50%',
left: '50%',
transform: 'translate(-50%, -50%)',
color: 'white',
position: 'absolute',
width: '100%',
height: '100%',
zIndex: 0,
objectFit: 'cover',
}}
>
{imageSequences.map((entry, index) => {
const durationInFrames = (entry.end - entry.start) * fps;
const zoom = interpolate(
frame,
[
fps * entry.start,
fps * entry.start + durationInFrames / 2,
fps * entry.end,
],
[1, 1.5, 1.3],
{
// easing: Easing.bezier(0.8, 0.22, 0.96, 0.65),
extrapolateLeft: 'clamp',
extrapolateRight: 'clamp',
}
);
return (
<TransitionSeries.Sequence
key={index}
from={fps * entry.start}
durationInFrames={fps * (entry.end - entry.start)}
>
<Img
style={{
transform: `scale(${zoom})`,
// transition: 'all 5s ease',
}}
src={staticFile(entry.name)}
/>
</TransitionSeries.Sequence>
);
})}
</TransitionSeries>
</AbsoluteFill>
);
}
|