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

发布于 2025-01-16 00:08:38 字数 790 浏览 0 评论 0原文

有没有办法在 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();

Is there a way during the ffmpeg compression process to determine over various intervals the exact filesize that a video is at?

Such as a method to get current filesize during the process to use when comparing against the videos original filesize.

For example, a potential video being transcoded takes 5 minutes, but during the process, a function will check the file size on intervals of 100 frames or every 5 seconds to ensure that the filesize hasn't exceeded the original. If it has, it will kill the process with 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();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

落叶缤纷 2025-01-23 00:08:38

您可以使用 "progress" 事件获取目标文件的当前大小:

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

要获取原始大小,可以使用 Node 的 fs 中的标准函数图书馆,例如fs.stat

You can use the targetSize property from the "progress" event to get the current size of the target file:

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

To get the original size, you can use the standard functions in Node's fs library, e.g. fs.stat.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文