使用ffmpeg-worker-mp4提取MP4视频流时遇h264格式错误求助
解决FFmpeg Worker中"Requested output format 'h264' is not a suitable output format"错误
我来帮你排查这个问题——命令行能正常运行但Worker里报错,核心问题出在你对FFmpeg Worker的MEMFS用法理解上,还有输出文件的初始化逻辑有误。
错误原因分析
- MEMFS中提前传入未初始化的输出文件:你在
MEMFS数组里预先放了{ name: 'test.h264', data: output },但output一开始是undefined,这会干扰FFmpeg Worker对输出文件的创建逻辑,导致它无法正确识别指定的输出格式。 - 输出文件无需预先在MEMFS中声明:FFmpeg Worker会根据你传入的命令参数自动生成输出文件,完全不需要提前在MEMFS里占位。
修正后的代码
async onFileSelected(event: Event) { const file: File = (event as any).target.files[0]; console.log(file); const sourceBuffer = await file.arrayBuffer(); const worker = new Worker('ffmpeg-worker-mp4.js'); worker.onmessage = function (e) { const msg = e.data; switch (msg.type) { case 'ready': worker.postMessage({ type: 'run', MEMFS: [ { name: 'test.mp4', data: sourceBuffer }, // 移除预先声明的输出文件,让Worker自动生成 ], arguments: [ '-i', 'test.mp4', '-c:v', 'copy', '-bsf:v', 'h264_mp4toannexb', '-an', '-f', 'h264', 'test.h264', ], }); break; case 'stdout': console.log(msg.data); break; case 'stderr': console.log(msg.data); break; case 'done': console.log(msg.data); // 从返回的MEMFS中提取生成的h264文件 const outputFile = msg.data.MEMFS.find(item => item.name === 'test.h264'); if (outputFile) { console.log('提取的视频流数据:', outputFile.data); // 这里可以对outputFile.data(ArrayBuffer格式)做后续解码处理 } break; } }; }
额外注意点
- 确保你的
ffmpeg-worker-mp4.js编译时包含了H.264相关的编码器/复用器(既然命令行能正常运行,这部分大概率是没问题的)。 - 你原命令里的参数是完全正确的:
-f h264指定输出为原生H.264流,搭配h264_mp4toannexb比特流过滤器,刚好能把MP4里的AVCC格式转换为适合解码的Annex B格式。
内容的提问来源于stack exchange,提问作者Dániel Barta
相关产品推荐
相关产品推荐

