export interface FFmpegOptions {
    input: string;
    output: string;
    additionalArgs?: string[];
    onProgress?: (progress: number) => void;
}
export interface ConcatOptions {
    inputs: string[];
    output: string;
    onProgress?: (progress: number) => void;
}
export interface ImageToVideoOptions {
    input: string;
    output: string;
    duration: number;
    fps: number;
    resolution: string;
    onProgress?: (progress: number) => void;
}
export interface VideoTrimOptions {
    input: string;
    output: string;
    start: number;
    duration: number;
    resolution?: string;
    onProgress?: (progress: number) => void;
}
export declare class FFmpegService {
    private static instance;
    private constructor();
    /**
     * Get singleton instance
     */
    static getInstance(): FFmpegService;
    /**
     * Check if FFmpeg is installed
     */
    checkInstallation(): Promise<boolean>;
    /**
     * Convert image to video
     */
    imageToVideo(options: ImageToVideoOptions): Promise<void>;
    /**
     * Trim video
     */
    trimVideo(options: VideoTrimOptions): Promise<void>;
    /**
     * Concatenate videos
     */
    concatenate(options: ConcatOptions): Promise<void>;
    /**
     * Helper method to concatenate videos using concat list
     */
    private concatenateWithList;
    /**
     * Apply fade transition between two videos
     */
    fadeTransition(video1: string, video2: string, output: string, duration: number): Promise<void>;
    /**
     * Apply wipe transition between two videos
     */
    wipeTransition(video1: string, video2: string, output: string, duration: number, direction?: 'left' | 'right' | 'up' | 'down'): Promise<void>;
    /**
     * Apply dissolve transition between two videos
     */
    dissolveTransition(video1: string, video2: string, output: string, duration: number): Promise<void>;
    /**
     * Add audio to video
     */
    addAudio(videoPath: string, audioPath: string, outputPath: string, volume?: number): Promise<void>;
    /**
     * Mix background music with existing audio (e.g., narration)
     */
    mixBackgroundMusic(videoPath: string, musicPath: string, outputPath: string, options?: {
        musicVolume?: number;
        existingAudioVolume?: number;
        fadeIn?: number;
        fadeOut?: number;
    }): Promise<void>;
    /**
     * Add narration track to video with existing audio
     */
    addNarrationTrack(videoPath: string, narrationPath: string, outputPath: string, options?: {
        narrationVolume?: number;
        bgmVolume?: number;
        delay?: number;
        fadeIn?: number;
        fadeOut?: number;
    }): Promise<void>;
    /**
     * Add audio to video with fade in/out effects
     */
    addAudioWithFade(videoPath: string, audioPath: string, outputPath: string, volume?: number, fadeIn?: number, fadeOut?: number): Promise<void>;
    /**
     * Execute FFmpeg command
     */
    execute(command: string, args: string[], onProgress?: (progress: number) => void, stdin?: string): Promise<void>;
    /**
     * Check if video has audio stream
     */
    hasAudioStream(videoPath: string): Promise<boolean>;
    /**
     * Get video duration in seconds
     */
    private getVideoDuration;
    /**
     * Ensure output directory exists
     */
    private ensureOutputDirectory;
}
//# sourceMappingURL=ffmpeg.d.ts.map