export const IMediaRepository = 'IMediaRepository'; export interface ResizeOptions { size: number; format: 'webp' | 'jpeg'; } export interface VideoStreamInfo { height: number; width: number; rotation: number; codecName?: string; codecType?: string; frameCount: number; } export interface AudioStreamInfo { codecName?: string; codecType?: string; } export interface VideoFormat { formatName?: string; formatLongName?: string; duration: number; } export interface VideoInfo { format: VideoFormat; videoStreams: VideoStreamInfo[]; audioStreams: AudioStreamInfo[]; } export interface CropOptions { top: number; left: number; width: number; height: number; } export interface IMediaRepository { // image extractThumbnailFromExif(input: string, output: string): Promise; resize(input: string | Buffer, output: string, options: ResizeOptions): Promise; crop(input: string, options: CropOptions): Promise; // video extractVideoThumbnail(input: string, output: string, size: number): Promise; probe(input: string): Promise; transcode(input: string, output: string, options: any): Promise; }