自动计算合成的时长
目前不支持从内容中推导合成的时长。其原因如下:
-
并非所有合成都是有限的:
这里有一个无法计算时长的组件示例:InfiniteComposition.tsxtsximportReact from 'react';import {useCurrentFrame } from 'remotion';constInfiniteComposition :React .FC = () => {constframe =useCurrentFrame ();return <div >{frame }</div >;};InfiniteComposition.tsxtsximportReact from 'react';import {useCurrentFrame } from 'remotion';constInfiniteComposition :React .FC = () => {constframe =useCurrentFrame ();return <div >{frame }</div >;}; -
<Series>
和<Sequence>
也可以是动态的
虽然许多合成使用<Sequence>
或<Series>
,在许多情况下可以从中推导出时长,但这也不是一个绝对可靠的解决方案。完全可以随时间更改
<Sequence>
的from
或durationInFrames
属性的值:ChangingDuration.tsxtsximport {Sequence ,useCurrentFrame } from 'remotion';constChangingDuration :React .FC = () => {constframe =useCurrentFrame ();return (// This is fine!<Sequence from ={frame }durationInFrames ={30}><div >Hello World!</div ></Sequence >);};ChangingDuration.tsxtsximport {Sequence ,useCurrentFrame } from 'remotion';constChangingDuration :React .FC = () => {constframe =useCurrentFrame ();return (// This is fine!<Sequence from ={frame }durationInFrames ={30}><div >Hello World!</div ></Sequence >);};这的一个实际用例是随时间改变视频的速度。
-
Remotion 仅了解当前帧:
Remotion 不像我们开发者那样静态地看待组件,而是仅在特定时间点渲染它。要可靠地确定组件何时停止渲染标记,Remotion 必须循环遍历所有帧,直到标记停止,这可能是一个昂贵的操作。
总之,React 的动态性不允许简单地可靠地推导出时长的解决方案。我们预见,如果使用启发式方法来确定时长并且出错,将导致难以调试的情况。
我们建议使用此处描述的动态时长方法来计算时长。