使用node.js 遍历判断本地文件夹内所有视频的总时长

作为一名自学者,经常会把视频下载到本地来看,但是呢,又不知道总时长是多少。

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);
});


最终就是,可以读取一个大文件夹下里面的视频总长,不管里面有多少个子文件夹。

在这里插入图片描述
在这里插入图片描述

Node.js中,遍历字典有多种方法可以实现。以下是几种常见的遍历字典的方式: 1. 使用for...in循环:使用for...in循环可以遍历一个对象的所有可枚举属性。通过遍历对象的属性名,我们可以访问到字典中的每一个键和对应的值。例如: ```javascript const dict = {a: 1, b: 2, c: 3}; for (const key in dict) { console.log(`键: ${key},值: ${dict[key}`); } ``` 这将输出字典中每一个键和对应的值。 2. 使用Object.keys()方法:Object.keys()方法返回一个由对象的可枚举属性组成的数组。我们可以使用forEach()或for...of循环来遍历这个数组,然后通过字典的键来获取对应的值。例如: ```javascript const dict = {a: 1, b: 2, c: 3}; Object.keys(dict).forEach((key) => { console.log(`键: ${key},值: ${dict[key}`); }); ``` 3. 使用Object.entries()方法:Object.entries()方法返回一个包含对象所有可枚举属性的键值对数组。我们可以使用forEach()或for...of循环来遍历这个数组,然后通过解构赋值获取键和值。例如: ```javascript const dict = {a: 1, b: 2, c: 3}; Object.entries(dict).forEach(([key, value]) => { console.log(`键: ${key},值: ${value}`); }); ``` 这些方法都可以帮助你在Node.js遍历字典,并访问到每一个键和对应的值。具体使用哪种方法取决于你的需求和个人喜好。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [NodeJs - for循环的几种遍历方式](https://blog.csdn.net/Zong_0915/article/details/127673016)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值