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 4.2 MiB. The WASM
module is loaded and instantiated automatically. By default it uses
location.href
as the base for constructing the module file URL.
E.g. if the webpage is served from https://example.com/
, the WASM module file
is loaded from https://example.com/MediaInfoModule.wasm
. You can freely
override this behavior using Emscripten Module
locateFile
.
For the CDN version have a look at this example. If you're using a bundler there are examples for React/webpack and Angular on how to achieve this.
Install mediainfo.js from NPM.
$ npm install -g mediainfo.js
You can use it directly from the shell.
$ mediainfo.js /path/to/media.avi
Or 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
,HTML
ortext
)full
: Full information display (all internal tags)- Other Emscripten Module attributes
- 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.
Convenience 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 ofsize
withoffset
and 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
In the project root of mediainfo.js run the following to build.
$ npm install
$ npm run build
Find 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 test
This program is freeware under BSD-2-Clause license conditions: MediaInfo(Lib) License
This product uses MediaInfo library, Copyright (c) 2002-2020 MediaArea.net SARL.