ai-chatbot/lib/video-canvas/video-frame-extraction.ts

27 lines
977 B
TypeScript

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: "截图" };
}