27 lines
977 B
TypeScript
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: "截图" };
|
|
}
|