cerevox
Version:
TypeScript SDK for browser automation and secure command execution in highly available and scalable micro computer environments
1,021 lines • 45.8 kB
TypeScript
import { z } from 'zod';
export interface ProjectInfo {
name: string;
id: string;
}
export interface Resolution {
width: number;
height: number;
}
export interface Settings {
fps: number;
resolution: Resolution;
pixelFormat: string;
sampleRate: number;
channels: number;
timebase: string;
}
export type AssetType = 'video' | 'audio' | 'image';
export interface Asset {
id: string;
type: AssetType;
uri: string;
durationMs?: number;
fps?: number;
}
export type TrackType = 'video' | 'audio' | 'subtitle';
export interface Effect {
name: 'fadeIn' | 'fadeOut' | 'gain' | 'blur' | 'color' | 'speed' | string;
params?: Record<string, unknown>;
}
export interface Filter {
name: string;
params?: Record<string, unknown>;
}
export interface TransitionDef {
name: 'xfade' | 'fade' | 'wipeleft' | 'wiperight' | 'wipeup' | 'wipedown' | 'slideleft' | 'slideright' | 'slideup' | 'slidedown' | 'circlecrop' | 'rectcrop' | 'distance' | 'fadeblack' | 'fadewhite' | 'radial' | 'smoothleft' | 'smoothright' | 'smoothup' | 'smoothdown' | 'circleopen' | 'circleclose' | 'vertopen' | 'vertclose' | 'horzopen' | 'horzclose' | 'dissolve' | 'pixelize' | 'diagtl' | 'diagtr' | 'diagbl' | 'diagbr';
durationMs: number;
params?: Record<string, unknown>;
}
export interface Transform {
scale?: number;
rotate?: number;
anchor?: 'center' | 'topleft' | 'topright' | 'bottomleft' | 'bottomright';
position?: {
x: number;
y: number;
};
fit?: 'contain' | 'cover' | 'stretch';
}
export interface Clip {
id: string;
assetId: string;
startMs: number;
inMs: number;
durationMs: number;
transform?: Transform;
speed?: number;
effects?: Effect[];
filters?: Filter[];
transitionIn?: TransitionDef;
transitionOut?: TransitionDef;
}
export interface Track {
id: string;
type: TrackType;
muted?: boolean;
opacity?: number;
clips: Clip[];
}
export interface DuckingRule {
id: string;
musicTrackId: string;
dialogTrackId: string;
params?: {
threshold?: number;
ratio?: number;
attackMs?: number;
releaseMs?: number;
musicPreGain?: number;
};
}
export interface Mix {
ducking?: DuckingRule[];
}
export interface SubtitleItem {
id: string;
text: string;
startMs: number;
endMs: number;
audio?: string;
style?: {
fontFamily?: string;
fontSize?: number;
bold?: boolean;
color?: string;
outlineColor?: string;
outlineWidth?: number;
align?: 'left' | 'center' | 'right';
verticalAlign?: 'top' | 'middle' | 'bottom';
position?: {
x: number;
y: number;
};
};
}
export interface ExportCfg {
container: string;
videoCodec: string;
crf?: number;
preset?: string;
audioCodec: string;
audioBitrate?: string;
outFile?: string;
}
export interface Timeline {
tracks: Track[];
mix?: Mix;
}
export interface VideoProject {
version: string;
project: ProjectInfo;
settings: Settings;
assets: Asset[];
timeline: Timeline;
subtitles?: SubtitleItem[];
export: ExportCfg;
}
export declare const zVideoProject: z.ZodObject<{
version: z.ZodString;
project: z.ZodObject<{
name: z.ZodString;
id: z.ZodString;
}, "strip", z.ZodTypeAny, {
id: string;
name: string;
}, {
id: string;
name: string;
}>;
settings: z.ZodObject<{
fps: z.ZodNumber;
resolution: z.ZodObject<{
width: z.ZodNumber;
height: z.ZodNumber;
}, "strip", z.ZodTypeAny, {
width: number;
height: number;
}, {
width: number;
height: number;
}>;
pixelFormat: z.ZodString;
sampleRate: z.ZodNumber;
channels: z.ZodNumber;
timebase: z.ZodString;
}, "strip", z.ZodTypeAny, {
fps: number;
resolution: {
width: number;
height: number;
};
pixelFormat: string;
sampleRate: number;
channels: number;
timebase: string;
}, {
fps: number;
resolution: {
width: number;
height: number;
};
pixelFormat: string;
sampleRate: number;
channels: number;
timebase: string;
}>;
assets: z.ZodArray<z.ZodObject<{
id: z.ZodString;
type: z.ZodEnum<["video", "audio", "image"]>;
uri: z.ZodString;
durationMs: z.ZodOptional<z.ZodNumber>;
fps: z.ZodOptional<z.ZodNumber>;
}, "strip", z.ZodTypeAny, {
id: string;
type: "image" | "audio" | "video";
uri: string;
fps?: number | undefined;
durationMs?: number | undefined;
}, {
id: string;
type: "image" | "audio" | "video";
uri: string;
fps?: number | undefined;
durationMs?: number | undefined;
}>, "many">;
timeline: z.ZodObject<{
tracks: z.ZodArray<z.ZodObject<{
id: z.ZodString;
type: z.ZodEnum<["video", "audio", "subtitle"]>;
muted: z.ZodOptional<z.ZodBoolean>;
opacity: z.ZodOptional<z.ZodNumber>;
clips: z.ZodArray<z.ZodObject<{
id: z.ZodString;
assetId: z.ZodString;
startMs: z.ZodNumber;
inMs: z.ZodNumber;
durationMs: z.ZodNumber;
transform: z.ZodOptional<z.ZodObject<{
scale: z.ZodOptional<z.ZodNumber>;
rotate: z.ZodOptional<z.ZodNumber>;
anchor: z.ZodOptional<z.ZodEnum<["center", "topleft", "topright", "bottomleft", "bottomright"]>>;
position: z.ZodOptional<z.ZodObject<{
x: z.ZodNumber;
y: z.ZodNumber;
}, "strip", z.ZodTypeAny, {
x: number;
y: number;
}, {
x: number;
y: number;
}>>;
fit: z.ZodOptional<z.ZodEnum<["contain", "cover", "stretch"]>>;
}, "strip", z.ZodTypeAny, {
anchor?: "center" | "topleft" | "topright" | "bottomleft" | "bottomright" | undefined;
scale?: number | undefined;
rotate?: number | undefined;
position?: {
x: number;
y: number;
} | undefined;
fit?: "contain" | "cover" | "stretch" | undefined;
}, {
anchor?: "center" | "topleft" | "topright" | "bottomleft" | "bottomright" | undefined;
scale?: number | undefined;
rotate?: number | undefined;
position?: {
x: number;
y: number;
} | undefined;
fit?: "contain" | "cover" | "stretch" | undefined;
}>>;
speed: z.ZodOptional<z.ZodNumber>;
effects: z.ZodOptional<z.ZodArray<z.ZodObject<{
name: z.ZodString;
params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
}, "strip", z.ZodTypeAny, {
name: string;
params?: Record<string, unknown> | undefined;
}, {
name: string;
params?: Record<string, unknown> | undefined;
}>, "many">>;
filters: z.ZodOptional<z.ZodArray<z.ZodObject<{
name: z.ZodString;
params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
}, "strip", z.ZodTypeAny, {
name: string;
params?: Record<string, unknown> | undefined;
}, {
name: string;
params?: Record<string, unknown> | undefined;
}>, "many">>;
transitionIn: z.ZodOptional<z.ZodObject<{
name: z.ZodEnum<["xfade", "fade", "wipeleft", "wiperight", "wipeup", "wipedown", "slideleft", "slideright", "slideup", "slidedown", "circlecrop", "rectcrop", "distance", "fadeblack", "fadewhite", "radial", "smoothleft", "smoothright", "smoothup", "smoothdown", "circleopen", "circleclose", "vertopen", "vertclose", "horzopen", "horzclose", "dissolve", "pixelize", "diagtl", "diagtr", "diagbl", "diagbr"]>;
durationMs: z.ZodNumber;
params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
}, "strip", z.ZodTypeAny, {
name: "xfade" | "fade" | "wipeleft" | "wiperight" | "wipeup" | "wipedown" | "slideleft" | "slideright" | "slideup" | "slidedown" | "circlecrop" | "rectcrop" | "distance" | "fadeblack" | "fadewhite" | "radial" | "smoothleft" | "smoothright" | "smoothup" | "smoothdown" | "circleopen" | "circleclose" | "vertopen" | "vertclose" | "horzopen" | "horzclose" | "dissolve" | "pixelize" | "diagtl" | "diagtr" | "diagbl" | "diagbr";
durationMs: number;
params?: Record<string, unknown> | undefined;
}, {
name: "xfade" | "fade" | "wipeleft" | "wiperight" | "wipeup" | "wipedown" | "slideleft" | "slideright" | "slideup" | "slidedown" | "circlecrop" | "rectcrop" | "distance" | "fadeblack" | "fadewhite" | "radial" | "smoothleft" | "smoothright" | "smoothup" | "smoothdown" | "circleopen" | "circleclose" | "vertopen" | "vertclose" | "horzopen" | "horzclose" | "dissolve" | "pixelize" | "diagtl" | "diagtr" | "diagbl" | "diagbr";
durationMs: number;
params?: Record<string, unknown> | undefined;
}>>;
transitionOut: z.ZodOptional<z.ZodObject<{
name: z.ZodEnum<["xfade", "fade", "wipeleft", "wiperight", "wipeup", "wipedown", "slideleft", "slideright", "slideup", "slidedown", "circlecrop", "rectcrop", "distance", "fadeblack", "fadewhite", "radial", "smoothleft", "smoothright", "smoothup", "smoothdown", "circleopen", "circleclose", "vertopen", "vertclose", "horzopen", "horzclose", "dissolve", "pixelize", "diagtl", "diagtr", "diagbl", "diagbr"]>;
durationMs: z.ZodNumber;
params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
}, "strip", z.ZodTypeAny, {
name: "xfade" | "fade" | "wipeleft" | "wiperight" | "wipeup" | "wipedown" | "slideleft" | "slideright" | "slideup" | "slidedown" | "circlecrop" | "rectcrop" | "distance" | "fadeblack" | "fadewhite" | "radial" | "smoothleft" | "smoothright" | "smoothup" | "smoothdown" | "circleopen" | "circleclose" | "vertopen" | "vertclose" | "horzopen" | "horzclose" | "dissolve" | "pixelize" | "diagtl" | "diagtr" | "diagbl" | "diagbr";
durationMs: number;
params?: Record<string, unknown> | undefined;
}, {
name: "xfade" | "fade" | "wipeleft" | "wiperight" | "wipeup" | "wipedown" | "slideleft" | "slideright" | "slideup" | "slidedown" | "circlecrop" | "rectcrop" | "distance" | "fadeblack" | "fadewhite" | "radial" | "smoothleft" | "smoothright" | "smoothup" | "smoothdown" | "circleopen" | "circleclose" | "vertopen" | "vertclose" | "horzopen" | "horzclose" | "dissolve" | "pixelize" | "diagtl" | "diagtr" | "diagbl" | "diagbr";
durationMs: number;
params?: Record<string, unknown> | undefined;
}>>;
}, "strip", z.ZodTypeAny, {
id: string;
durationMs: number;
assetId: string;
startMs: number;
inMs: number;
speed?: number | undefined;
transform?: {
anchor?: "center" | "topleft" | "topright" | "bottomleft" | "bottomright" | undefined;
scale?: number | undefined;
rotate?: number | undefined;
position?: {
x: number;
y: number;
} | undefined;
fit?: "contain" | "cover" | "stretch" | undefined;
} | undefined;
effects?: {
name: string;
params?: Record<string, unknown> | undefined;
}[] | undefined;
filters?: {
name: string;
params?: Record<string, unknown> | undefined;
}[] | undefined;
transitionIn?: {
name: "xfade" | "fade" | "wipeleft" | "wiperight" | "wipeup" | "wipedown" | "slideleft" | "slideright" | "slideup" | "slidedown" | "circlecrop" | "rectcrop" | "distance" | "fadeblack" | "fadewhite" | "radial" | "smoothleft" | "smoothright" | "smoothup" | "smoothdown" | "circleopen" | "circleclose" | "vertopen" | "vertclose" | "horzopen" | "horzclose" | "dissolve" | "pixelize" | "diagtl" | "diagtr" | "diagbl" | "diagbr";
durationMs: number;
params?: Record<string, unknown> | undefined;
} | undefined;
transitionOut?: {
name: "xfade" | "fade" | "wipeleft" | "wiperight" | "wipeup" | "wipedown" | "slideleft" | "slideright" | "slideup" | "slidedown" | "circlecrop" | "rectcrop" | "distance" | "fadeblack" | "fadewhite" | "radial" | "smoothleft" | "smoothright" | "smoothup" | "smoothdown" | "circleopen" | "circleclose" | "vertopen" | "vertclose" | "horzopen" | "horzclose" | "dissolve" | "pixelize" | "diagtl" | "diagtr" | "diagbl" | "diagbr";
durationMs: number;
params?: Record<string, unknown> | undefined;
} | undefined;
}, {
id: string;
durationMs: number;
assetId: string;
startMs: number;
inMs: number;
speed?: number | undefined;
transform?: {
anchor?: "center" | "topleft" | "topright" | "bottomleft" | "bottomright" | undefined;
scale?: number | undefined;
rotate?: number | undefined;
position?: {
x: number;
y: number;
} | undefined;
fit?: "contain" | "cover" | "stretch" | undefined;
} | undefined;
effects?: {
name: string;
params?: Record<string, unknown> | undefined;
}[] | undefined;
filters?: {
name: string;
params?: Record<string, unknown> | undefined;
}[] | undefined;
transitionIn?: {
name: "xfade" | "fade" | "wipeleft" | "wiperight" | "wipeup" | "wipedown" | "slideleft" | "slideright" | "slideup" | "slidedown" | "circlecrop" | "rectcrop" | "distance" | "fadeblack" | "fadewhite" | "radial" | "smoothleft" | "smoothright" | "smoothup" | "smoothdown" | "circleopen" | "circleclose" | "vertopen" | "vertclose" | "horzopen" | "horzclose" | "dissolve" | "pixelize" | "diagtl" | "diagtr" | "diagbl" | "diagbr";
durationMs: number;
params?: Record<string, unknown> | undefined;
} | undefined;
transitionOut?: {
name: "xfade" | "fade" | "wipeleft" | "wiperight" | "wipeup" | "wipedown" | "slideleft" | "slideright" | "slideup" | "slidedown" | "circlecrop" | "rectcrop" | "distance" | "fadeblack" | "fadewhite" | "radial" | "smoothleft" | "smoothright" | "smoothup" | "smoothdown" | "circleopen" | "circleclose" | "vertopen" | "vertclose" | "horzopen" | "horzclose" | "dissolve" | "pixelize" | "diagtl" | "diagtr" | "diagbl" | "diagbr";
durationMs: number;
params?: Record<string, unknown> | undefined;
} | undefined;
}>, "many">;
}, "strip", z.ZodTypeAny, {
id: string;
type: "audio" | "video" | "subtitle";
clips: {
id: string;
durationMs: number;
assetId: string;
startMs: number;
inMs: number;
speed?: number | undefined;
transform?: {
anchor?: "center" | "topleft" | "topright" | "bottomleft" | "bottomright" | undefined;
scale?: number | undefined;
rotate?: number | undefined;
position?: {
x: number;
y: number;
} | undefined;
fit?: "contain" | "cover" | "stretch" | undefined;
} | undefined;
effects?: {
name: string;
params?: Record<string, unknown> | undefined;
}[] | undefined;
filters?: {
name: string;
params?: Record<string, unknown> | undefined;
}[] | undefined;
transitionIn?: {
name: "xfade" | "fade" | "wipeleft" | "wiperight" | "wipeup" | "wipedown" | "slideleft" | "slideright" | "slideup" | "slidedown" | "circlecrop" | "rectcrop" | "distance" | "fadeblack" | "fadewhite" | "radial" | "smoothleft" | "smoothright" | "smoothup" | "smoothdown" | "circleopen" | "circleclose" | "vertopen" | "vertclose" | "horzopen" | "horzclose" | "dissolve" | "pixelize" | "diagtl" | "diagtr" | "diagbl" | "diagbr";
durationMs: number;
params?: Record<string, unknown> | undefined;
} | undefined;
transitionOut?: {
name: "xfade" | "fade" | "wipeleft" | "wiperight" | "wipeup" | "wipedown" | "slideleft" | "slideright" | "slideup" | "slidedown" | "circlecrop" | "rectcrop" | "distance" | "fadeblack" | "fadewhite" | "radial" | "smoothleft" | "smoothright" | "smoothup" | "smoothdown" | "circleopen" | "circleclose" | "vertopen" | "vertclose" | "horzopen" | "horzclose" | "dissolve" | "pixelize" | "diagtl" | "diagtr" | "diagbl" | "diagbr";
durationMs: number;
params?: Record<string, unknown> | undefined;
} | undefined;
}[];
muted?: boolean | undefined;
opacity?: number | undefined;
}, {
id: string;
type: "audio" | "video" | "subtitle";
clips: {
id: string;
durationMs: number;
assetId: string;
startMs: number;
inMs: number;
speed?: number | undefined;
transform?: {
anchor?: "center" | "topleft" | "topright" | "bottomleft" | "bottomright" | undefined;
scale?: number | undefined;
rotate?: number | undefined;
position?: {
x: number;
y: number;
} | undefined;
fit?: "contain" | "cover" | "stretch" | undefined;
} | undefined;
effects?: {
name: string;
params?: Record<string, unknown> | undefined;
}[] | undefined;
filters?: {
name: string;
params?: Record<string, unknown> | undefined;
}[] | undefined;
transitionIn?: {
name: "xfade" | "fade" | "wipeleft" | "wiperight" | "wipeup" | "wipedown" | "slideleft" | "slideright" | "slideup" | "slidedown" | "circlecrop" | "rectcrop" | "distance" | "fadeblack" | "fadewhite" | "radial" | "smoothleft" | "smoothright" | "smoothup" | "smoothdown" | "circleopen" | "circleclose" | "vertopen" | "vertclose" | "horzopen" | "horzclose" | "dissolve" | "pixelize" | "diagtl" | "diagtr" | "diagbl" | "diagbr";
durationMs: number;
params?: Record<string, unknown> | undefined;
} | undefined;
transitionOut?: {
name: "xfade" | "fade" | "wipeleft" | "wiperight" | "wipeup" | "wipedown" | "slideleft" | "slideright" | "slideup" | "slidedown" | "circlecrop" | "rectcrop" | "distance" | "fadeblack" | "fadewhite" | "radial" | "smoothleft" | "smoothright" | "smoothup" | "smoothdown" | "circleopen" | "circleclose" | "vertopen" | "vertclose" | "horzopen" | "horzclose" | "dissolve" | "pixelize" | "diagtl" | "diagtr" | "diagbl" | "diagbr";
durationMs: number;
params?: Record<string, unknown> | undefined;
} | undefined;
}[];
muted?: boolean | undefined;
opacity?: number | undefined;
}>, "many">;
mix: z.ZodOptional<z.ZodObject<{
ducking: z.ZodOptional<z.ZodArray<z.ZodObject<{
id: z.ZodString;
musicTrackId: z.ZodString;
dialogTrackId: z.ZodString;
params: z.ZodOptional<z.ZodObject<{
threshold: z.ZodOptional<z.ZodNumber>;
ratio: z.ZodOptional<z.ZodNumber>;
attackMs: z.ZodOptional<z.ZodNumber>;
releaseMs: z.ZodOptional<z.ZodNumber>;
musicPreGain: z.ZodOptional<z.ZodNumber>;
}, "strip", z.ZodTypeAny, {
ratio?: number | undefined;
threshold?: number | undefined;
attackMs?: number | undefined;
releaseMs?: number | undefined;
musicPreGain?: number | undefined;
}, {
ratio?: number | undefined;
threshold?: number | undefined;
attackMs?: number | undefined;
releaseMs?: number | undefined;
musicPreGain?: number | undefined;
}>>;
}, "strip", z.ZodTypeAny, {
id: string;
musicTrackId: string;
dialogTrackId: string;
params?: {
ratio?: number | undefined;
threshold?: number | undefined;
attackMs?: number | undefined;
releaseMs?: number | undefined;
musicPreGain?: number | undefined;
} | undefined;
}, {
id: string;
musicTrackId: string;
dialogTrackId: string;
params?: {
ratio?: number | undefined;
threshold?: number | undefined;
attackMs?: number | undefined;
releaseMs?: number | undefined;
musicPreGain?: number | undefined;
} | undefined;
}>, "many">>;
}, "strip", z.ZodTypeAny, {
ducking?: {
id: string;
musicTrackId: string;
dialogTrackId: string;
params?: {
ratio?: number | undefined;
threshold?: number | undefined;
attackMs?: number | undefined;
releaseMs?: number | undefined;
musicPreGain?: number | undefined;
} | undefined;
}[] | undefined;
}, {
ducking?: {
id: string;
musicTrackId: string;
dialogTrackId: string;
params?: {
ratio?: number | undefined;
threshold?: number | undefined;
attackMs?: number | undefined;
releaseMs?: number | undefined;
musicPreGain?: number | undefined;
} | undefined;
}[] | undefined;
}>>;
}, "strip", z.ZodTypeAny, {
tracks: {
id: string;
type: "audio" | "video" | "subtitle";
clips: {
id: string;
durationMs: number;
assetId: string;
startMs: number;
inMs: number;
speed?: number | undefined;
transform?: {
anchor?: "center" | "topleft" | "topright" | "bottomleft" | "bottomright" | undefined;
scale?: number | undefined;
rotate?: number | undefined;
position?: {
x: number;
y: number;
} | undefined;
fit?: "contain" | "cover" | "stretch" | undefined;
} | undefined;
effects?: {
name: string;
params?: Record<string, unknown> | undefined;
}[] | undefined;
filters?: {
name: string;
params?: Record<string, unknown> | undefined;
}[] | undefined;
transitionIn?: {
name: "xfade" | "fade" | "wipeleft" | "wiperight" | "wipeup" | "wipedown" | "slideleft" | "slideright" | "slideup" | "slidedown" | "circlecrop" | "rectcrop" | "distance" | "fadeblack" | "fadewhite" | "radial" | "smoothleft" | "smoothright" | "smoothup" | "smoothdown" | "circleopen" | "circleclose" | "vertopen" | "vertclose" | "horzopen" | "horzclose" | "dissolve" | "pixelize" | "diagtl" | "diagtr" | "diagbl" | "diagbr";
durationMs: number;
params?: Record<string, unknown> | undefined;
} | undefined;
transitionOut?: {
name: "xfade" | "fade" | "wipeleft" | "wiperight" | "wipeup" | "wipedown" | "slideleft" | "slideright" | "slideup" | "slidedown" | "circlecrop" | "rectcrop" | "distance" | "fadeblack" | "fadewhite" | "radial" | "smoothleft" | "smoothright" | "smoothup" | "smoothdown" | "circleopen" | "circleclose" | "vertopen" | "vertclose" | "horzopen" | "horzclose" | "dissolve" | "pixelize" | "diagtl" | "diagtr" | "diagbl" | "diagbr";
durationMs: number;
params?: Record<string, unknown> | undefined;
} | undefined;
}[];
muted?: boolean | undefined;
opacity?: number | undefined;
}[];
mix?: {
ducking?: {
id: string;
musicTrackId: string;
dialogTrackId: string;
params?: {
ratio?: number | undefined;
threshold?: number | undefined;
attackMs?: number | undefined;
releaseMs?: number | undefined;
musicPreGain?: number | undefined;
} | undefined;
}[] | undefined;
} | undefined;
}, {
tracks: {
id: string;
type: "audio" | "video" | "subtitle";
clips: {
id: string;
durationMs: number;
assetId: string;
startMs: number;
inMs: number;
speed?: number | undefined;
transform?: {
anchor?: "center" | "topleft" | "topright" | "bottomleft" | "bottomright" | undefined;
scale?: number | undefined;
rotate?: number | undefined;
position?: {
x: number;
y: number;
} | undefined;
fit?: "contain" | "cover" | "stretch" | undefined;
} | undefined;
effects?: {
name: string;
params?: Record<string, unknown> | undefined;
}[] | undefined;
filters?: {
name: string;
params?: Record<string, unknown> | undefined;
}[] | undefined;
transitionIn?: {
name: "xfade" | "fade" | "wipeleft" | "wiperight" | "wipeup" | "wipedown" | "slideleft" | "slideright" | "slideup" | "slidedown" | "circlecrop" | "rectcrop" | "distance" | "fadeblack" | "fadewhite" | "radial" | "smoothleft" | "smoothright" | "smoothup" | "smoothdown" | "circleopen" | "circleclose" | "vertopen" | "vertclose" | "horzopen" | "horzclose" | "dissolve" | "pixelize" | "diagtl" | "diagtr" | "diagbl" | "diagbr";
durationMs: number;
params?: Record<string, unknown> | undefined;
} | undefined;
transitionOut?: {
name: "xfade" | "fade" | "wipeleft" | "wiperight" | "wipeup" | "wipedown" | "slideleft" | "slideright" | "slideup" | "slidedown" | "circlecrop" | "rectcrop" | "distance" | "fadeblack" | "fadewhite" | "radial" | "smoothleft" | "smoothright" | "smoothup" | "smoothdown" | "circleopen" | "circleclose" | "vertopen" | "vertclose" | "horzopen" | "horzclose" | "dissolve" | "pixelize" | "diagtl" | "diagtr" | "diagbl" | "diagbr";
durationMs: number;
params?: Record<string, unknown> | undefined;
} | undefined;
}[];
muted?: boolean | undefined;
opacity?: number | undefined;
}[];
mix?: {
ducking?: {
id: string;
musicTrackId: string;
dialogTrackId: string;
params?: {
ratio?: number | undefined;
threshold?: number | undefined;
attackMs?: number | undefined;
releaseMs?: number | undefined;
musicPreGain?: number | undefined;
} | undefined;
}[] | undefined;
} | undefined;
}>;
subtitles: z.ZodOptional<z.ZodArray<z.ZodObject<{
id: z.ZodString;
text: z.ZodString;
startMs: z.ZodNumber;
endMs: z.ZodNumber;
audio: z.ZodOptional<z.ZodString>;
style: z.ZodOptional<z.ZodObject<{
fontFamily: z.ZodOptional<z.ZodString>;
fontSize: z.ZodOptional<z.ZodNumber>;
bold: z.ZodOptional<z.ZodBoolean>;
color: z.ZodOptional<z.ZodString>;
outlineColor: z.ZodOptional<z.ZodString>;
outlineWidth: z.ZodOptional<z.ZodNumber>;
align: z.ZodOptional<z.ZodEnum<["left", "center", "right"]>>;
verticalAlign: z.ZodOptional<z.ZodEnum<["top", "middle", "bottom"]>>;
position: z.ZodOptional<z.ZodObject<{
x: z.ZodNumber;
y: z.ZodNumber;
}, "strip", z.ZodTypeAny, {
x: number;
y: number;
}, {
x: number;
y: number;
}>>;
}, "strip", z.ZodTypeAny, {
color?: string | undefined;
bold?: boolean | undefined;
position?: {
x: number;
y: number;
} | undefined;
fontFamily?: string | undefined;
fontSize?: number | undefined;
outlineColor?: string | undefined;
outlineWidth?: number | undefined;
align?: "center" | "left" | "right" | undefined;
verticalAlign?: "top" | "middle" | "bottom" | undefined;
}, {
color?: string | undefined;
bold?: boolean | undefined;
position?: {
x: number;
y: number;
} | undefined;
fontFamily?: string | undefined;
fontSize?: number | undefined;
outlineColor?: string | undefined;
outlineWidth?: number | undefined;
align?: "center" | "left" | "right" | undefined;
verticalAlign?: "top" | "middle" | "bottom" | undefined;
}>>;
}, "strip", z.ZodTypeAny, {
id: string;
text: string;
startMs: number;
endMs: number;
audio?: string | undefined;
style?: {
color?: string | undefined;
bold?: boolean | undefined;
position?: {
x: number;
y: number;
} | undefined;
fontFamily?: string | undefined;
fontSize?: number | undefined;
outlineColor?: string | undefined;
outlineWidth?: number | undefined;
align?: "center" | "left" | "right" | undefined;
verticalAlign?: "top" | "middle" | "bottom" | undefined;
} | undefined;
}, {
id: string;
text: string;
startMs: number;
endMs: number;
audio?: string | undefined;
style?: {
color?: string | undefined;
bold?: boolean | undefined;
position?: {
x: number;
y: number;
} | undefined;
fontFamily?: string | undefined;
fontSize?: number | undefined;
outlineColor?: string | undefined;
outlineWidth?: number | undefined;
align?: "center" | "left" | "right" | undefined;
verticalAlign?: "top" | "middle" | "bottom" | undefined;
} | undefined;
}>, "many">>;
export: z.ZodObject<{
container: z.ZodString;
videoCodec: z.ZodString;
crf: z.ZodOptional<z.ZodNumber>;
preset: z.ZodOptional<z.ZodString>;
audioCodec: z.ZodString;
audioBitrate: z.ZodOptional<z.ZodString>;
outFile: z.ZodOptional<z.ZodString>;
}, "strip", z.ZodTypeAny, {
container: string;
videoCodec: string;
audioCodec: string;
crf?: number | undefined;
preset?: string | undefined;
audioBitrate?: string | undefined;
outFile?: string | undefined;
}, {
container: string;
videoCodec: string;
audioCodec: string;
crf?: number | undefined;
preset?: string | undefined;
audioBitrate?: string | undefined;
outFile?: string | undefined;
}>;
}, "strip", z.ZodTypeAny, {
version: string;
project: {
id: string;
name: string;
};
settings: {
fps: number;
resolution: {
width: number;
height: number;
};
pixelFormat: string;
sampleRate: number;
channels: number;
timebase: string;
};
assets: {
id: string;
type: "image" | "audio" | "video";
uri: string;
fps?: number | undefined;
durationMs?: number | undefined;
}[];
timeline: {
tracks: {
id: string;
type: "audio" | "video" | "subtitle";
clips: {
id: string;
durationMs: number;
assetId: string;
startMs: number;
inMs: number;
speed?: number | undefined;
transform?: {
anchor?: "center" | "topleft" | "topright" | "bottomleft" | "bottomright" | undefined;
scale?: number | undefined;
rotate?: number | undefined;
position?: {
x: number;
y: number;
} | undefined;
fit?: "contain" | "cover" | "stretch" | undefined;
} | undefined;
effects?: {
name: string;
params?: Record<string, unknown> | undefined;
}[] | undefined;
filters?: {
name: string;
params?: Record<string, unknown> | undefined;
}[] | undefined;
transitionIn?: {
name: "xfade" | "fade" | "wipeleft" | "wiperight" | "wipeup" | "wipedown" | "slideleft" | "slideright" | "slideup" | "slidedown" | "circlecrop" | "rectcrop" | "distance" | "fadeblack" | "fadewhite" | "radial" | "smoothleft" | "smoothright" | "smoothup" | "smoothdown" | "circleopen" | "circleclose" | "vertopen" | "vertclose" | "horzopen" | "horzclose" | "dissolve" | "pixelize" | "diagtl" | "diagtr" | "diagbl" | "diagbr";
durationMs: number;
params?: Record<string, unknown> | undefined;
} | undefined;
transitionOut?: {
name: "xfade" | "fade" | "wipeleft" | "wiperight" | "wipeup" | "wipedown" | "slideleft" | "slideright" | "slideup" | "slidedown" | "circlecrop" | "rectcrop" | "distance" | "fadeblack" | "fadewhite" | "radial" | "smoothleft" | "smoothright" | "smoothup" | "smoothdown" | "circleopen" | "circleclose" | "vertopen" | "vertclose" | "horzopen" | "horzclose" | "dissolve" | "pixelize" | "diagtl" | "diagtr" | "diagbl" | "diagbr";
durationMs: number;
params?: Record<string, unknown> | undefined;
} | undefined;
}[];
muted?: boolean | undefined;
opacity?: number | undefined;
}[];
mix?: {
ducking?: {
id: string;
musicTrackId: string;
dialogTrackId: string;
params?: {
ratio?: number | undefined;
threshold?: number | undefined;
attackMs?: number | undefined;
releaseMs?: number | undefined;
musicPreGain?: number | undefined;
} | undefined;
}[] | undefined;
} | undefined;
};
export: {
container: string;
videoCodec: string;
audioCodec: string;
crf?: number | undefined;
preset?: string | undefined;
audioBitrate?: string | undefined;
outFile?: string | undefined;
};
subtitles?: {
id: string;
text: string;
startMs: number;
endMs: number;
audio?: string | undefined;
style?: {
color?: string | undefined;
bold?: boolean | undefined;
position?: {
x: number;
y: number;
} | undefined;
fontFamily?: string | undefined;
fontSize?: number | undefined;
outlineColor?: string | undefined;
outlineWidth?: number | undefined;
align?: "center" | "left" | "right" | undefined;
verticalAlign?: "top" | "middle" | "bottom" | undefined;
} | undefined;
}[] | undefined;
}, {
version: string;
project: {
id: string;
name: string;
};
settings: {
fps: number;
resolution: {
width: number;
height: number;
};
pixelFormat: string;
sampleRate: number;
channels: number;
timebase: string;
};
assets: {
id: string;
type: "image" | "audio" | "video";
uri: string;
fps?: number | undefined;
durationMs?: number | undefined;
}[];
timeline: {
tracks: {
id: string;
type: "audio" | "video" | "subtitle";
clips: {
id: string;
durationMs: number;
assetId: string;
startMs: number;
inMs: number;
speed?: number | undefined;
transform?: {
anchor?: "center" | "topleft" | "topright" | "bottomleft" | "bottomright" | undefined;
scale?: number | undefined;
rotate?: number | undefined;
position?: {
x: number;
y: number;
} | undefined;
fit?: "contain" | "cover" | "stretch" | undefined;
} | undefined;
effects?: {
name: string;
params?: Record<string, unknown> | undefined;
}[] | undefined;
filters?: {
name: string;
params?: Record<string, unknown> | undefined;
}[] | undefined;
transitionIn?: {
name: "xfade" | "fade" | "wipeleft" | "wiperight" | "wipeup" | "wipedown" | "slideleft" | "slideright" | "slideup" | "slidedown" | "circlecrop" | "rectcrop" | "distance" | "fadeblack" | "fadewhite" | "radial" | "smoothleft" | "smoothright" | "smoothup" | "smoothdown" | "circleopen" | "circleclose" | "vertopen" | "vertclose" | "horzopen" | "horzclose" | "dissolve" | "pixelize" | "diagtl" | "diagtr" | "diagbl" | "diagbr";
durationMs: number;
params?: Record<string, unknown> | undefined;
} | undefined;
transitionOut?: {
name: "xfade" | "fade" | "wipeleft" | "wiperight" | "wipeup" | "wipedown" | "slideleft" | "slideright" | "slideup" | "slidedown" | "circlecrop" | "rectcrop" | "distance" | "fadeblack" | "fadewhite" | "radial" | "smoothleft" | "smoothright" | "smoothup" | "smoothdown" | "circleopen" | "circleclose" | "vertopen" | "vertclose" | "horzopen" | "horzclose" | "dissolve" | "pixelize" | "diagtl" | "diagtr" | "diagbl" | "diagbr";
durationMs: number;
params?: Record<string, unknown> | undefined;
} | undefined;
}[];
muted?: boolean | undefined;
opacity?: number | undefined;
}[];
mix?: {
ducking?: {
id: string;
musicTrackId: string;
dialogTrackId: string;
params?: {
ratio?: number | undefined;
threshold?: number | undefined;
attackMs?: number | undefined;
releaseMs?: number | undefined;
musicPreGain?: number | undefined;
} | undefined;
}[] | undefined;
} | undefined;
};
export: {
container: string;
videoCodec: string;
audioCodec: string;
crf?: number | undefined;
preset?: string | undefined;
audioBitrate?: string | undefined;
outFile?: string | undefined;
};
subtitles?: {
id: string;
text: string;
startMs: number;
endMs: number;
audio?: string | undefined;
style?: {
color?: string | undefined;
bold?: boolean | undefined;
position?: {
x: number;
y: number;
} | undefined;
fontFamily?: string | undefined;
fontSize?: number | undefined;
outlineColor?: string | undefined;
outlineWidth?: number | undefined;
align?: "center" | "left" | "right" | undefined;
verticalAlign?: "top" | "middle" | "bottom" | undefined;
} | undefined;
}[] | undefined;
}>;
export type VideoProjectValidated = z.infer<typeof zVideoProject>;
export declare function validateProject(json: unknown): VideoProjectValidated;
export declare function hasLibass(ffmpegBin?: string): boolean;
export type SubtitleStrategy = 'auto' | 'ass' | 'srt' | 'drawtext';
export interface CompileOptions {
ffmpegBin?: string;
workingDir?: string;
subtitleStrategy?: SubtitleStrategy;
subtitlesFileName?: string;
outFile?: string;
}
export interface CompileResult {
cmd: string;
args: string[];
filterGraph: string;
extraFiles?: Array<{
path: string;
content: string;
}>;
ffmpegBin: string;
}
export declare function compileToFfmpeg(project: VideoProjectValidated, opts?: CompileOptions): Promise<CompileResult>;
export declare function runFfmpeg(compiled: CompileResult, writeFiles?: boolean): Promise<number>;
export declare function escapeDrawtextText(s: string): string;
/**
* 动态获取媒体文件的真实时长(秒)
* 使用多种方法,优先使用纯 JavaScript 库,避免依赖外部工具
* @param filePath 媒体文件路径
* @returns 媒体文件的真实时长(秒),如果获取失败返回 null
*/
export declare function getMediaDuration(filePath: string): Promise<number | null>;
/**
* 检查视频文件是否包含音频轨道
* @param filePath 视频文件路径
* @returns Promise<boolean> 如果包含音频轨道返回true,否则返回false
*/
export declare function checkVideoHasAudio(filePath: string): Promise<boolean>;
export type CameraMotion = 'zoom_in' | 'zoom_out' | 'zoom_in_left_top' | 'zoom_in_right_top' | 'zoom_in_left_bottom' | 'zoom_in_right_bottom' | 'zoom_out_left_top' | 'zoom_out_right_top' | 'zoom_out_left_bottom' | 'zoom_out_right_bottom' | 'pan_up' | 'pan_down' | 'pan_left' | 'pan_right' | 'static';
export declare function compileKenBurnsMotion(imagePath: string, duration: number, camera_motion?: CameraMotion, opts?: {
fps?: number;
width?: number;
height?: number;
zoomRange?: [number, number];
panRange?: [number, number];
output?: string;
}): Promise<string>;
//# sourceMappingURL=videokit.d.ts.map