【nodejs】批量获取文件的时长

因为ffmpeg.ffprobe是异步的,需要使用promise同步,然后Promise.all将所有的Promise执行结果处理后返回

复制代码
  /**
   * 获取文件列表时长(同步获取返回)
   * @param {Object} fileList
   */
  async getFileDuration(fileList) {
    // 初始化
    let promises = fileList.map(file => {
      return new Promise((resolve, reject) => {
        ffmpeg.ffprobe(file, (err, data) => {
          if (err) {
            reject(`无法获取视频信息: ${err}`);
          } else {
            resolve(data.format.duration);
          }
        });
      });
    });
    
    return Promise.all(promises)
      .then(res => {
          let durationList = [];
          fileList.forEach((file, index) => {
            durationList.push({name: file, time: Math.ceil(res[index])});
          });

        return durationList;
      });
  }
复制代码

 

调用获取结果

  let duration = await Services.get('file').getFileDuration(fileList);
  console.log(fileList, duration);

 

posted @   蓝色星辰1993  阅读(101)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示