Streampunk / beamcoder

Node.js native bindings to FFmpeg.
GNU General Public License v3.0
399 stars 76 forks source link

help me about rgb frame.data #19

Open smaznet opened 5 years ago

smaznet commented 5 years ago

hi i used this code to make a red picture movie but not working

const beamcoder = require("beamcoder");
let fs = require("fs");

(async function(){
    let outFile = fs.createWriteStream("./out3.mp4");
    let encParams = {
        name:         "libx264rgb",
        width:        400,
        height:       400,
        bit_rate:     2000000,
        time_base:    [1, 25],
        framerate:    [25, 1],
        gop_size:     10,
        max_b_frames: 1,
        pix_fmt:      "rgb24",
        priv_data:    {preset: "slow"}
    };
    let endcode = Buffer.from([0, 0, 1, 0xb7]);
    let encoder = await beamcoder.encoder(encParams);
    for(let i = 0; i < 30; i++){
        let frame = beamcoder.frame({
            width:  encParams.width,
            height: encParams.height,
            format: encParams.pix_fmt
        }).alloc();
        let ydata = frame.data;
        frame.pts = i;
        for(let y = 0; y < frame.height; y++){
            for(let x = 0; x < frame.width; x++){
                let offset = 3 * (x + (y * frame.width));
                ydata[offset + 0] = 255;
                ydata[offset + 1] = 0;
                ydata[offset + 2] = 0;
            }
        }
        let packets = await encoder.encode(frame);
        if(i % 10 === 0) console.log("Encoding frame", i);
        packets.packets.forEach(x => outFile.write(x.data));
    }
    let p2 = await encoder.flush();
    console.log("Flushing", p2.packets.length, "frames.");
    p2.packets.forEach(x => outFile.write(x.data));
    outFile.end(endcode);
})();