如何在 fluent-ffmpeg 转码过程中异步检查视频文件大小

How To Asynchronously Check Video File size During Transcoding Process In fluent-ffmpeg

在 ffmpeg 压缩过程中有没有办法在不同的时间间隔内确定视频的确切文件大小?

例如在与视频原始文件大小进行比较时使用的过程中获取当前文件大小的方法。

例如,一个潜在的视频被转码需要 5 分钟,但在此过程中,一个函数将以 100 帧的间隔或每 5 秒检查文件大小,以确保文件大小没有超过原始文件大小。如果有,它将用 command.kill('SIGSTOP');

终止进程

const transcodeVideo = () => {
  return new Promise((resolve, reject) => {
    ffmpeg("./video.mp4")
      .setFfprobePath(pathToFfprobe.path)
      .setFfmpegPath(pathToFfmpeg)
      .videoCodec("libx264")
      .audioCodec("libmp3lame")
      .size("720x?")
      .on("error", (err) => {
        console.log(err);
      })
      .on("end", () => {
      //irrelevant resolving code in here
      })
      .save("./transVideo.mp4");
  });
};

transcodeVideo();

您可以使用 targetSize 属性 从 "progress" event 获取目标文件的当前大小:

let command = ffmpeg
  // ...
  .on("progress", progress => {
    if (progress.targetSize > originalSize) {
      command.kill();
    }
  });

要获得原始大小,您可以使用 Node 的 fs 库中的标准函数,例如fs.stat.