JavaScript wrapper for ExifTool by Phil Harvey.
The usual way:
npm install exiftool-wrapper
You need to have the ExifTool by Phil Harvey installed or be able to call it from your bash/console.
You can use callbacks or promises.
var exiftool = require('exiftool-wrapper');
exiftool.metadata({source, tags, maxBufferSize, useBufferLimit, callback});
Or if you need it to be sync:
exiftool.metadataSync({source, tags, maxBufferSize, useBufferLimit});
Depending on what you passed as source
, you will either get single object or an array of objects containing the metadata. See below for a more detailed example.
source
: file, files or buffer. Examples:- String:
source: 'path/to/my/image.jpg'
- Array:
source: ['path/to/my/image1.jpg', 'path/to/my/image2.jpg', 'path/to/my/video.mp4']
- Buffer:
source: <Buffer>
, e.g. viafs.readFile()
- String:
tags
: List of tags that should be included or excluded. If omitted, the function will return all metadata that is available insource
. Add a single dash-
in front of the tag to exclude it. Not case sensitive. Examples:tags: ['imagewidth', 'imageheight']
will only return the width and height of an image/video.tags: ['-imagewidth', '-imageheight']
will exclude width and height in the returned metadata.
useBufferLimit
: If set tofalse
the whole Buffer will be piped into ExifTool otherwisemaxBufferSize
will be used to cap the Buffer. (default:true
)maxBufferSize
: Maximum length of Buffer, that will be piped into ExifTool. (default:10000
)callback
: Usualfunction (error, metadata)
format. If omitted,metadata()
will return a Promise
Get filtered metadata (only imagewidth and imageheight) for a list of files under ./sampleimages/
.
Also see: exiftool-wrapper/examples
var exiftool = require('exiftool-wrapper');
var fs = require('fs');
var path = require('path');
var samplepath = './sampleimages/'
fs.readdir(samplepath, function(err, files) {
files = files.map(function(f) {
return path.join(samplepath, f);
})
// As callback
exiftool.metadata({source: files, tags: ['imagewidth', 'imageheight'], callback: function (err, metadata) {
if(err) {
return console.log(err);
}
console.log(metadata);
}});
// As Promise:
exiftool.metadata({source: files, tags: ['imagewidth', 'imageheight']})
.then(function(metadata) {
console.log(metadata);
})
.catch(function(err) {
console.log(err);
});
});
[
{
"SourceFile": "sampleimages/Example.jpg",
"ImageWidth": 275,
"ImageHeight": 297
},
{
"SourceFile": "sampleimages/NodeJS.png",
"ImageWidth": 234,
"ImageHeight": 73
},
{
"SourceFile": "sampleimages/Stationary_wavelet_transform_lena.png",
"ImageWidth": 1280,
"ImageHeight": 1278
}
]
- It is not the fastest way to get your metadata.
- Some tags will be missing, if
maxBufferSize
is too small.10000
worked fine for basic data like imageheight and imagewidth. - .webm-files appear to be problematic when using
useBufferLimit: false
. This is an issue with ExifTool itself. It has problems with piped in webm-files. - Feedback would be great, since this is my first module.
Real tests.