useCurrentFrame()
With this hook, you can retrieve the current frame of the video. Frames are 0-indexed, meaning the first frame is 0
, the last frame is the duration of the composition in frames minus one. To learn more about how Remotion works with time, read the page about the fundamentals.
If the component you are writing is wrapped in a <Sequence>
, useCurrentFrame
will return the frame relative to when the Sequence starts.
Say the timeline marker is positioned at frame 25. In the example below, useCurrentFrame()
will return 25
, except within the Subtitle component, where it will return 15
because it is within a sequence that starts at frame 10.
tsx
import {Sequence ,useCurrentFrame } from "remotion";constTitle = () => {constframe =useCurrentFrame (); // 25return <div >{frame }</div >;};constSubtitle = () => {constframe =useCurrentFrame (); // 15return <div >{frame }</div >;};constMyVideo = () => {constframe =useCurrentFrame (); // 25return (<div ><Title /><Sequence from ={10}><Subtitle /></Sequence ></div >);};
tsx
import {Sequence ,useCurrentFrame } from "remotion";constTitle = () => {constframe =useCurrentFrame (); // 25return <div >{frame }</div >;};constSubtitle = () => {constframe =useCurrentFrame (); // 15return <div >{frame }</div >;};constMyVideo = () => {constframe =useCurrentFrame (); // 25return (<div ><Title /><Sequence from ={10}><Subtitle /></Sequence ></div >);};
Using <Sequence />
's, you can compose multiple elements together and time-shift them independently from each other without changing their animation.
Getting the absolute frame of the timeline
In rare circumstances, you want access to the absolute frame of the timeline inside a sequence, use useCurrentFrame()
at the top-level component and then pass it down as a prop to the children of the <Sequence />
.
tsx
constSubtitle :React .FC <{absoluteFrame : number }> = ({absoluteFrame }) => {console .log (useCurrentFrame ()); // 15console .log (absoluteFrame ); // 25return null;};constMyVideo = () => {constframe =useCurrentFrame (); // 25return (<Sequence from ={10}><Subtitle absoluteFrame ={frame } /></Sequence >);};
tsx
constSubtitle :React .FC <{absoluteFrame : number }> = ({absoluteFrame }) => {console .log (useCurrentFrame ()); // 15console .log (absoluteFrame ); // 25return null;};constMyVideo = () => {constframe =useCurrentFrame (); // 25return (<Sequence from ={10}><Subtitle absoluteFrame ={frame } /></Sequence >);};