import { VideoCodec } from '@app/infra/entities'; import { Writable } from 'stream'; export const IMediaRepository = 'IMediaRepository'; export interface ResizeOptions { size: number; format: 'webp' | 'jpeg'; colorspace: string; quality: number; } export interface VideoStreamInfo { index: number; height: number; width: number; rotation: number; codecName?: string; codecType?: string; frameCount: number; isHDR: boolean; } export interface AudioStreamInfo { index: number; codecName?: string; codecType?: string; frameCount: number; } 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 TranscodeOptions { inputOptions: string[]; outputOptions: string[]; twoPass: boolean; } export interface BitrateDistribution { max: number; target: number; min: number; unit: string; } export interface VideoCodecSWConfig { getOptions(videoStream: VideoStreamInfo, audioStream: AudioStreamInfo): TranscodeOptions; } export interface VideoCodecHWConfig extends VideoCodecSWConfig { getSupportedCodecs(): Array; } export interface IMediaRepository { // image resize(input: string | Buffer, output: string, options: ResizeOptions): Promise; crop(input: string, options: CropOptions): Promise; generateThumbhash(imagePath: string): Promise; // video probe(input: string): Promise; transcode(input: string, output: string | Writable, options: TranscodeOptions): Promise; }