高效视频处理框架 BMF 实践
日常工作主要开发环境是 MAC,在 MAC 下涉及音视频处理用到的主要工具:
音视频播放:VLC、FFPLAY
音视频采集:OBS
音视频编解码处理:FFMPEG、OpenCV
音频处理:Audition
OCR:Mac 自带
其他 AI 相关的音视频处理,比如图像识别,语音转文本,文本转语音,基于商业 API。最近接触到字节开源的高效音视频处理框架 bmf,在 FFMPEG 等流行开源库基础上封装了其他更强大的能力。
bmf 框架是三层设计,底层提供了音视频相关的基础处理滤镜,实时流媒体(WebRtc)处理,3D 处理等,中间框架层提供了各语言基础能力封装,框架的图/管道调度、跨数据类型和跨设备数据传输后端,以及常用的跨设备格式化、色彩空间转换、张量算子等 sdk,接口层提供了多语言的 API 接口。
本文基于 docker 跑通了 bmf 框架,实践了解码和合成功能。
1、环境搭建
日常工作使用的是 Inter 芯片的 Mac 本,基于 docker 环境搭建了 bmf 环境。bmf 提供的 docker 镜像基于 ubuntu 20.04,它包含了运行 BMF CPU 和 GPU 的完整环境依赖:Cuda11.8, Pytorch 2.0, TensorRT 8.6.1, CV-CUDA 0.3。安装完 docker 后执行官方教程命令:
启动 docker 环境:
编译 bmf:
2、跑通 demo
bmf 基于 graph 的方式组织各个模块,使用下面方式构建 graph:
构建完后可以直接使用内置的模块解码视频:
平时如果我们要将一个音频和视频文件合成一个文件,通常使用 ffmpeg 命令:
bmf 官方提供了对应实现:
这里指定了音频参数和视频参数,比 ffmpeg 更灵活,比 ffmpeg 代码实现更便捷。
此外 bmf 还提供了视频增强、实时音视频传输等能力,对于音视频处理绝对是一个宝库,等待着我们去挖掘和尝试。
3、使用感受总结
bmf 的接口框架及接口设计都比较不错,整体体验也比较方便,但是总体上看文档建设有待提高,从能力到最佳实践缺少更详细的描述,针对不同场景和不同端(移动端 or 桌面端 or 服务端)推荐使用方式以详细描述。内部结构和原理也可以多一些介绍,让大家使用时更有数。
总体来说是一个不错的项目,大而全,如果能够对不同场景做更合理的拆分,实用性会更强。
版权声明: 本文为 InfoQ 作者【轻口味】的原创文章。
原文链接:【http://xie.infoq.cn/article/4bba56946712b546ffcd65a0c】。文章转载请联系作者。
评论