Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

exiftool

Package Overview
Dependencies
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

exiftool

Metadata extraction from numerous filetypes including JPEG, PNG, PDF, MOV, WMV, MP3, MP4, and others.

  • 0.0.3
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
632
increased by14.29%
Maintainers
1
Weekly downloads
 
Created
Source

exiftool Build Status

A node.js wrapper around exiftool, a commandline utility that can extract metadata from many different filetypes, including JPEG, PNG, PDF, WMV, MOV. For a full list see the exiftool list of supported filetypes.

Installation

To make use of exiftool you will need to download and install the appropriate exiftool package for your system.

Mac OS X:

sudo brew update
sudo brew install exiftool

Ubuntu:

sudo apt-get update
sudo apt-get install libimage-exiftool-perl

For other systems or for information on how to compile exiftool from source refer to the official documentation for exiftool.

Usage

var exif = require('exiftool');
var fs   = require('fs');

fs.readFile('./tests/resources/chvrches.jpg', function (err, data) {
  if (err)
    throw err;
  else {
    exif.metadata(data, function (err, metadata) {
      if (err)
        throw err;
      else
        console.log(metadata);
    });
  }
});

The properties and contents of the metadata dictionary returned by exiftool will vary widely depending on the filetype but you can expect dictionaries that look similar to this:

From a JPG:

{ exiftoolVersionNumber: 9.58,
  fileType: 'JPEG',
  mimeType: 'image/jpeg',
  jfifVersion: 1.01,
  resolutionUnit: 'None',
  xResolution: 1,
  yResolution: 1,
  imageWidth: 620,
  imageHeight: 413,
  encodingProcess: 'Baseline DCT, Huffman coding',
  bitsPerSample: 8,
  colorComponents: 3,
  yCbCrSubSampling: 'YCbCr4:2:0 (2 2)',
  imageSize: '620x413' }

From a MOV:

{ exiftoolVersionNumber: 9.58,
  fileType: 'MOV',
  mimeType: 'video/quicktime',
  majorBrand: 'Apple QuickTime (.MOV/QT)',
  minorVersion: '2005.3.0',
  compatibleBrands: 'qt',
  movieHeaderVersion: 0,
  createDate: '2012:09:18 17:18:25',
  modifyDate: '2012:09:18 17:18:25',
  timeScale: 2997,
  duration: '0:02:31',
  preferredRate: 1,
  preferredVolume: '100.00%',
  previewTime: '0 s',
  previewDuration: '0 s',
  posterTime: '0 s',
  selectionTime: '0 s',
  selectionDuration: '0 s',
  currentTime: '0 s',
  nextTrackID: 4,
  trackHeaderVersion: 0,
  trackCreateDate: '2012:09:18 16:24:43',
  trackModifyDate: '2012:09:18 17:18:25',
  trackID: 1,
  trackDuration: '0:02:31',
  trackLayer: 0,
  trackVolume: '0.00%',
  imageWidth: 320,
  imageHeight: 136,
  cleanApertureDimensions: '320x136',
  productionApertureDimensions: '320x136',
  encodedPixelsDimensions: '320x136',
  graphicsMode: 'ditherCopy',
  opColor: '32768 32768 32768',
  compressorID: 'avc1',
  vendorID: 'Apple',
  sourceImageWidth: 320,
  sourceImageHeight: 136,
  xResolution: 72,
  yResolution: 72,
  compressorName: 'H.264',
  bitDepth: 24,
  videoFrameRate: 23.976,
  audioFormat: 'mp4a',
  audioChannels: 2,
  audioBitsPerSample: 16,
  audioSampleRate: 44100,
  purchaseFileFormat: 'mp4a',
  matrixStructure: '1 0 0 0 1 0 0 0 1',
  mediaHeaderVersion: 0,
  mediaCreateDate: '2012:09:18 17:18:25',
  mediaModifyDate: '2012:09:18 17:18:25',
  mediaTimeScale: 2997,
  mediaDuration: '0:02:31',
  genMediaVersion: 0,
  genFlags: '0 0 0',
  genGraphicsMode: 'ditherCopy',
  genOpColor: '32768 32768 32768',
  genBalance: 0,
  textFont: 'Unknown (1024)',
  textFace: 'Plain',
  textSize: 12,
  textColor: '0 0 0',
  backgroundColor: '65535 65535 65535',
  fontName: 'Lucida Grande',
  handlerClass: 'Data Handler',
  handlerVendorID: 'Apple',
  handlerDescription: 'Apple Alias Data Handler',
  otherFormat: 'tmcd',
  handlerType: 'Metadata Tags',
  audioGain: 1,
  trebel: 0,
  bass: 0,
  balance: 0,
  pitchShift: 0,
  mute: 'Off',
  brightness: 0,
  color: 1,
  tint: 0,
  contrast: 1,
  playerVersion: '7.6 (7.6)',
  version: '7.6.0 (1290) 0x7608000 (Mac OS X, 10.5.6, 9G71)',
  'comment(err)': 'Encoded and delivered by apple.com/trailers/',
  'copyright(err)': '� 2012 Warner Bros. Pictures. All Rights Reserved',
  'userDataDes(err)': 'In theaters 2012',
  windowLocation: '45 21',
  playSelection: 0,
  playAllFrames: 0,
  movieDataSize: 8636129,
  movieDataOffset: 98160,
  comment: 'Encoded and delivered by apple.com/trailers/',
  copyright: '� 2012 Warner Bros. Pictures. All Rights Reserved',
  userDataDes: 'In theaters 2012',
  avgBitrate: '457 kbps',
  imageSize: '320x136',
  rotation: 0 }

Filtering metadata

You can also provide an optional list of extra parameters to pass into exiftool, if you want it to return only specific metadata keys:

var exif = require('exiftool');
var fs   = require('fs');

fs.readFile('./tests/resources/chvrches.jpg', ['-imageWidth', '-imageHeight'], function (err, data) {
  if (err)
    throw err;
  else {
    exif.metadata(data, function (err, metadata) {
      if (err)
        throw err;
      else
        console.log(metadata);
    });
  }
});

Keywords

FAQs

Package last updated on 01 Sep 2014

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc