/** * Motion-graphics overlays for the assemble layer (the After-Effects-shaped gap): * composite a graphic onto footage, burn an animated alert, or a lower-third title * — all time-gated with fades. These are PURE FFmpeg arg-builders (the tested * surface; ffmpeg is never spawned here), mirroring stitch.ts. They pair with * gen-image: generate a "SYSTEM COMPROMISED" / dashboard graphic, then overlay it. * * Conventions: `-y` is auto-prepended by runFfmpeg, so it is NOT included here. * Time gating uses `enable='between(t,start,end)'`; fades use the `fade` filter on * the overlay's alpha, so the composite eases in/out rather than popping. * * VALIDATION STATUS: {@link buildOverlayArgs} (graphic composite) is real-render * validated — pair it with gen-image to overlay a generated "SYSTEM COMPROMISED" / * dashboard graphic with no font dependency (the recommended path). The two text * builders ({@link buildAlertTextArgs}, {@link buildLowerThirdArgs}) use the * `drawtext` filter, which requires an ffmpeg built with libfreetype; their arg * shapes are unit-tested but NOT render-validated on every host. On a drawtext-less * ffmpeg, render the text to a PNG (gen-image / a title-card) and composite it via * buildOverlayArgs instead. */ export type OverlayPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'center' | 'bottom-center' | 'top-center' | 'full'; export declare const OVERLAY_POSITION_IDS: OverlayPosition[]; export interface BuildOverlayOptions { position?: OverlayPosition; /** Visible window in seconds. Defaults to the whole clip (no `enable` gate). */ startSec?: number; endSec?: number; fadeInSec?: number; fadeOutSec?: number; /** 0..1 overall opacity. Default 1. */ opacity?: number; /** Inset from the frame edge in px (ignored for `center`/`full`). Default 48. */ margin?: number; /** H.264 CRF. Default 18 (overlays want to preserve text edges). */ crf?: number; } /** * Composite a graphic (PNG/MP4-with-alpha) onto a base video (PURE). Fades the * overlay's alpha in/out and gates it to [startSec, endSec] when given. `full` * scales the graphic to the frame; other positions overlay at native size. */ export declare function buildOverlayArgs(baseVideo: string, graphic: string, outputPath: string, opts?: BuildOverlayOptions): string[]; export interface BuildAlertTextOptions { startSec?: number; endSec?: number; /** Pulse frequency in Hz (the flash rate). Default 2. */ pulseHz?: number; /** Text color. Default red. */ color?: string; fontSize?: number; /** Draw a flashing border box. Default true. */ border?: boolean; crf?: number; } /** * Burn an animated alert (e.g. "SYSTEM COMPROMISED") onto a base video WITHOUT a * pre-rendered graphic (PURE). The text alpha pulses via a sine expression and an * optional border box flashes in sync, gated to [startSec, endSec]. This is the * templated motion-graphic the reference advert uses for its breach moment. */ export declare function buildAlertTextArgs(baseVideo: string, text: string, outputPath: string, opts?: BuildAlertTextOptions): string[]; export interface BuildLowerThirdOptions { startSec?: number; endSec?: number; fadeInSec?: number; fadeOutSec?: number; fontSize?: number; color?: string; /** Background box color@opacity, e.g. `black@0.55`. Default `black@0.55`. */ boxColor?: string; /** Inset from the bottom-left in px. Default 64. */ margin?: number; crf?: number; } /** * Burn a lower-third title (text on a translucent box, bottom-left) onto a base * video (PURE), gated to [startSec, endSec] with optional fades. The standard * name/role caption the reference uses to introduce characters. */ export declare function buildLowerThirdArgs(baseVideo: string, text: string, outputPath: string, opts?: BuildLowerThirdOptions): string[]; //# sourceMappingURL=overlay.d.ts.map