首页 > 解决方案 > nodejs获取视频持续时间

问题描述

我已经尝试了很多年了,但我没有取得任何进展。我在谷歌https://gist.github.com/Elements-/cf063254730cd754599e上找到了这个 ,它正在运行,但是当我把它放在一个函数中并尝试将它与我的代码一起使用时,它没有运行。

代码:

fs.readdir(`${__dirname}/data`, (err, files) => {
        if (err) return console.error(`[ERROR] ${err}`);

        files.forEach(file => {
            if (file.endsWith(".mp4")) {
                
                // getVideoDuration(`${__dirname}/data/${file}`)
                group = new Group(file.split(".")[0], file, null, getVideoDuration(`${__dirname}/data/${file}`), 0);
                groups.push(group);
            }
        });

        console.log(groups);
    });

function getVideoDuration(video) {
    var buff = new Buffer.alloc(100);
    fs.open(video, 'r', function (err, fd) {
        fs.read(fd, buff, 0, 100, 0, function (err, bytesRead, buffer) {
            var start = buffer.indexOf(new Buffer.from('mvhd')) + 17;
            var timeScale = buffer.readUInt32BE(start, 4);
            var duration = buffer.readUInt32BE(start + 4, 4);
            var movieLength = Math.floor(duration / timeScale);

            console.log('time scale: ' + timeScale);
            console.log('duration: ' + duration);
            console.log('movie length: ' + movieLength + ' seconds');
            return movieLength;
        });
    });
}

输出:

[
  Group {
    _name: 'vid',
    _video: 'vid.mp4',
    _master: null,
    _maxTime: undefined,
    _currentTime: 0
  },
  Group {
    _name: 'vid2',
    _video: 'vid2.mp4',
    _master: null,
    _maxTime: undefined,
    _currentTime: 0
  }
]
time scale: 153600
duration: 4636416
movie length: 30 seconds
time scale: 153600
duration: 4636416
movie length: 30 seconds

它正确记录信息,但返回未定义

标签: javascripthtmlnode.js

解决方案


这似乎是很多额外的工作,没有什么好处,所以我将参考get-video-duration https://www.npmjs.com/package/get-video-duration,它可以很好地获取任何视频文件的持续时间秒 分 和 小时


推荐阅读