exiftool-wrapper
JavaScript wrapper for ExifTool by Phil Harvey.
Installation
The usual way:
npm install exiftool-wrapper
Requirements
You need to have the ExifTool by Phil Harvey installed or be able to call it from your bash/console.
Usage
You can use callbacks or promises.
var exiftool = ; exiftool;
Or if you need it to be sync:
exiftool;
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.
Parameters
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
Example
Get filtered metadata (only imagewidth and imageheight) for a list of files under ./sampleimages/
.
Also see: exiftool-wrapper/examples
var exiftool = ;var fs = ;var path = ; var samplepath = './sampleimages/'fs;
Output:
[ { "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 }]
Notes
- 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.
Todo
Real tests.