import React from 'react'; import { AbsoluteFill, Img, interpolate, staticFile, useCurrentFrame, useVideoConfig, } from 'remotion'; import { VerticalTicker, TickerColumn } from './VerticalTicker'; const BG = '#101014'; const shot = (file: string) => (
); // 3 列差速反向(配方卡参数:loop 12/9/14s,中列反向) export const buildColumns = (loops: [number, number, number]): TickerColumn[] => [ { items: ['card1.png', 'card2.png', 'card3.png', 'card10.png'].map(shot), durationInSeconds: loops[0], direction: -1, }, { items: ['card4.png', 'card5.png', 'card6.png', 'projects-empty.png'].map(shot), durationInSeconds: loops[1], direction: 1, }, { items: ['card7.png', 'card8.png', 'card9.png', 'float-search.png'].map(shot), durationInSeconds: loops[2], direction: -1, }, ]; export const PageWaterfallWall: React.FC = () => { const frame = useCurrentFrame(); const { durationInFrames } = useVideoConfig(); // 镜头缓推寄生在外层,墙自身循环、镜头单向 const push = interpolate(frame, [0, durationInFrames], [1, 1.06]); return ( ); }; // 接缝自检用:短 loop(3s=90f)、无镜头推,f0 与 f90 应逐像素一致 export const SeamTest: React.FC = () => ( );