包装 IClip 给素材扩展坐标、层级、透明度等信息,用于 AVCanvas 响应用户交互

OffscreenSprite 非常相似,应用场景不同

Example

const spr = new VisibleSprite(
new MP4Clip((await fetch('<mp4 url>')).body),
);
spr.opacity = 0.5 // 半透明
spr.rect.x = 100 // x 坐标偏移 100 像素
spr.time.offset = 10e6 // 视频第 10s 开始绘制素材

See

视频剪辑

Hierarchy

  • BaseSprite
    • VisibleSprite

Constructors

Properties

#animatKeyFrame: null | TAnimationKeyFrame = null
#animatOpts: null | Required<IAnimationOpts> = null
#clip: IClip
#destroyed: boolean = false
#evtTool: EventTool<{
    propsChange: ((value) => void);
}> = ...

Type declaration

  • propsChange: ((value) => void)
      • (value): void
      • Parameters

        • value: Partial<{
              rect: Partial<Rect>;
              zIndex: number;
          }>

        Returns void

#lastAudio: Float32Array[] = []
#lastTime: number = -1
#lastVf: null | ImageBitmap | VideoFrame = null
#ticking: boolean = false
#time: {
    duration: number;
    offset: number;
    playbackRate: number;
} = ...

控制素材在的时间偏移、时长、播放速率,常用于剪辑场景时间轴(轨道)模块 duration 不能大于引用 IClip 的时长,单位 微秒

playbackRate 控制当前素材的播放速率,1 表示正常播放; 注意

  1. 设置 playbackRate 时需要主动修正 duration
  2. 音频使用最简单的插值算法来改变速率,所以改变速率后音调会产生变化,自定义算法请使用 MP4Clip.tickInterceptor 配合实现

Type declaration

  • duration: number
  • offset: number
  • playbackRate: number
#zIndex: number = 0
flip: null | "horizontal" | "vertical" = null

水平或垂直方向翻转素材

on: (<Type>(type, listener) => (() => void)) = ...

监听属性变更事件

Type declaration

    • <Type>(type, listener): (() => void)
    • Type Parameters

      • Type extends "propsChange"

      Parameters

      • type: Type
      • listener: {
            propsChange: ((value) => void);
        }[Type]

      Returns (() => void)

        • (): void
        • Returns void

Example

sprite.on('propsChange', (changedProps) => {})
opacity: number = 1

不透明度

ready: Promise<void> = ...
rect: Rect = ...

控制素材在视频中的空间属性(坐标、旋转、缩放)

visible: boolean = true

元素是否可见,用于不想删除,期望临时隐藏 Sprite 的场景

Accessors

  • get time(): {
        duration: number;
        offset: number;
        playbackRate: number;
    }
  • Returns {
        duration: number;
        offset: number;
        playbackRate: number;
    }

    • duration: number
    • offset: number
    • playbackRate: number
  • set time(v): void
  • Parameters

    • v: {
          duration: number;
          offset: number;
          playbackRate?: number;
      }
      • duration: number
      • offset: number
      • Optional playbackRate?: number

    Returns void

Methods

  • 如果当前 sprite 已被设置动画,将 sprite 的动画属性设定到指定时间的状态

    Parameters

    • time: number

    Returns void

  • 绘制素材指定时刻的图像到 canvas 上下文,并返回对应的音频数据

    Parameters

    • ctx: OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D
    • time: number

      指定时刻,微秒

    Returns {
        audio: Float32Array[];
    }

    • audio: Float32Array[]
  • 给素材添加动画,使用方法参考 css animation

    Parameters

    • keyFrame: Partial<Record<`${number}%` | "from" | "to", Partial<TAnimateProps>>>
    • opts: IAnimationOpts

    Returns void

    Example

    sprite.setAnimation(
    {
    '0%': { x: 0, y: 0 },
    '25%': { x: 1200, y: 680 },
    '50%': { x: 1200, y: 0 },
    '75%': { x: 0, y: 680 },
    '100%': { x: 0, y: 0 },
    },
    { duration: 4, iterCount: 1 },
    );

    See

    视频水印动画