mirror of
https://github.com/KevinMidboe/immich.git
synced 2025-10-29 17:40:28 +00:00
* support for two-pass transcoding * added max bitrate and thread to transcode api * admin page setting desc+bitrate and thread options * Update web/src/lib/components/admin-page/settings/setting-input-field.svelte Co-authored-by: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com> * Update web/src/lib/components/admin-page/settings/setting-input-field.svelte Co-authored-by: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com> * two-pass slider, `crf` and `threads` as numbers * updated and added transcode tests * refactored `getFfmpegOptions` * default `threads`, `maxBitrate` now 0, more tests * vp9 constant quality mode * fixed nullable `crf` and `threads` * fixed two-pass slider, added apiproperty * optional `desc` for `SettingSelect` * disable two-pass if settings are incompatible * fixed test * transcode interface --------- Co-authored-by: Michel Heusschen <59014050+michelheusschen@users.noreply.github.com>
57 lines
1.3 KiB
TypeScript
57 lines
1.3 KiB
TypeScript
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 TranscodeOptions {
|
|
outputOptions: string[];
|
|
twoPass: boolean;
|
|
}
|
|
|
|
export interface IMediaRepository {
|
|
// image
|
|
extractThumbnailFromExif(input: string, output: string): Promise<void>;
|
|
resize(input: string | Buffer, output: string, options: ResizeOptions): Promise<void>;
|
|
crop(input: string, options: CropOptions): Promise<Buffer>;
|
|
|
|
// video
|
|
extractVideoThumbnail(input: string, output: string, size: number): Promise<void>;
|
|
probe(input: string): Promise<VideoInfo>;
|
|
transcode(input: string, output: string, options: TranscodeOptions): Promise<void>;
|
|
}
|