如何在JavaScript(非Node.js)中使用FFmpeg?解决createFFmpeg未定义错误
解决浏览器中FFmpeg.js使用报错问题
你遇到的createFFmpeg is not defined错误,核心原因是你引入的Kagami版ffmpeg.js的API和你写的代码不匹配——createFFmpeg是ffmpeg.wasm项目的专属API,而你用的Kagami的ffmpeg.js暴露的是完全不同的全局对象。
正确使用Kagami版ffmpeg.js的步骤:
- 确认全局对象:该库会在浏览器全局环境中注入
FFmpeg对象,而非createFFmpeg函数。 - 初始化与调用示例:
// 创建FFmpeg实例 const ffmpeg = new FFmpeg({ log: true, // 开启日志输出 MEMFS: [], // 内存文件系统,用于存储输入输出文件 }); // 监听FFmpeg加载完成事件 ffmpeg.on('ready', () => { // 示例:处理用户上传的视频文件 const inputFile = document.querySelector('input[type="file"]').files[0]; const reader = new FileReader(); reader.onload = () => { // 将文件写入内存文件系统 ffmpeg.FS('writeFile', 'input.mp4', new Uint8Array(reader.result)); // 执行FFmpeg命令,比如转码为WebM格式 ffmpeg.run('-i', 'input.mp4', '-c:v', 'libvpx', '-crf', '10', 'output.webm'); // 监听命令执行完成事件 ffmpeg.on('exit', (code) => { if (code === 0) { // 读取输出文件并处理 const outputBuffer = ffmpeg.FS('readFile', 'output.webm'); const outputBlob = new Blob([outputBuffer], { type: 'video/webm' }); const downloadUrl = URL.createObjectURL(outputBlob); // 创建下载链接 const downloadLink = document.createElement('a'); downloadLink.href = downloadUrl; downloadLink.download = 'converted.webm'; downloadLink.click(); URL.revokeObjectURL(downloadUrl); } else { console.error('FFmpeg执行失败,错误码:', code); } }); }; reader.readAsArrayBuffer(inputFile); }); // 启动FFmpeg加载 ffmpeg.load();
如果想使用createFFmpeg(ffmpeg.wasm):
若你确实需要createFFmpeg这个API,需替换CDN为ffmpeg.wasm的官方UMD版本,比如:
<script src="https://cdn.jsdelivr.net/npm/@ffmpeg/ffmpeg@0.12.6/dist/ffmpeg.min.js"></script>
此时你的原代码即可正常运行:
const ffmpeg = createFFmpeg({ log: true }); await ffmpeg.load(); // 后续可通过ffmpeg.FS写入文件、ffmpeg.run执行命令等
内容的提问来源于stack exchange,提问作者Laimonas Rupeika
相关产品推荐
相关产品推荐

