// utils/getVideoDuration.ts export async function getVideoDuration(file: File): Promise { return new Promise((resolve, reject) => { // create an object URL for the file const url = URL.createObjectURL(file); const video = document.createElement('video'); // Make sure it doesn't try to load UI, just metadata video.preload = 'metadata'; video.src = url; const cleanup = () => { URL.revokeObjectURL(url); video.removeAttribute('src'); video.load(); }; video.addEventListener('loadedmetadata', () => { // duration in seconds (float) const duration = video.duration; cleanup(); // Some encodings return Infinity — guard that if (!isFinite(duration) || duration <= 0) { return reject(new Error('Could not determine duration')); } resolve(Math.round(duration)); // return integer seconds }); video.addEventListener('error', (e) => { cleanup(); reject(new Error('Error reading video metadata')); }); }); }