相关文章推荐
文武双全的毛衣  ·  Install Package ...·  1 年前    · 
重感情的煎鸡蛋  ·  Jquery ...·  1 年前    · 
豪气的小摩托  ·  spring + hibernate ...·  1 年前    · 

如何将在node.js中运行的execSync(ffmpeg)的进度显示在浏览器上?

1 人关注

我试图用Next.js API Routes来复制视频。
通过下面的命令,我们能够将视频复制到公共文件夹中。

./pages/api/copy-video.ts

import type { NextApiResponse } from "next";
import { execSync } from "child_process";
const copyVideo = async (res: NextApiResponse) => {
  const cmd = `ffmpeg -i public/input.mp4 -c copy -progress - public/output.mp4`;
  execSync(cmd, { stdio: "inherit" });
  res.status(200).end();
export default copyVideo;

现在我可以复制视频了,我想在浏览器中显示复制的进度。
如果可能的话,请告诉我如何使用execSync 来在浏览器中显示进度?

命令中包含的-progress - ,将使终端显示进度,如下所示。

[hls @ 0000026d93626a80] Opening 'crypto+input.mp4' for reading
frame=46975 fps=321 q=-1.0 size=  663552kB time=00:26:07.36 bitrate=3468.1kbits/s speed=10.7x    
fps=321.04
stream_0_0_q=-1.0
bitrate=3468.1kbits/s
total_size=679477296
out_time_us=1567365811
out_time_ms=1567365811
out_time=00:26:07.365811
dup_frames=0
drop_frames=0
speed=10.7x
progress=continue
[hls @ 0000026d93626a80] Opening 'crypto+input.mp4' for reading
frame=47098 fps=321 q=-1.0 size=  665600kB time=00:26:11.49 bitrate=3469.7kbits/s speed=10.7x    
fps=320.68
stream_0_0_q=-1.0
bitrate=3469.7kbits/s
total_size=681574448
out_time_us=1571498667
out_time_ms=1571498667
out_time=00:26:11.498667
dup_frames=0
drop_frames=0
speed=10.7x
progress=continue
frame=47255 fps=322 q=-1.0 Lsize=  667437kB time=00:26:16.78 bitrate=3467.6kbits/s speed=10.7x    
frame=47255
fps=321.67
stream_0_0_q=-1.0
bitrate=3467.6kbits/s
total_size=683455072
out_time_us=1576789333
out_time_ms=1576789333
out_time=00:26:16.789333
dup_frames=0
drop_frames=0
speed=10.7x
progress=end
video:653447kB audio:12778kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.181925%

我想我可以准备一个API,将这个显示作为一个对象传递给浏览器,每隔几秒钟从浏览器中获取,在浏览器中显示进度。
然而,我想不出如何将这个显示在终端的进度状态提取为一个对象。