node.js - 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
这里是日志
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
解决方案
推荐阅读
- docker - 请求不会发送到 docker compose 中的 ngnix 反向代理
- node.js - Yarn 无法执行 source 命令
- c++ - 从用户那里获取输入
- amazon-web-services - 了解生命周期规则和忽略变化
- django-rest-framework - 在 Django Rest Framework 中过滤多个值
- xamarin.forms - Xamarin.Forms:Android 5.1 上的 WebView 支持
- javascript - 按对象过滤对象数组
- javascript - 何时使用 useMemo 和 useCallback 进行性能优化?
- kotlin - 在 Koltin 中处理可为空的 val 的最佳方法是什么?
- ansible - uri 不遵守 localhost 代理设置