mediainfo.js获取视频详细信息,js获取视频帧数

需求:上传视频的时候需要知道该视频的帧数等信息,input的file直接读取是不能读取帧数的

方式:通过引入mediainfo.js来获取视频的帧率和视频的总时长,用帧率*时长得出总帧数

栗子:mediainfo.js获取视频详细信息,js获取视频帧数_第1张图片

上面输出格式是 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

 

 

mediainfo 在线使用地址

demo下载地址(这个demo需要放到http服务中才能正确使用)

你可能感兴趣的:(随笔,获取视频帧数,mediainfo获取视频信息)