首页 > 其他分享 >如何使用mediainfo.js来获取视频信息

如何使用mediainfo.js来获取视频信息

时间:2024-09-04 17:47:05浏览次数:11  
标签:视频 return MediaInfo js mediainfo file fileinput

如何使用mediainfo.js来获取视频信息

安装

首先是安装改插件,这里GitHub中有很多介绍,这里介绍常用的node引入和CDN引入

Node.js 在npm上安装mediainfo.js

$ npm install -g mediainfo.js
后在需要的文件中
import MediaInfo from "mediainfo.js";
这样输出MediaInfo发现是如下方法则为引入成功:

ƒ MediaInfoFactory(opts, callback, errorCallback) { if (options === void 0) { options = {}; } if (callback === undefined) { return new Promise(function (resolve, reject) { …

CDN:
<script type="text/javascript" src="https://unpkg.com/mediainfo.js/dist/mediainfo.min.js"></script>
或者
<script type="text/javascript" src="https://unpkg.com/mediainfo.js/dist/mediainfo.js"></script>
同理插入script标签后输出MediaInfo发现是如下方法则为引入成功:

ƒ MediaInfoFactory(options, callback, errCallback) { if (options === void 0) { options = {}; } if (callback === undefined) { return new Promise(function (resolve, reject) { …

使用

在刚刚的输出中我们看到了这个库返回的是一个方法明子为MediaInfoFactory(媒体信息工厂)。从命名中可以看到是一个工厂函数来用来创建mediainfo实例的,且需要传入三个参数(opts, callback, errorCallback)
分别是选项,回调函数,失败回调函数。

opts = { chunkSize: 256*1024, coverData: false, format: 'object' }

chunkSize:使用的区块大小(以字节为单位)analyzeData
coverData:是否提取二进制封面数据(Base64 编码)
format:结果值的格式(选项:object``JSON``XML``HTML``text)
locateFile:用于覆盖位置的可选回调函数。必须返回文件的 URL/路径。如果您想从自定义位置提供服务,则非常有用。MediaInfo.wasmMediaInfoModule.wasm (url, scriptDirectory) => pathToFile
如果未给出回调,则返回 Promise。

这里直接创建实例

MediaInfo({ format: 'JSON' }, (mediainfo) => {
            fileinput.addEventListener('change', ()=>onChangeFile(mediainfo))
        })

同时在html(或者模板中)
创建
<input type="file" id="fileinput">

const fileinput = document.getElementById('fileinput')
以确保监听生效
那么onChangeFile方法里面又应该写什么呢

<!DOCTYPE html>
<html lang="en">
<input type="file" id="fileinput">
<p id="output"></p>

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>qqq</title>
</head>

<body>
    <script type="text/javascript" src="https://unpkg.com/mediainfo.js/dist/mediainfo.js"></script>
    <script>
        console.log(MediaInfo);
        const fileinput = document.getElementById('fileinput')
        const output = document.getElementById('output')
        function get_file_info(mediainfo, file) {
            let getSize = () => file.size
            let readChunk = (chunkSize, offset) => {
                return 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) => {
                    console.log(result);
                    output.innerHTML = `${result}`
                })
                .catch((error) => {
                    output.value = `${output.value}\n\nAn error occured:\n${error.stack}`
                })
        }
        async function onChangeFile(mediainfo) {
            if (fileinput.files.length >= 2) {
                for (let i = 0; i < fileinput.files.length; i++) {
                    file = fileinput.files[i]
                    if (file) {
                        await get_file_info(mediainfo, file)
                        if (i + 1 == fileinput.files.length) {
                            return
                        }
                    }
                }
            } else {
                file = fileinput.files[0]
                if (file) {
                    await get_file_info(mediainfo, file)
                }
            }
        }

        MediaInfo({ format: 'JSON' }, (mediainfo) => {
            fileinput.addEventListener('change', () => onChangeFile(mediainfo))
        })
    </script>
</body>
</html>

标签:视频,return,MediaInfo,js,mediainfo,file,fileinput
From: https://www.cnblogs.com/Leason12138/p/18397043

相关文章

  • Nextjs项目中轻松添加深色和浅色主题支持
    在React或Next.js项目中实现深色和浅色主题的切换功能其实并不复杂。通过一些简单的步骤,就可以让用户在浏览网页时自由选择他们喜欢的显示模式,无论是经典的浅色主题还是更护眼的深色主题。下面我将介绍如何轻松添加这一功能。确保你已经在项目中使用了React或Next.js。如果你是初......
  • 深入理解JavaScript类与对象:揭秘类字段和静态属性的妙用,js静态属性和实例属性
    在深入理解JaScript类与对象的过程中,类字段和静态属性是两个关键的概念,掌握它们的用法可以让你在实际开发中更加得心应手。虽然JaScript在ES6之前并没有类的概念,但通过ES6及以后的版本,引入了类语法糖,使得我们能够更直观地定义和使用类。类字段是指在类中直接定义的属性,而不是在构......
  • 基于jsp校园拼餐系统设计与实现的计算机毕设
    校园拼餐系统设计与实现摘要信息技术的飞速发展,特别是互联网的广泛普及,为“拼餐”信息的发布、检索以及“拼餐”条件的协商提供了中介平台,在百度上进行搜索,可以发现,几乎每个大城市都有自己的卖家(拼餐)网,“拼”作为一种崭新的生活方式已逐渐被人们所接受,本文针对拼餐,以方便人们进行......
  • 开源的three.js cesium.js 各种案例
    Three.js基础和标准功能学习模型加载-使用three.js加载不同格式的模型。轮廓光后期处理得各种效果。几十款着色器如智慧城市扫光,结合各种shaderToy.等粒子,各种应用场景效果案例。还有小米su7,等优美的高级案例,还有比较火得3d地图学习。集成各种相关得应......
  • uniapp js 数独小游戏 写死的简单数独demo(优化完成) 数独 4.0
    <template> <viewclass="wrap">  <viewclass="timeGame">   <textclass="time">时间{{gameTime}}</text>  </view>  <viewclass="listWrap">   <view    ......
  • 【学习】【JavaScript 安全】JS代码混淆技术
    一、布局混淆1.1删除无效代码1.2标识符重命名二、数据混淆2.1数字混淆2.1.1进制转换2.1.2数学技巧2.1.3数字拆解2.2布尔混淆2.2.1类型转换2.2.2构造随机数2.3字符串混淆2.4undefined和null混淆......
  • Linux 安装nodejs环境
    文章目录Node.js简介Node.js的核心特性Node.js的生态系统Node.js的模块系统部署下载Node.js预编译二进制包上传到Linux服务器并解压配置环境变量验证安装部署在下边,我先对nodejs进行一些介绍,大家了解一下Node.js简介Node.js是一个基于ChromeV8引擎的JavaScript......
  • AI绘画Stable Diffusion:从新手到高手,漫画小说创收不是梦,几条视频变现几k(Ai工具+教程)
    许多人都被大量的小说推文项目所淹没,看着别人收益高、账号做得好,很多人讲述这个项目时,要么不透露具体AI工具名称,要么不提供推文授权渠道,让人无从下手,干着急。今天,向阳将带给大家一期全新的纯AI制作小说推文项目,这个新玩法将让你轻松掌握保姆级的详细教程。在本文的结尾......
  • Android终端如何快速接入GB28181平台实现实时音视频回传
    技术背景GB28181是由中国国家标准委员会发布的基于IP网络的安防视频监控标准。Android平台GB28181设备对接模块,主要涉及到视频监控领域,可实现不具备国标音视频能力的Android终端,通过平台注册接入到现有的GB/T28181—2016服务,可用于如执法记录仪、智能安全帽、智能监控、智慧零售、......
  • JSP教务管理系统-教室管理me8sw(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统功能:学生,教师,教室信息,教室类型,新建教室,教室预约,班级,课表信息,排课信息开题报告内容一、项目背景随着高校教学资源的日益丰富和教学活动的复杂化,教......