Skip to content

Extracts frames from a GIF including inter-frame coalescing.

Notifications You must be signed in to change notification settings

transitive-bullshit/gif-extract-frames

Repository files navigation

gif-extract-frames

Extracts frames from GIFs including inter-frame coalescing.

NPM Build Status JavaScript Style Guide

Why?

Some GIFs store delta information between frames instead of storing complete frames. Here's an example:


Original gif (source).

Input gif bubbles


5 extracted frames without coalescing.

Example without coalescing


5 extracted frames with coalescing.

Example without coalescing


Install

This module requires node >= 8.

npm install --save gif-extract-frames

Usage

const extractFrames = require('gif-extract-frames')

const results = await extractFrames({
  input: './media/bubbles.gif',
  output: 'frame-%d.png'
})
console.log('number of frames', results.shape[0])

API

extractFrames(opts)

Returns: Promise<ndarray>

Returns a modified version of the ndarray returned by get-pixels.

opts.input

Type: String Required

Path to a GIF file.

opts.output

Type: String Example: 'output/frame-%d.png'

Optional frame pattern if you want to write each frame to disk. Should contain a %d that will be replaced with the frame number (starting at 0).

The resulting ndarray will be returned whether or not an output is given.

opts.coalesce

Type: Boolean Default: true

Whether or not to perform inter-frame coalescing.

Related

  • gifsicle - GIF manipulation library capable of exploding gifs, but AFAIK does not support frame coalescing when exporting frames.
  • gif-explode - Alternative which uses gifsicle but does not support frame coalescing.
  • omggif - JavaScript GIF encoder & decoder used under the hood.
  • ffmpeg-extract-frames - Analogous module for extracting frames from video files.

License

MIT © Travis Fischer

Support my OSS work by following me on twitter twitter