A pure Javascript Node module to create video files from images
Install
npm install --save mp4-mjpeg
Usage
const mjpeg = ; // starting a video file
API
<module>(options)
: creates a video recorder. Options have properties:fileName
: the path to the output MP4 video filereuseLastFrame
: if an image is the same as the previous one, it does not take more data in the MP4 file (defaulttrue
)ignoreIdenticalFrames
: if not0
and the number of successive identical images has reached the parameter value, recording is put on hold until a different image is appended to the video (default '30`, 1 second)
The module function returns a Promise, not the actual recorder. To get the recorder:
options ;
-
<recorder>.appendImageDataUrl(dataUrl)
: add an image to the video. This image is encoded in base64 prefixed withdata:image/png;base64,
, as what you get callingcanvas.toDataURL('image/jpeg')
The function returns a promise that is fulfilled when the image has been written -
<recorder>.appendImageBuffer(buffer)
: add an image to the video. The image is a plain buffer that you can obtain by reading a JPEG file
The function returns a promise that is fulfilled when the image has been written -
<recorder>.finalize()
: end the capturing process.
The function returns a promise that is fulfilled when the video file is ready to be played
Limitations
- only MJPEG encoding is supported
- generated video files have no audio
- framerate is fixed to 30 fps
- there is no cropping or scaling capbility in this library, the images should be processed before being appended, or the generated MP4 file can be worked afterwards
- there is no queue for appending images: the developer using this library is in charge of the flow control, which can be done easily using the promise returned by
appendXXX()
- all appended images should have the same size, or weird things may happen
About
This module has been written to cover a need on JoclyBoard: recording games being played in 3D. You can check JoclyBoard source code as an example of using this library