Parse input stream by frames directly into your code as a buffer.
LIMITATION: this library doesn't work with mp4 video format, due to the fact that mp4 video is not frame-by-frame output to stdout.
npm i ffparser
const FFParser = require('ffparser');
const fs = require("fs");
new FFParser('rtsp://184.72.239.149/vod/mp4:BigBuckBunny_115k.mov')
.setFrameRate('1/1')
.setQuality(2)
.setFrameHandler((frame) => fs.writeFile('image.jpeg', frame, () => {}))
.run();
This simple command will parse the provided stream at a frame rate of ~ 1 fps and with the highest quality. The resulting frames are saved in a file.
You can try this example in the test directory.
FFParser(inputPath: string, customArgs?: string[])
inputPath
(required) - URL or path to input video stream
customArgs
(optional) - Custom ffmpeg params. Will override the existing ones.
setFrameRate(frameRate: string): FFParser - setup the output frame rate. NOTE: this works approximately!
frameRate
(required) - in format '1/2' means 1 frame per 2 seconds. Defaulr value is 1/1. You cannot specify more than the value of the stream itself
setQuality(quality: number): FFParser - defines the quality of the output JPEG image.
quality
(required) - available range from 1 to 31, where a lower value means better quality. Default value is 2
enableLogs(): FFParser - show ffmpeg logs in console
setFrameHandler(fn: FrameHandlerFn): FFParser - setup a callback function which will produce new frames.
fn = (frame: Buffer, info?: FrameInformation) => void
frame
- new frame as a buffer
info
- frame information
FrameInformation {
frameNumber: string; // frame number from the beginning of parsing
fps: string;
quality: string;
time: string; // time from the beginning of parsing
}
run(): void - start parsing
npm run tsc
Will create a build directory with the compiled lib, and test.