写点什么

强大的高效视频处理框架——BMF

作者:白日梦
  • 2023-12-31
    山东
  • 本文字数:2688 字

    阅读完需:约 9 分钟

BMF 概述

BMF 是一款强大的跨平台、多语言、可定制的视频处理框架,用起来特别便利和强大,并且支持 GPU 加速。我粗略的体验了一番,BMF 会成为日后工具箱中的重要一员,有了它需要转码时再也不用辛辛苦苦的到处寻找解决方式,最重要的是,它还支持特别多的高级应用,又强大又好用的一门工具。


我去了解了一下 BMF 的架构设计,叹为观止,BMF 从架构设计到实现,涵盖了多种特性致力于解决新时代视频处理所面临的诸多困难。



在我体验后,我认为 BMF 有几个方面深得我心。

  1. 简洁的多语言接口:使用非常方便,只要我安装成功,代码集成度超高,无非复杂配置,轻松就能完成所需。

  2. 文档健全,这很重要,很多应用无需重复造轮子,直接使用官方提供的案例修改即可

  3. 多语言支持,BMF 支持 python、C++、Go 语言,模块与框架之间,模块与模块之间松耦合,解耦度非常高,极大的增强了扩展能力和多元化的协同能力

  4. 成熟可靠,据不成熟统计,该框架每天处理超过 20 亿个视频,在可靠性和稳定好方法都足以信任

  5. 支持 GPU,我认为这是图像处理、视频处理非常关键的一点,可以充分发挥电脑的性能,加速视频的处理过程

  6. 与 AI 结合,这点让我很欣喜,AI 的强大有目共睹,与 AI 结合,自己实现的难度和复杂度不用我多说,借助 BMF,已经可以实现多款 AI 处理方式,我唯一感觉的就是还不够,如果能多几种就更完美了。

本文主要体验了后续我可能会使用的一些功能,真不错

准备工作

在使用 BMF 之前,都需要先创建一个 bmf.graph 对象,这是一切使用的基础。


import bmfgraph = bmf.graph()
复制代码

视频转码

转码分为两步,解码和编码,解码使用的函数是 decode,编码使用 encode。BMF 提供的转码功能非常强大,封装的非常完善,通过简单的参数修改就能完成视频、音频的轻松转码。这点我真是太爱了。


decode 核心参数是待处理视频的路径,一般情况使用这一个参数就可以,decode 方法位于 graph 上。


video = graph.decode({  input_path: input_video_path,});
复制代码


encode 方法则位于 bmf 对象上,参数较复杂一些。video_stream, audio_stream 分别代表视频流和音频流,encoder_para 是编码参数,核心是输出路径。


def bmf.builder.ff_filter.encode (video_stream, audio_stream, encoder_para, type ="", path ="", entry ="", stream_alias =None)
复制代码


然后我们就可以这样使用,下面举一个将 mp4 格式进行 hls 切片,同时不涉及音频和视频部分的解码和编码


bmf.encode(    video['video'],    video['audio'],    {        "output_path": output_path,        "format": "hls",        "mux_params": {            "hls_list_size": "0",            "hls_time": "2",            "hls_segment_filename": "./file%03d.ts"        }    }).run()
复制代码


然后我们可以将 decode 和 encode 一起来进行使用,只处理视频部分,对其进行压缩,同时更换编码方式,这也可以较为轻松的实现。


input_video_path = "./big_bunny_10s_30fps.mp4"output_path = "./decode_scale_encode_output.mp4"(    bmf.graph()        # 只提取视频部分        .decode({'input_path': input_video_path})['video']        # 压缩视频        .scale(720, 576)        .encode(None, {            "output_path": output_path,            # 更换编码格式            "video_params": {                "codec": "libx265"            }        }).run())
复制代码


同样的我们也可以只修改音频部分,前后各自添加一段音频,然后再进行编码。


input_video_path = "./big_bunny_10s_30fps.mp4"output_path = "./with_null_audio.wav"
# create graphgraph = bmf.graph()
# decodestreams = graph.decode({ "input_path": input_video_path})
# 创建空的音频audio_stream1 = graph.anullsrc('r=48000', 'cl=2').atrim('start=0', 'end=6')audio_stream2 = graph.anullsrc('r=48000', 'cl=2').atrim('start=0', 'end=6')# 音频连接concat_audio = ( bmf.concat(audio_stream1, streams['audio'], audio_stream2, n=3, v=0, a=1))
( bmf.encode( # 不处理视频 None, # 只处理音频 concat_audio, { "output_path": output_path, # 使用 wav 编码,实现 mp4 -> wav 的转换 "audio_params": { "codec": "aac", "bit_rate": 128000, "sample_rate": 44100, "channels": 2 } } ) .run())
复制代码

与 AI 结合

除了转码功能外,BMF 还具备很多便捷的功能,最让我赞叹的是与 AI 的结合。下面就官网提供的例子,来一起展望一一下 AI 与 BMF 的强大结合、

老照片上色

老照片上色、历史照片修复这些现在看来都不足为奇,毕竟 AI 做图片还是有一手,BMF 把最先进的着色算法(DeOldify 算法)集成到了 BMG 视频处理中,视频的翻新也变得简单起来。


Step1: 引入 DeOldify 着色算法,也就是 BMF-python 模块,设置 BMF 处理管道(解码-》彩色码-》编码),运行即可。


Step2:AI 视频处理是十分消耗性能的,需要庞大的算力,建议开启 GPU。


torch.cuda.is_available()
复制代码


Step3: 设置 BMF 管道的执行顺序


graph = bmf.graph()
video = graph.decode({"input_path": input_video_path})
# 核心部分,对解码后的视频执行着色算法output_video = video['video'].module( 'py_deoldify_module', option={"model_path": model_weight_path})# 编码bmf.encode( output_video[0], None, {"output_path": output_video_path} ).run()
# 定义管道def show_video(video_path, video_width = 800):
video_file = open(video_path, "r+b").read()
video_url = f"data:video/mp4;base64,{b64encode(video_file).decode()}"
return HTML(f"""<video width={video_width} controls><source src="{video_url}"></video>""")
复制代码


太强了,只需要在原有的视频转码过程中,加入对 DeOldify 算法,就可以轻松实现视频的翻新。


其他应用

有了视频翻新的理念,其他的 AI 实现就比较好理解了,例如超分辨率便是在视频的转码过程中,结合 RealESRGAN 推理算法,借助通道就可以轻松实现。把握住转码的核心流程线,很多日常中比较复杂的视频处理都可以借助 BMF 来进行简化。

总结

BMF 真的是真好对了我的口味,作为一项多媒体处理框架,这是一项非常成熟和可靠的框架,它支持多语言、异构计算,GPU 和 CPU 并行处理,与 AI 进行结合,完全兼容 FFmpeg,搭建了一套完整的体系,对于多媒体处理领域是极大利好。

发布于: 4 小时前阅读数: 5
用户头像

白日梦

关注

还未添加个人签名 2022-03-10 加入

还未添加个人简介

评论

发布
暂无评论
强大的高效视频处理框架——BMF_视频处理_白日梦_InfoQ写作社区