作为一名自学者,经常会把视频下载到本地来看,但是呢,又不知道总时长是多少。
windows自带的文件管理,只能查看一个文件夹下的视频时长。
于是我便想了很久,还借助了stack overflow,主要异步太难了。
要运行以下代码,请准备好node.js 并需要安装get-video-duration
模块
npm install get-video-duration
const fs = require('fs');
const path = require('path');
const { getVideoDurationInSeconds } = require('get-video-duration');
// 需要判断时长的大文件夹
// 注意这里的是/ 要么是\\,不能是只有一个\
const dir_path = 'C:/Users/liujiaqi/桌面/401 - Vue';
// 用来存放所有需要判断时长的视频
const video_Array = [];
// 判断文件信息
function files_stat(filepath) {
// 读取文件夹
const files = fs.readdirSync(filepath);
files.forEach(fileName => {
// 获取文件的绝对路径
let filePath = path.join(filepath, fileName);
//根据文件路径获取文件信息
let stats = fs.statSync(filePath);
if (stats.isDirectory()) {
// 如果是文件夹,则递归
files_stat(filePath);
}
// 如果是文件且后缀是MP4 则推入到视频数组中
else if (stats.isFile() && /^.*\.mp4$/.test(fileName)) {
video_Array.push(filePath);
}
});
}
files_stat(dir_path);
// 判断时长时长
function getTotals(video_Array) {
let video_ArrayPromises = video_Array.map(video =>
getVideoDurationInSeconds(video));
return Promise.all(video_ArrayPromises).then((video_time) => {
return video_time.reduce((ac, cv) => ac + cv)
})
}
getTotals(video_Array).then(total_time => {
// 四舍五入取整
total_time = Math.round(total_time);
const hours = parseInt(total_time /3600);
const minutes = parseInt(total_time % 3600 /60);
const seconds = total_time % 3600 % 60 ;
const timeStr = `视频有${hours}小时${minutes}分钟${seconds}秒`;
console.log(timeStr);
});
最终就是,可以读取一个大文件夹下里面的视频总长,不管里面有多少个子文件夹。