javascript - 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
它正确记录信息,但返回未定义
解决方案
这似乎是很多额外的工作,没有什么好处,所以我将参考get-video-duration
https://www.npmjs.com/package/get-video-duration,它可以很好地获取任何视频文件的持续时间秒 分 和 小时
推荐阅读
- apache - 在 CentOS 8 上安装 nginx / apache - 无法找到匹配的 nginx / httpd
- c++ - 这个程序只接受 5 个输入,而我给出 n=8
- path - 如何在 github 操作中为 push: 和 pull_request: 共同考虑 `paths:`?
- c++ - 为什么我们实际上需要运行时多态性?
- vue.js - vue js在同一页面中重复使用组件两次
- react-native - 我在 react native 中使用 expo-video-player 时出错
- angular - Angular 7:根据数字启用和禁用按钮以填充表单字段
- hotkeys - 在 Eclipse Theia 中自动缩进和格式化代码的热键
- esp32 - 如何在 FreeRTOS 中干净利落地告诉任务终止
- python - 在 python 中对缩放分布执行 KS 测试