Files
gui-video-clipper/src/lib/bindings/mediaAnalysis.ts

65 lines
1.6 KiB
TypeScript

import { invoke, Channel } from '@tauri-apps/api/core';
export interface ThumbnailSpritesheet {
filePath: string;
startIndex: number;
count: number;
thumbWidth: number;
thumbHeight: number;
columns: number;
intervalSeconds: number;
}
export interface WaveformTiers {
/** ~2,000 peaks — overview for full-duration view */
tier0: number[];
/** ~10,000 peaks — moderate zoom */
tier1: number[];
/** All extracted peaks — deep zoom */
tier2: number[];
}
export async function extractKeyframes(filePath: string): Promise<number[]> {
return invoke<number[]>('extract_keyframes', { filePath });
}
export async function extractWaveformTiers(
filePath: string,
duration: number,
onProgress?: (pct: number) => void
): Promise<WaveformTiers> {
const channel = new Channel<number>();
if (onProgress) {
channel.onmessage = onProgress;
}
return invoke<WaveformTiers>('extract_waveform_tiers', {
filePath,
duration,
onProgress: channel,
});
}
export async function extractThumbnails(
filePath: string,
duration: number
): Promise<ThumbnailSpritesheet[]> {
return invoke<ThumbnailSpritesheet[]>('extract_thumbnails', {
filePath,
duration,
});
}
export async function cleanupThumbnails(paths: string[]): Promise<void> {
return invoke<void>('cleanup_thumbnails', { paths });
}
export async function checkEmbeddedSubtitles(
filePath: string
): Promise<string | null> {
return invoke<string | null>('check_embedded_subtitles', { filePath });
}
export async function listSystemFonts(): Promise<string[]> {
return invoke<string[]>('list_system_fonts');
}