import { PREVIEW_FRAME_WIDTH } from "../constants/constants"; /** * Converts raw timeline units to the readable format. * @param units Target unit value. * @returns Time in format HH:MM:SS.FPS */ export function formatTimelineUnit(units?: number): string { if (!units) return "0"; const time = units / PREVIEW_FRAME_WIDTH; const frames = Math.trunc(time) % 60; const seconds = Math.trunc(time / 60) % 60; const minutes = Math.trunc(time / 3600) % 60; const hours = Math.trunc(time / 216000); const formattedTime = [ hours.toString(), minutes.toString(), seconds.toString(), frames.toString() ]; if (time < 60) { return `${formattedTime[3].padStart(2, "0")}f`; } if (time < 3600) { return `${formattedTime[2].padStart(1, "0")}s`; } if (time < 216000) { return `${formattedTime[1].padStart(2, "0")}:${formattedTime[2].padStart(2, "0")}`; } return `${formattedTime[0].padStart(2, "0")}:${formattedTime[1].padStart(2, "0")}:${formattedTime[2].padStart(2, "0")}`; } export function formatTimeToHumanReadable( ms: number, includeFrames = false ): string { if (!ms) return "00:00"; const fps = 60; const msPerFrame = 1000 / fps; if (ms < 1000) { if (includeFrames) { const frames = Math.floor(ms / msPerFrame); return `${frames}f`; } else { // Convert milliseconds to seconds (with one decimal place) const seconds = (ms / 1000).toFixed(1); return `${seconds}s`; } } const seconds = Math.floor(ms / 1000); if (seconds < 60) { return `${seconds}s`; } const minutes = Math.floor(seconds / 60); if (minutes < 60) { const remainingSeconds = seconds % 60; return `${minutes.toString().padStart(2, "0")}:${remainingSeconds.toString().padStart(2, "0")}`; } const hours = Math.floor(minutes / 60); const remainingMinutes = minutes % 60; const remainingSeconds = seconds % 60; return `${hours.toString().padStart(2, "0")}:${remainingMinutes.toString().padStart(2, "0")}:${remainingSeconds.toString().padStart(2, "0")}`; } export function millisecondsToHHMMSS(ms: number): string { if (ms < 0) return "00:00:00"; const totalSeconds = Math.floor(ms / 1000); const hours = Math.floor(totalSeconds / 3600); const minutes = Math.floor((totalSeconds % 3600) / 60); const seconds = totalSeconds % 60; return `${hours.toString().padStart(2, "0")}:${minutes.toString().padStart(2, "0")}:${seconds.toString().padStart(2, "0")}`; }