概述
webcodes vs ffmpeg 哪个更适合做在线云剪辑?这里我从渲染能力、可交互性、可扩展性三个方面进行分析。综合评估出我们最终的选择方案。
渲染能力
最新的webcodes和webgl技术做视频编码和渲染处理,和传统的ffmpeg.wasm + canvas做音视频编解码渲染来进行对比,我做了一张对比图。
| 特性 | WebCodecs API | ffmpeg.wasm | 优势方 |
|---|---|---|---|
| 性能 | 极高。直接调用浏览器原生编译的编解码引擎(通常用 C/C++ 编写并针对特定硬件优化),效率接近原生应用。 | 中等。虽然 WebAssembly 性能在快速提升,但它本质上是在浏览器的沙箱中运行一个完整的、非优化的 FFmpeg 实例,开销较大,尤其是在复杂操作时。 | WebCodecs |
| 启动速度 | 极快。API 只是一个接口,无需加载任何额外的库或模块。 | 较慢。需要先下载体积庞大的 WASM 模块(通常几 MB 到十几 MB),然后浏览器还要花时间编译和实例化它。 | WebCodecs |
| 内存占用 | 极低。仅占用必要的 JavaScript 堆内存来处理数据结构。编解码操作的内存由浏览器内部管理,不计入 JS 内存限制。 | 较高。WASM 模块本身会占用大量内存,且 FFmpeg 在运行时也需要分配可观的内存来处理音视频流。容易触及浏览器的内存限制。 | WebCodecs |
| 文件体积 | 极小。无需打包任何额外代码,只需要你的业务逻辑 JS 文件。 |
较大。必须将巨大的 WASM 文件(.wasm)和其 JavaScript
胶水代码(.js)一起打包到你的应用中,显著增加了应用的初始加载体积。
|
WebCodecs |
| 格式支持 | 依赖浏览器。支持的编解码器(如 H.264, VP9, AV1, MP3, AAC)和容器格式取决于浏览器的实现。通常是主流和标准化的格式。 | 几乎全部支持。FFmpeg 支持的格式和编码标准非常广泛,包括许多老旧或冷门的格式。你可以在任何支持 WebAssembly 的浏览器中获得一致的、强大的格式支持。 | ffmpeg.wasm |
| 浏览器兼容性 | 一般。是较新的 API,在 Chrome、Edge 等 Chromium 浏览器中支持良好,但在 Firefox 和 Safari 中支持有限或正在逐步实现。 | 良好。只要浏览器支持 WebAssembly(现在几乎所有现代浏览器都支持),ffmpeg.wasm 就能运行。兼容性问题较少。 | ffmpeg.wasm |
可以看到,做云剪辑 ffmpeg.wasm 的优势有:格式支持多、浏览器兼容性好,但是除开这两个有点其他都是缺点。所以我们的无云剪辑选择了webcodes技术,可以看到基于webcodes的云剪辑只能做H.264, VP9, AV1, MP3, AAC编解码,安全起见建议兼容谷歌98及以上版本。
可交互性
采用webcodes+webgl技术大大提升了渲染性能,所以可以看到在编辑视频的时候交互非常流畅,内存的使用量也非常小,可以编辑1G以上的视频,相比其他方案将视频解码存到内存中,大一点视频直接会导致页面崩溃。
基于ffmpeg封装的wasm包在渲染视图的时候会有很高的延迟,比如在拖动元素或者修改文字后,可以明显感觉更新延迟了(延迟大概在1s左右),而基于webgl的渲染方案就不会有延迟,及时快速拖动时间轴,也可以快速更新视图不卡顿。
所以我们的云剪辑的用户体验也会比较好。
可扩展性
要开发ffmpeg的扩展是非常困难的,比如开发一个特效、或者开发一个插件。
插件开发
比如拿动态图表来说,要基于ffmpeg开发一个echart一样的动态图表,先不说性能如何,单单是开发这个插件就是非常困难的。我们的云剪辑采用webgl,可以天然支持canvas动画编码成视频,所以直接集成echarts图表就可以了,无需过多的开发,官方也提供了插件开发的教程[video.h5ds.com/docs/plugin…
特效开发
ffmpeg内置了一些滤镜,但是实际上客户的需求是无止境的,我们需要开发更多的特效,如果要开发ffmpeg滤镜,也是一个非常庞大的工程量,后续也会让ffmpeg包变的越来越大。我们的云剪辑提供了基于webgl的特效开发教程,可以让前端开发快速上手开发特效,特效也是按需加载不用考虑项目臃肿的问题,官方提供了特效开发的教程[video.h5ds.com/docs/effect…
渲染问题
基于webcodes做在线视频渲染也是一种挑战,我们做了服务端渲染和客户端渲染两套解决方案。客户端渲染可以大大降低云剪辑的渲染成本,在制作一些短视频完全可以做到0成本渲染,当前也有缺点,缺点就是受客户端机器性能的影响,有的渲染快,有的慢,服务端基于webcodes + webgl 渲染也有性能上限,我们的测试数据如下:
测试服务器配置如下,单台服务器支持最大并发数量12个:
- 内存:128G
- 显卡:4080super 16G
- CPU:i9
1080P 60FPS视频渲染速度:200帧左右/S,5并发。
1080P 60FPS视频渲染速度:100帧左右/S,10并发。
结束语
webcodes + webgl 是一项非常具有挑战的云剪辑方案,稳定性、内存控制、交互体验 无一不是做到极致,后续也会集成更多的AI功能,做更多的插件和特效,让云剪辑能更好的为大家提供服务,谢谢!
下图是我们的产品无界云剪辑[video.h5ds.com]。