Could not resolve “./lib-cov/fluent-ffmpeg“ from “./lib-cov/fluent-ffmpeg?commonjs-external“

背景

我在Electron+Vite+Vue3的桌面app中,Electron环境下使用到了fluent-ffmpeg。ts-node测试都没有问题,但加入electron/main.ts下后,就出现了这个问题:

Could not resolve “./lib-cov/fluent-ffmpeg” from “./lib-cov/fluent-ffmpeg?commonjs-external”

这个问题应该是导入之类的问题,也是一直没有找到解决方案。
采用了node-ffmpeg库,也是会报其他的错误。

Error: Could not dynamically require “./lib/decorators/timed”. Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.


解决方案

直接使用nodejs的child_process模块的exec直接调命令行,比如我这里的需求是生成视频首帧。

import { exec } from 'node:child_process'

function generateFirstFrame(videoPath: string, saveImagePath: string): Promise<string> {
  return new Promise<string>((resolve, reject) => {
    let cmd = `ffmpeg -y -i ${videoPath} -vframes 1 ${saveImagePath}`
    exec(cmd, (error: any, stdout: any, stderr: any) => {
      if (error) {
        reject(error)
        return
      }
      
      resolve(saveImagePath)
    })
  })
}

export { generateFirstFrame }

虽然直接调命令行需要自己封装一下,但也就不会遇到上面第三方库的问题了。
直接导入electron/main.ts下面也是可以使用的。
前提是先下好ffmpeg等库并加入环境变量。

你可能感兴趣的:(Web,ffmpeg)