export type VideoFrameExtractionKind = "first" | "last" | "current"; const LAST_FRAME_EPSILON_SECONDS = 0.05; function finiteNonNegative(value: unknown, fallback = 0) { const parsed = Number(value); return Number.isFinite(parsed) ? Math.max(0, parsed) : fallback; } export function getVideoFrameExtractionTarget( kind: VideoFrameExtractionKind, currentTimeSeconds: number, durationSeconds: number, ) { const duration = finiteNonNegative(durationSeconds); const lastFrameTime = Math.max(0, duration - LAST_FRAME_EPSILON_SECONDS); if (kind === "first") return 0; if (kind === "last") return lastFrameTime; return Math.min(lastFrameTime, finiteNonNegative(currentTimeSeconds)); } export function getVideoFrameExtractionCopy(kind: VideoFrameExtractionKind) { if (kind === "first") return { alt: "视频首帧", title: "首帧" }; if (kind === "last") return { alt: "视频尾帧", title: "尾帧" }; return { alt: "视频截图", title: "截图" }; }