FFMPEG wasm报错Failed to parse URL,Node.js环境启动即崩溃
解决RuntimeError: abort(TypeError: Failed to parse URL from ... ffmpeg-core.wasm)
问题原因
在Node.js环境下,@ffmpeg/ffmpeg的load()方法默认会把传入的本地路径当作URL解析,但普通本地路径缺少file://协议头,不符合URL规范,导致解析失败。
解决方案
修改createFFmpeg的配置,显式指定corePath为带file://协议的本地文件URL,有两种实现方式:
方式1:使用URL构造器转换路径
修改你的Node.js代码:
const express = require("express"); const path = require('path') const multer = require("multer"); const { createFFmpeg } = require("@ffmpeg/ffmpeg"); const app = express(); const upload = multer({ storage: multer.memoryStorage() }) // 显式指定corePath为file://协议的URL const ffmpegInstance = createFFmpeg({ log: true, corePath: new URL(path.join(__dirname, 'node_modules', '@ffmpeg', 'core', 'dist', 'ffmpeg-core.wasm')).href }) let ffmpegLoading = ffmpegInstance.load() async function getFfmpeg() { if (ffmpegLoading) { await ffmpegLoading; ffmpegLoading = undefined } return ffmpegInstance }
方式2:使用url.pathToFileURL方法(更简洁)
const express = require("express"); const path = require('path') const { pathToFileURL } = require('url'); // 引入pathToFileURL工具 const multer = require("multer"); const { createFFmpeg } = require("@ffmpeg/ffmpeg"); const app = express(); const upload = multer({ storage: multer.memoryStorage() }) const ffmpegInstance = createFFmpeg({ log: true, corePath: pathToFileURL(path.join(__dirname, 'node_modules', '@ffmpeg', 'core', 'dist', 'ffmpeg-core.wasm')).href }) let ffmpegLoading = ffmpegInstance.load() async function getFfmpeg() { if (ffmpegLoading) { await ffmpegLoading; ffmpegLoading = undefined } return ffmpegInstance }
验证
修改后重新运行node index.js,即可正常加载ffmpeg-core.wasm文件,避免URL解析报错。
内容的提问来源于stack exchange,提问作者Sebastian Berglönn
相关产品推荐
相关产品推荐

