This is a JavaScript port of the excellent MediaInfoLib and can run directly in a browser or in Node.js. It is transpiled from C++ source code using Emscripten.
Try mediainfo.js in your browser: https://mediainfo.js.org
You can either use a CDN to include the script file directly in your page or use a JavaScript bundler like webpack.
- CDN:
<script type="text/javascript" src="https://unpkg.com/mediainfo.js/dist/mediainfo.min.js"></script> - Bundler:
npm install mediainfo.js
Be aware that mediainfo.js is a WebAssembly port of MediaInfoLib. Thus it
depends on MediaInfoModule.wasm which weighs around 2.4 MiB. The WASM
module is loaded automatically and needs to be made available from the same
location mediainfo.js is served from. This is the case for the CDN version. If
you're using a bundler, you need to take care of this yourself. There are
examples for
React/webpack
and
Angular
on how to achieve this.
Install mediainfo.js from NPM.
$ npm install -g mediainfo.jsYou can use it directly from the shell.
$ mediainfo.js /path/to/media.aviOr use it as a library.
require('mediainfo.js')().then((mediainfo) => {
// mediainfo ready…
})Create an instance of
mediainfo.
Defaults: opts = { chunkSize: 256*1024, coverData: false, format: 'object', full: false }
chunkSize: Chunk size used byanalyzeData(in bytes)coverData: Whether to extract binary cover data (Base64-encoded)format: Format of result value (choices:object,JSON,XML,HTMLortext)full: Full information display (all internal tags)locateFile: Optional callback function to overrideMediaInfo.wasmlocation. Must return URL/path to file. Helpful if you want to serveMediaInfoModule.wasmfrom a custom location.
(url, scriptDirectory) => pathToFile- Returns a Promise if no callback is given.
const MediaInfo = require('mediainfo.js')
MediaInfo(opts, callback, errorCallback)Media files can be several gigabytes in size. The preferred way is to load data
in chunks to prevent memory exhaustion. analyzeData is a helper method that
facilitates this somewhat cumbersome process.
Convenient method for analyzing a buffer chunk by chunk.
- You need to provide two callback functions. They can either return a Promise
or directly the value.
getSize()- Return total buffer size.readChunk(size, offset)- Read data chunk ofsizewithoffsetand return anUint8Array.
- Returns a Promise if no callback is given.
The mediainfo object also exposes a number of low-level methods analogous to
the
MediaInfoLib buffer methods.
close(), inform(), openBufferContinue(data, size),
openBufferContinueGotoGet(), openBufferFinalize(),
openBufferInit(size, offset)
Install Emscripten preferably using Emscripten SDK.
$ git clone https://github.com/emscripten-core/emsdk.git
$ cd emsdk
$ ./emsdk install latest
$ ./emsdk activate latest
$ source ./emsdk_env.sh
$ export PATH=$PATH:$(pwd)/upstream/bin # for wasm-optIn the project root of mediainfo.js run the following to build.
$ npm install
$ npm run buildFind the resulting files mediainfo.js, mediainfo.min.js and mediainfo.wasm
in the dist directory.
You can run a test suite against the dist build.
$ npm run testThis program is freeware under BSD-2-Clause license conditions: MediaInfo(Lib) License
This product uses MediaInfo library, Copyright (c) 2002-2020 MediaArea.net SARL.