Skip to main content

自动计算合成的时长

目前不支持从内容中推导合成的时长。其原因如下:

  • 并非所有合成都是有限的:
    这里有一个无法计算时长的组件示例:

    InfiniteComposition.tsx
    tsx
    import React from 'react';
    import {useCurrentFrame} from 'remotion';
     
    const InfiniteComposition: React.FC = () => {
    const frame = useCurrentFrame();
    return <div>{frame}</div>;
    };
    InfiniteComposition.tsx
    tsx
    import React from 'react';
    import {useCurrentFrame} from 'remotion';
     
    const InfiniteComposition: React.FC = () => {
    const frame = useCurrentFrame();
    return <div>{frame}</div>;
    };
  • <Series><Sequence> 也可以是动态的
    虽然许多合成使用 <Sequence><Series>,在许多情况下可以从中推导出时长,但这也不是一个绝对可靠的解决方案。

    完全可以随时间更改 <Sequence>fromdurationInFrames 属性的值:

    ChangingDuration.tsx
    tsx
    import {Sequence, useCurrentFrame} from 'remotion';
     
    const ChangingDuration: React.FC = () => {
    const frame = useCurrentFrame();
     
    return (
    // This is fine!
    <Sequence from={frame} durationInFrames={30}>
    <div>Hello World!</div>
    </Sequence>
    );
    };
    ChangingDuration.tsx
    tsx
    import {Sequence, useCurrentFrame} from 'remotion';
     
    const ChangingDuration: React.FC = () => {
    const frame = useCurrentFrame();
     
    return (
    // This is fine!
    <Sequence from={frame} durationInFrames={30}>
    <div>Hello World!</div>
    </Sequence>
    );
    };

    这的一个实际用例是随时间改变视频的速度

  • Remotion 仅了解当前帧:
    Remotion 不像我们开发者那样静态地看待组件,而是仅在特定时间点渲染它。要可靠地确定组件何时停止渲染标记,Remotion 必须循环遍历所有帧,直到标记停止,这可能是一个昂贵的操作。

总之,React 的动态性不允许简单地可靠地推导出时长的解决方案。我们预见,如果使用启发式方法来确定时长并且出错,将导致难以调试的情况。

我们建议使用此处描述的动态时长方法来计算时长。