pipe2jpeg

Parse individual jpegs from an ffmpeg pipe when output codec is set to mjpeg and format is set to image2pipe, singlejpeg, mjpeg, or mpjeg.

Usage no npm install needed!

<script type="module">
  import pipe2jpeg from 'https://cdn.skypack.dev/pipe2jpeg';
</script>

README

pipe2jpeg

Build Status"> Build status GitHub issues GitHub license

Parse individual jpegs from an ffmpeg pipe when output codec(-c:v) is set to mjpeg and format(-f) is set to image2pipe, singlejpeg, mjpeg, or mpjpeg. All jpegs will be found regardless of size or fps. See testing instructions for verification.

installation:

npm install pipe2jpeg --save

usage:

The following example uses ffmpeg's testsrc to simulate a video input and generate 100 downscaled jpeg images at a rate of 1 per second. The jpeg images are piped in from ffmpeg's stdout and parsed for the start of image(SOI) and end of image(EOI) file markers. Pipe2Jpeg dispatches a "jpeg" event that contains a complete jpeg image:

const P2J = require('pipe2jpeg');

const spawn = require('child_process').spawn;

let jpegCounter = 0;

const params = [
    /* log info to console */
    '-loglevel',
    'quiet',
    
    /* use an artificial video input */
    '-re',
    '-f',
    'lavfi',
    '-i',
    'testsrc=size=1920x1080:rate=15',

    /* set output flags */
    '-an',
    '-c:v',
    'mjpeg',
    '-pix_fmt',
    'yuvj422p',
    '-f',
    'image2pipe',//image2pipe, singlejpeg, mjpeg, or mpjpeg
    '-vf',
    'fps=1,scale=640:360',
    '-q',
    '1',
    '-frames',
    '100',
    'pipe:1'
];

const p2j = new P2J();

p2j.on('jpeg', (jpeg) => {
    console.log('received jpeg', ++jpegCounter);
});

const ffmpeg = spawn('ffmpeg', params, {stdio : ['ignore', 'pipe', 'ignore']});

ffmpeg.on('error', (error) => {
    console.log(error);
});

ffmpeg.on('exit', (code, signal) => {
    console.log('exit', code, signal);
});

ffmpeg.stdout.pipe(p2j);

testing:

Clone the repository

git clone https://github.com/kevinGodell/pipe2jpeg.git

Change into the directory

cd pipe2jpeg

Initialize with npm

npm install

Start the tests

npm test