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.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' }
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
)locateFile
: Optional callback function to overrideMediaInfo.wasm
location. Must return URL/path to file. Helpful if you want to serveMediaInfoModule.wasm
from 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 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
$ export PATH=$PATH:$(pwd)/upstream/bin # for wasm-opt
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.