import { type LocalRenderStyle } from './render-local.js'; import type { MotifMoment } from './motifs.js'; /** An overlay element placed on the animation timeline. */ export type AnimElement = { kind: 'lower-third'; start: number; end: number; text: string; } | { kind: 'headline'; start: number; end: number; word: string; } | { kind: 'stat'; start: number; end: number; value: number; unit?: string; gauge?: number; } | { kind: 'icon'; start: number; end: number; motif: MotifMoment; }; /** * Build the composite overlay SVG for one timestamp `t` — every active element with * its animation applied. Pure & deterministic. */ export declare function animatedFrameSvg(t: number, dims: { width: number; height: number; }, style: LocalRenderStyle, elements: AnimElement[]): string; /** Pure: ffmpeg argv overlaying the rendered frame sequence onto the source at `fps`. */ export declare function buildAnimateRenderArgs(sourceVideo: string, framePattern: string, fps: number, outputPath: string): string[]; export type FfmpegRunner = (args: string[]) => Promise; export interface AnimateRenderDeps { ffmpeg: FfmpegRunner; /** Override the rasteriser (tests). Defaults to the live sharp path. */ rasterise?: (svg: string) => Promise; } export interface AnimateRenderOptions { sourceVideo: string; dims: { width: number; height: number; }; durationSeconds: number; style: LocalRenderStyle; elements: AnimElement[]; fps?: number; /** Dir for the intermediate frame PNGs. */ frameDir: string; outputPath: string; } /** * Render the animated overlay reel: rasterise one transparent frame per output frame * (each the composite for that timestamp), then overlay the sequence on the source. * Returns the frame paths written. */ export declare function renderAnimatedOverlay(opts: AnimateRenderOptions, deps: AnimateRenderDeps): Promise; //# sourceMappingURL=animate-render.d.ts.map