Malunan个人博客|IT技术博客 Malunan个人博客|IT技术博客
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
    • HTML
    • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 脚本
  • 剪辑
关于
  • 网站
  • 常用的前端轮子
  • 工具网站
  • 软件工具
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Lunan Ma

升职加薪搞钱~
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
    • HTML
    • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 脚本
  • 剪辑
关于
  • 网站
  • 常用的前端轮子
  • 工具网站
  • 软件工具
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 技术文档

    • Git使用手册
    • Markdown使用教程
    • npm常用命令
    • 移动端兼容问题
    • 常用cmd命令
    • npm packageJson属性详解
    • yaml语言教程
    • Git修改分支名
    • javaScript-时间相加,超过24小时继续累加
    • 获取视频文件第一帧
    • 前端获取文件下载进度
    • 前端获取上传的视频图片详细信息
      • 需求
      • mediainfo.js
      • 实现
    • 解决拖拽时,如果元素内有input,无法选中文本的问题
    • css点击穿透
    • vue插槽传参
    • 谷歌浏览器的kiosk模式
    • 前台下载后台返的二进制文件流
    • css实现无缝切换跑马灯样式
    • 前端优化规范
    • 懒加载+无感删除list思路
  • GitHub技巧

  • Nodejs

  • 博客搭建

  • 脚本

  • 技术
  • 技术文档
MaLunan
2024-02-29
目录

前端获取上传的视频图片详细信息

# 需求

上传文件时,解析上传文件的详细信息
如:视频解析码率、帧率、像素大小
图片解析 像素大小、图片类型等

# mediainfo.js

mediainfo.js 是一个 JavaScript 库,用于获取媒体文件的详细信息。这个库可以用来解析音频和视频文件,提取出诸如编解码器、分辨率、帧率、时长、比特率等各种技术参数,以及一些元数据(如标题、作者、发行日期等)。

# 实现

// 下载插件
npm install mediainfo

1
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
import { getFileInfo } from '@/utils/getFileInfo.js'
getFileInfo(file).then(res=>{
    console.log(res)// 拿到详细信息
})
1
2
3
4
编辑 (opens new window)
上次更新: 2024/02/29, 15:10:43
前端获取文件下载进度
解决拖拽时,如果元素内有input,无法选中文本的问题

← 前端获取文件下载进度 解决拖拽时,如果元素内有input,无法选中文本的问题→

最近更新
01
懒加载+无感删除list思路
11-12
02
移动端兼容问题
11-12
03
前端优化规范
03-25
更多文章>
Theme by Vdoing | Copyright © 2019-2024 LuNan Ma | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式