Skip to content

utility functions to perform operations on videos using ffmpeg. extracts images and composes mosaics

Notifications You must be signed in to change notification settings

JosePedroDias/ffmpeg-utils2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ffmpeg-utils2

Version 2 is a rewrite of the old code with a simpler, promises-based API. No longer compatible to avconv-utils. Somewhat tested with jest.

dependencies needed

This modules uses ffmpeg and graphicsmagick to manipulate video and images.

Mac OS X

brew install ffmpeg graphicsmagick

Windows

in a powershell run as administrator do:

choco install ffmpeg graphicsmagick

Linux

sudo apt-get install ffmpeg graphicsmagick

Use cases

Public API always returns a promise.

1) create a mosaic image from video

example mosaic

.doMosaicFromVideo({
  video: string, // path to video file
  mosaic: string, // path where to store generated mosaic
  outPath?: string, // where to store extracted frames (temp dir by default)
  strategy?: 'horizontal' | 'vertical' | 'most-square' | 'least-area' | 'least-area+'
  fps?: number,
  number?: number, // must specify either fps or number of frames
  scale?: number // scale to apply to frames from original video size
})

successful promise resolves to:

{
  mosaicDimensions: number[2], // dimensions of whole mosaic, in pixels
  frameDimensions: number[2], // dimensions of a frame, in pixels
  strategy: string, // applied strategy
  outFile: string, // saved mosaic path
  grid: number[2], // distribution of frames between dimensions (from top left -> top right, .... last row)
  n: number // number of frames
}

2) extract images from video

.extractFrames({
  inFile: string, // video path
  outPath: folder, // where to store extracted frames
  fps?: number,
  number?: number, // must specify either fps or number of frames
  scale: number,
  outImageMask?: string
})

successful promise resolves to:

{
  files: Array<string>, // path to each image
  frameDimensions: number[2] // dimension of each frame, in pixels
})

3) get video metadata

.getMetadata({
  string // path to video file
})

successful promise resolves to:

{
  duration: string, // 'HH:MM:SS.MS',
  durationSecs: number, // secs
  fps: number,
  vCodec: string,
  vBitrate: number,
  dimensions: number[2], // in pixels
  aCodec: string,
  aBitrate: number
}

see file sample.js for example calls.

tests

Tests need to be ran against node>=8 with native async await (for testing convenience, sorry).

The module itself uses promises so does not impose such constraint.

About

utility functions to perform operations on videos using ffmpeg. extracts images and composes mosaics

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published