mp4-mjpeg v0.0.2
A pure Javascript Node module to create video files from images
Install
npm install --save mp4-mjpeg
Usage
const mjpeg = require('mp4-mjpeg');
// starting a video file
mjpeg({ fileName: "path/to/my/file.mp4" })
.then( (recorder) => {
// append a JPEG image as a data URL to the video
recorder.appendImageDataUrl( imageAsDataURL )
.then( () => {
// image added
})
.catch( (error) => {
// something bad happened
})
// or if we have the image as a buffer
recorder.appendImageBuffer( imageBuffer )
// ...
// all the images added ?
// let finalize the MP4 file to make it playable
recorder.finalize()
.then( () => {
// MP4 video file is ready
})
.catch( (error) {
// too bad
})
})
.catch( (error) => {
// could not create the 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 not0and 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:
(require('mp4-mpjpeg'))(options)
.then( (recorder) => {
// the recorder can now be used to add images to the video
});<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