前端获取上传的视频图片详细信息
# 需求
上传文件时,解析上传文件的详细信息
如:视频解析码率、帧率、像素大小
图片解析 像素大小、图片类型等
# mediainfo.js
mediainfo.js 是一个 JavaScript 库,用于获取媒体文件的详细信息。这个库可以用来解析音频和视频文件,提取出诸如编解码器、分辨率、帧率、时长、比特率等各种技术参数,以及一些元数据(如标题、作者、发行日期等)。
# 实现
// 下载插件
npm install mediainfo
1
2
3
2
3
// 封装
// getFileInfo.js
// 获取文件详细信息,帧率,宽高
import mediainfo from 'mediainfo.js'
export function getFileInfo(file) {
return new Promise((resolve, reject) => {
mediainfo({ format: 'object' }, (mediainfo) => {
resolve(get_file_info(mediainfo, file))
})
})
function get_file_info(mediainfos, file) {
let getSize = () => file.size
let readChunk = (chunkSize, offset) =>
new Promise((resolve, reject) => {
let reader = new FileReader()
reader.onload = (event) => {
if (event.target.error) {
reject(event.target.error)
}
resolve(new Uint8Array(event.target.result))
}
reader.readAsArrayBuffer(file.slice(offset, offset + chunkSize))
})
return new Promise((resolve, reject) => {
mediainfos
.analyzeData(getSize, readChunk)
.then((result) => {
// 如果是object,可以拿到结果对象
let res = result.media.track[1]
// 这里拿到详细信息,return出去
resolve(res)
})
.catch((error) => {
console.log(error)
// output.value = `${output.value}\n\nAn error occured:\n${error.stack}`
})
})
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import { getFileInfo } from '@/utils/getFileInfo.js'
getFileInfo(file).then(res=>{
console.log(res)// 拿到详细信息
})
1
2
3
4
2
3
4
编辑 (opens new window)
上次更新: 2024/02/29, 15:10:43