import type { PortableTool } from "../portable-tool.js";
export declare const VIDEO_MERGE_TOOL_NAME: "video_merge";
export interface VideoMergeClip {
    video: string;
    audio?: string;
    trimStart?: number;
    trimEnd?: number;
}
export interface VideoMergeToolParams {
    clips: VideoMergeClip[];
    transition?: string;
    transitionDuration?: number;
    subtitles?: string;
    bgm?: string;
    bgmVolume?: number;
    outputResolution?: string;
    outputFps?: number;
}
export declare const VIDEO_MERGE_TOOL_SCHEMA: {
    readonly type: "object";
    readonly properties: {
        readonly clips: {
            readonly type: "array";
            readonly items: {
                readonly type: "object";
                readonly properties: {
                    readonly video: {
                        readonly type: "string";
                        readonly description: "Video URL or file path. MUST be publicly accessible HTTP/HTTPS URL. Use file_upload tool first if local file.";
                    };
                    readonly audio: {
                        readonly type: "string";
                        readonly description: "Narration audio file path (from TTS).";
                    };
                    readonly trimStart: {
                        readonly type: "number";
                        readonly description: "Trim start in seconds (default 0).";
                    };
                    readonly trimEnd: {
                        readonly type: "number";
                        readonly description: "Trim end in seconds (default: full).";
                    };
                };
                readonly required: readonly ["video"];
            };
            readonly minItems: 2;
            readonly description: "Array of video clips to merge, in order.";
        };
        readonly transition: {
            readonly type: "string";
            readonly description: "Transition effect: 'crossfade' (default), 'fade', 'wipeleft', 'cut', 'dissolve', etc.";
        };
        readonly transitionDuration: {
            readonly type: "number";
            readonly description: "Transition duration in seconds (0.1-2.0, default 0.5).";
        };
        readonly subtitles: {
            readonly type: "string";
            readonly description: "Path to SRT subtitle file to burn-in.";
        };
        readonly bgm: {
            readonly type: "string";
            readonly description: "Background music file path.";
        };
        readonly bgmVolume: {
            readonly type: "number";
            readonly description: "BGM volume (0.0-1.0, default 0.15).";
        };
        readonly outputResolution: {
            readonly type: "string";
            readonly description: "Output resolution: '1920x1080', '1080x1920', etc. Default: auto.";
        };
        readonly outputFps: {
            readonly type: "number";
            readonly description: "Output FPS (default 30).";
        };
    };
    readonly required: readonly ["clips"];
};
export interface VideoMergeResult {
    localPath: string;
    servePath: string;
    durationSec: number;
    clipCount: number;
    mediaUrls: string[];
}
/** Deps injected by the host runtime for video merging. */
export interface VideoMergeToolDeps {
    /**
     * Merge video clips via the configured backend (ffmpeg, relay, etc.).
     * The host handles resolution normalization, transition rendering,
     * subtitle burn-in, BGM mixing, and local storage.
     */
    mergeVideos(params: {
        clips: VideoMergeClip[];
        transition?: string;
        transitionDuration?: number;
        subtitles?: string;
        bgm?: string;
        bgmVolume?: number;
        outputResolution?: string;
        outputFps?: number;
    }): Promise<VideoMergeResult>;
}
export declare function createVideoMergeTool(deps: VideoMergeToolDeps): PortableTool<VideoMergeToolParams>;
