NodeJs、Multer 和 FFMPEG,试图在文件转换和下载方面取得进展

问题描述

使用 React,我正在使用 Fluent FFMPEG 上传视频文件以在 Node 服务器中进行转换。文件已正确上传并且正在转换,但我试图在期间和之后运行两件事。我在控制台中获得了转换进度,并希望将其发送回前端以在条形图中显示,其次,我想在文件完成后下载文件,这似乎失败了。我可以在下载功能中放置另一个文件并将其发送到浏览器控制台,但此视频文件不会在浏览器中触发下载。视频文件已成功上传、转换并创建水印。只需要一种发回进度并最终在完成后下载文件方法

/// 路线

router.post("/",upload.single("file"),controller.getVideo);

//// 控制器

const getVideo = async (req,res) => {
  try {
    if (!req.file) {
      throw new Error("No file selected");
    }

    await transcodeAndWatermarkVideo(
      req.file.path,req.file.filename,"prores","Watermark name"
    ).then((message) => {
      console.log("MESSAGE",message); // Undefined

      const file = `convertedMedia/${req.file.filename}-vsiwm.mov`;
      res.download(file);
    });
  } catch (e) {
    res.status(404).send(e);
  }
};

//// 辅助函数

const transcodeAndWatermarkVideo = function (
  path,originalName,codec,watermark
) {
  return new Promise((resolve,reject) => {
    ffmpeg()
      .input(path)
      .videoCodec(codec)
      .size("1920x1080")
      .videoFilters(
        `drawtext='fontsize=100:fontcolor=white@0.4:fontfile=FreeSerif.ttf:text=${watermark}:x=if(eq(mod(t\,05)\,0)\,rand(0\,(w-text_w))\,x):y=if(eq(mod(t\,(h-text_h))\,y)'`
      )
      .format("mov")
      .on("error",function (err) {
        console.log("An error occurred: " + err.message);
      })
      .on("progress",function (progress) {
        console.log("Processing: " + progress.percent + "% done");
      })
      .on("end",function () {
        fs.unlink(path,(err) => {
          if (err) {
            console.error(err);
            return;
          }
          console.log("Original video deleted");
          resolve(console.log("Conversion completed"));
        });
      })
      .save(`convertedMedia/${originalName}-vsiwm.mov`);
  });
};

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...