Skip to content
Framoo
Esc
↑↓navigate↵open⌘Jpreview
On this page

ShakeOnBeat

拍に合わせて、カメラを短く揺らします。

import { useMemo } from 'react'
import { useVideoConfig } from 'remotion'
import {
  SceneLayer,
  SceneStage,
  secondsToFrameRange,
  secondsToFrames,
} from 'framoo/core'
import { shakeOnBeat } from 'framoo/camera/effects'

export const ShakeOnBeatPreview = () => {
  const { fps } = useVideoConfig()
  const camera = useMemo(() => {
    const decayRange = secondsToFrameRange(0, 8 / 30, fps)
    const beatTimesInSeconds = [0.7, 1.5, 2.3, 3.1, 3.9]

    return {
      effects: [
        shakeOnBeat({
          beatsInFrames: beatTimesInSeconds.map((seconds) =>
            secondsToFrames(seconds, fps),
          ),
          intensity: 16,
          rotation: 0.85,
          decayInFrames: decayRange.durationInFrames,
        }),
      ],
    }
  }, [fps])

  return (
    <SceneStage camera={camera}>
      <SceneLayer followsCamera>
        {null /* 背景画像など、カメラと一緒に動かすレイヤーを置く */}
      </SceneLayer>
    </SceneStage>
  )
}

API Reference

Prop Type Default Description
beatsInFrames readonly number[] — 揺れを始める拍のフレーム位置。
intensity number 8 拍ごとの移動量。ピクセル単位。
rotation number 0.45 拍ごとの回転幅。角度を度単位で指定。
decayInFrames number 省略時は約0.22秒分 各拍の揺れが弱まるまでの長さ。

Was this page helpful?