UNPKG

video-duration

Version:

Get total video duration in console

75 lines (66 loc) 1.88 kB
'use strict'; const { getVideoDurationInSeconds } = require('get-video-duration'); const fs = require('fs'); const path = require('path'); const getFiles = require('./getfiles'); const wrench = require('wrench'); const VIDEO_EXTS = ['.mkv', '.mp4', '.avi', '.mov']; async function getDirDuration(dir) { if (fs.statSync(dir).isFile()) { if (!VIDEO_EXTS.includes(path.extname(dir))) { return 0; } try { const duration = await getVideoDurationInSeconds(dir); return duration; } catch (err) { return 0; } } const files = wrench .readdirSyncRecursive(dir) .filter(filename => VIDEO_EXTS.includes(path.extname(filename))); // const files = await getFiles(dir); let total = 0; for (let i = 0; i < files.length; i++) { const file = path.resolve(dir, files[i]); try { const duration = await getVideoDurationInSeconds(file); total += duration; } catch (err) {} } return total; } function pad(count) { let s = count + ''; if (s.length === 1) { s = `0${s}`; } return s; } function formatSeconds(count) { const hours = Math.floor(count / 60 / 60); count = count - hours * 60 * 60; const minutes = Math.floor(count / 60); count = count - minutes * 60; const seconds = Math.floor(count); return `${pad(hours)}:${pad(minutes)}:${pad(seconds)}`; } async function run(dir) { const dirs = fs .readdirSync(dir) .sort((a, b) => { return parseInt(a) > parseInt(b) ? 1 : -1; }) .filter( dir => fs.statSync(dir).isDirectory() || VIDEO_EXTS.includes(path.extname(dir)) ); for (let i = 0; i < dirs.length; i++) { const name = dirs[i]; const dirname = path.resolve(dir, name); const duration = await getDirDuration(dirname); console.log(path.basename(name), ' --- ', formatSeconds(duration)); } } module.exports = run;