FFmpeg image2pipe write buffer wait until done

Viewed 485

I'm extracting frames from an external source and passing it in as a buffer to FFMPEG using image2pipe and -i -

const childProcess = spawn(ffmpeg, [
  "-y",
  "-f",
  "image2pipe",
  "-i",
  "-",
  "-vcodec",
  "libx264",
  "-pix_fmt",
  "yuv420p",
  output
]);

Then I have a loop that does the job.

for (let i = 0; i < 250; i++) {
  // ...await
}

Inside the promise

// ... do the job to get buffer

childProcess.stdin.write(frame); // frame === buffer

// frame done
resolve("success!");

The problem is in some videos the frames jump and is janky. This is because FFmpeg is not fully done writing to the file before moving onto the next frame.

Is there a way to write a buffer to a file through FFmpeg and make sure the frame is done writing before moving on?

Some more information

Here is the source file https://s3.us-west-2.amazonaws.com/storycreator.v2.uploads/ckigi4kro00160vlfjmt74afp

Here is the rendered file https://s3.us-west-2.amazonaws.com/storycreator.testing/607715f0-3ab9-11eb-a139-3bb84618c6c5.mp4?t=1607585343922

Here are logs

2020-12-10T07:28:48.942Z    0ae0c435-54d3-416f-9d1a-8ddf595a7e83    INFO    frame=  130 fps= 16 q=-1.0 Lsize=      83kB time=00:00:05.08 bitrate= 133.6kbits/s speed=0.641x    video:80kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 2.928688%
2020-12-10T07:28:48.942Z    0ae0c435-54d3-416f-9d1a-8ddf595a7e83    INFO    [libx264 @ 0x640d6c0] frame I:1     Avg QP:15.47  size: 68227[libx264 @ 0x640d6c0] frame P:33    Avg QP:15.07  size:   246[libx264 @ 0x640d6c0] frame B:96    Avg QP:18.75  size:    56[libx264 @ 0x640d6c0] consecutive B-frames:  1.5%  0.0%  0.0% 98.5%
2020-12-10T07:28:48.943Z    0ae0c435-54d3-416f-9d1a-8ddf595a7e83    INFO    [libx264 @ 0x640d6c0] mb I  I16..4: 24.6% 60.5% 14.9%[libx264 @ 0x640d6c0] mb P  I16..4:  0.0%  0.2%  0.0%  P16..4:  0.8%  0.0%  0.0%  0.0%  0.0%    skip:98.9%[libx264 @ 0x640d6c0] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8:  0.3%  0.0%  0.0%  direct: 0.0%  skip:99.7%  L0:26.7% L1:73.3% BI: 0.0%[libx264 @ 0x640d6c0] 8x8 transform intra:62.0% inter:83.6%[libx264 @ 0x640d6c0] coded y,uvDC,uvAC intra: 49.2% 44.3% 32.1% inter: 0.0% 0.2% 0.0%[libx264 @ 0x640d6c0] i16 v,h,dc,p: 53% 38%  7%  2%[libx264 @ 0x640d6c0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 26% 24% 29%  3%  3%  3%  5%  3%  4%[libx264 @ 0x640d6c0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 37% 26% 14%  3%  4%  5%  4%  4%  3%[libx264 @ 0x640d6c0] i8c dc,h,v,p: 57% 27% 13%  3%[libx264 @ 0x640d6c0] Weighted P-Frames: Y:0.0% UV:0.0%[libx264 @ 0x640d6c0] ref P L0: 95.1%  1.2%  3.1%  0.6%[libx264 @ 0x640d6c0] ref B L0: 48.1% 51.3%  0.7%[libx264 @ 0x640d6c0] ref B L1: 97.3%  2.7%[libx264 @ 0x640d6c0] kb/s:125.75
2020-12-10T07:28:48.944Z    0ae0c435-54d3-416f-9d1a-8ddf595a7e83    INFO    [cache @ 0x5f57940] Statistics, cache hits:0 cache misses:3551
0 Answers
Related