首页 > 解决方案 > FFmpeg image2pipe 写缓冲区等到完成

问题描述

我正在从外部源中提取帧并将其作为缓冲区传递给 FFMPEG,使用image2pipe-i -

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

然后我有一个循环来完成这项工作。

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

承诺里面

// ... do the job to get buffer

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

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

问题是在某些视频中,帧会跳跃并且很卡顿。这是因为 FFmpeg 在移动到下一帧之前尚未完全完成对文件的写入。

有没有办法通过 FFmpeg 将缓冲区写入文件并确保帧在继续之前完成写入?

更多信息

这是源文件https://s3.us-west-2.amazonaws.com/storycreator.v2.uploads/ckigi4kro00160vlfjmt74afp

这是渲染文件https://s3.us-west-2.amazonaws.com/storycreator.testing/607715f0-3ab9-11eb-a139-3bb84618c6c5.mp4?t=1607585343922

这里是日志

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

标签: node.jsffmpegchild-process

解决方案


推荐阅读