Remotion LabRemotion Lab
返回模板庫

底片漏光轉場

模擬底片曝光時的橘紅色漏光效果——轉場中央時刻,橘紅色光暈從中心膨脹爆開,遮蔽場景切換的瞬間,再迅速收斂退去,露出場景 B。

轉場漏光電影感
提示詞(可直接修改內容)
import React from "react";
import { AbsoluteFill, interpolate, useCurrentFrame } from "remotion";

const SceneA: React.FC = () => (
  <AbsoluteFill
    style={{
      background: "linear-gradient(135deg, #1e3a5f 0%, #0f172a 100%)",
      justifyContent: "center",
      alignItems: "center",
    }}
  >
    <div
      style={{
        fontSize: 80,
        fontWeight: 700,
        color: "#ffffff",
        fontFamily: "sans-serif",
      }}
    >
      Scene A
    </div>
  </AbsoluteFill>
);

const SceneB: React.FC = () => (
  <AbsoluteFill
    style={{
      background: "linear-gradient(135deg, #1a0533 0%, #0f0a1a 100%)",
      justifyContent: "center",
      alignItems: "center",
    }}
  >
    <div
      style={{
        fontSize: 80,
        fontWeight: 700,
        color: "#ffffff",
        fontFamily: "sans-serif",
      }}
    >
      Scene B
    </div>
  </AbsoluteFill>
);

export const FilmBurnTransition: React.FC = () => {
  const frame = useCurrentFrame();

  // 場景切換點:frame 45 前顯示場景 A,之後顯示場景 B
  const showSceneA = frame < 45;

  // 漏光層 opacity:frame 30-45 從 0→1,frame 45-60 從 1→0
  const burnOpacity = interpolate(
    frame,
    [30, 45, 60],
    [0, 1, 0],
    {
      extrapolateLeft: "clamp",
      extrapolateRight: "clamp",
    }
  );

  // 漏光層 scale:frame 30-60 從 0.5→2
  const burnScale = interpolate(frame, [30, 60], [0.5, 2], {
    extrapolateLeft: "clamp",
    extrapolateRight: "clamp",
  });

  // 橘色 overlay opacity:frame 40-45 從 0→1,frame 45-50 從 1→0
  const overlayOpacity = interpolate(
    frame,
    [40, 45, 50],
    [0, 1, 0],
    {
      extrapolateLeft: "clamp",
      extrapolateRight: "clamp",
    }
  );

  return (
    <AbsoluteFill>
      {/* 底層場景 */}
      {showSceneA ? <SceneA /> : <SceneB />}

      {/* 漏光層:橘紅色光暈 */}
      <AbsoluteFill
        style={{
          opacity: burnOpacity,
          transform: `scale(${burnScale})`,
          background:
            "radial-gradient(ellipse at center, #ff6b00 0%, #ff2200 30%, transparent 70%)",
          pointerEvents: "none",
        }}
      />

      {/* 橘色 overlay:漏光最強時疊加 */}
      <AbsoluteFill
        style={{
          opacity: overlayOpacity,
          background: "rgba(255,120,0,0.3)",
          pointerEvents: "none",
        }}
      />
    </AbsoluteFill>
  );
};

登入後查看完整程式碼