Chrome浏览器用ffmpeg.wasm渲染视频频繁出现SBOX_FATAL_MEMORY_EXCEEDED错误求助
解决ffmpeg.wasm在Chrome中报SBOX_FATAL_MEMORY_EXCEEDED的问题
1. 修复代码中的文件操作逻辑错误
你的代码存在明显的顺序错误:先删除了输出文件,之后又尝试读取该文件,这不仅会导致读取失败,还可能引发ffmpeg内部内存异常。调整操作顺序并补充资源清理:
const videoGenerate = async (project) => { const ffmpeg = createFFmpeg({ corePath: 'ffmpeg/ffmpeg-core.js', workerPath: 'ffmpeg/ffmpeg-core.worker.js' }); await loadFfmpeg(ffmpeg); project.projectName = "Default"; project.fileType = "video/mp4"; const resultVideo = { title: `${project.projectName}ConcatenatedVideo.mp4`, }; await uploadObjects(project.projectName, ffmpeg); // 执行ffmpeg命令 const command = ['-i', project.video, '-c', 'copy', resultVideo.title]; await ffmpeg.run(...command); // 先读取文件再删除 resultVideo["blob"] = ffmpeg.FS('readFile', resultVideo.title); await ffmpeg.FS("unlink", resultVideo.title); // 退出实例释放资源 await ffmpeg.exit(); return resultVideo.blob; };
2. 显式分配足够内存
ffmpeg.wasm默认内存分配可能不足以支撑视频处理,创建实例时指定更大的mem参数(单位为MB):
const ffmpeg = createFFmpeg({ corePath: 'ffmpeg/ffmpeg-core.js', workerPath: 'ffmpeg/ffmpeg-core.worker.js', mem: 2048 // 分配2GB内存,可根据实际需求调整 });
3. 跳过不必要的视频编码
原始命令未指定编码参数,ffmpeg会自动重新编码视频,大幅增加内存占用。添加-c copy参数直接复制流,跳过编码过程:
const command = ['-i', project.video, '-c', 'copy', resultVideo.title];
4. 复用ffmpeg实例避免内存泄漏
如果需要多次调用视频处理函数,建议复用同一个ffmpeg实例,而不是每次创建新实例,减少内存累积。
5. 调整Chrome的WebAssembly内存限制(用户端操作)
若代码优化后仍无效,可让用户调整Chrome设置:
- 打开
chrome://flags - 找到
WebAssembly Maximum Memory选项,设置更大的值(如4GB) - 重启Chrome生效
内容的提问来源于stack exchange,提问作者James Bor
相关产品推荐
相关产品推荐

