需求:上传视频的时候需要知道该视频的帧数等信息,input的file直接读取是不能读取帧数的
方式:通过引入mediainfo.js来获取视频的帧率和视频的总时长,用帧率*时长得出总帧数
栗子:
上面输出格式是 text 我们可以根据需要将格式设为 json 对象,这样就能获取想要的信息了
//这是text 格式
MediaInfo({ format: 'text' }, (mediainfo) => {
fileinput.addEventListener('change', () => onChangeFile(mediainfo))
})
//可以改为 json 对象格式
MediaInfo({ format: 'object' }, (mediainfo) => {
fileinput.addEventListener('change', () => onChangeFile(mediainfo))
})
然后在 get_file_info 方法中将需要的信息获取出来使用就可以了
function get_file_info(mediainfo, 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 mediainfo
.analyzeData(getSize, readChunk)
.then((result) => {
// 如果是object,可以拿到结果对象
let res = result.media.track[1];
console.log(res)
//获取帧数和总时长
console.log(res.FrameRate,res.Duration);
})
.catch((error) => {
output.value = `${output.value}\n\nAn error occured:\n${error.stack}`
})
}
注意,当传入.avi格式时是不能获取到帧率的,因为我的视频格式统一是25帧率,所以我给了一个默认值25。详细信息见官网的使用
这个demo需要放到http服务中访问才能正确使用,或者使用CDN在线地址引入mediainfo.js
<script src="https://unpkg.com/mediainfo.js/dist/mediainfo.min.js" ></script>