如何在 Electron 应用程序中捆绑 ffmpeg

Jos*_*ett 8 ffmpeg node.js webpack electron electron-builder

我正在从electron-webpack样板文件开始构建一个电子应用程序。

我发现这个节点模块@ffmpeg-installer/ffmpeg将兼容的预编译二进制文件安装到/node_modules目录中,然后使该可执行文件的路径可通过访问。

const ffmpegPath = require('@ffmpeg-installer/ffmpeg').path
Run Code Online (Sandbox Code Playgroud)

这在开发过程中工作得很好,但是当我构建可分发文件并运行它时,在尝试使用该路径生成子进程时出现错误。大概是因为路径不指向二进制文件。

运行可分发文件时,路径设置为以下内容。

/Users/me/project/dist/mac/AppName.app/Contents/Resources/app.asar/node_modules/@ffmpeg-installer/darwin-x64/ffmpeg
Run Code Online (Sandbox Code Playgroud)

但是,当查看AppName.app包内容时,我在以下路径中找到了二进制文件。

/Users/me/project/dist/mac/AppName.app/Contents/Resources/app.asar.unpacked/node_modules/@ffmpeg-installer/darwin-x64/ffmpeg
Run Code Online (Sandbox Code Playgroud)

electron-webpack我应该如何使用和在 Electron 应用程序中包含二进制依赖项electron-builder

Yig*_*gal 6

从这里:

安装:npm i ffmpeg-static ffprobe-static

包含在您的package.json

build{
...
    "asarUnpack":[
        "node_modules/ffmpeg-static/bin/${os}/${arch}/ffmpeg",
        "node_modules/ffmpeg-static/index.js",
        "node_modules/ffmpeg-static/package.json"
        ]
    }
Run Code Online (Sandbox Code Playgroud)

在 JS 中设置路径:

const ffmpeg = require('fluent-ffmpeg');

//Get the paths to the packaged versions of the binaries we want to use
const ffmpegPath = require('ffmpeg-static').replace(
    'app.asar',
    'app.asar.unpacked'
);
const ffprobePath = require('ffprobe-static').path.replace(
    'app.asar',
    'app.asar.unpacked'
);

//tell the ffmpeg package where it can find the needed binaries.
ffmpeg.setFfmpegPath(ffmpegPath);
ffmpeg.setFfprobePath(ffprobePath);
Run Code Online (Sandbox Code Playgroud)


Lin*_*iel 2

这可能是因为 Electron 会将应用程序捆绑在 asar 存档中(类似于 zip/tar/jar)。因此,无法解析可执行文件的路径。尝试传递asar: falseelectron-builder(in electron-builder.json)。

  • `⚠️ 使用 asar 存档进行打包已被禁用 - 强烈不建议这样做。请启用 asar 并使用 asarUnpack 来解压必须在外部可用的文件。` (2认同)