多媒体处理框架体验BMF产品体验|社区征文

BMF

开源赛道 1:高效视频处理

BMF 是一套通用的多媒体处理框架,通过提供简洁易用的跨语言接口、灵活的调度和扩展性,以模块化的方式动态扩展、管理和复用视频处理的原子能力。它以 graph/pipeline 的方式构建高性能的多媒体处理链路,同时还可以直接调用单个处理能力实现工程集成,帮助多媒体用户便捷、高效地将项目落地于生产环境。目前主要应用于视频转码、视频抽帧、视频增强、视频分析、视频插帧、视频编辑、视频会议、VR 等领域。

BMF 项目地址:https://github.com/BabitMF/bmf

了解/体验火山引擎多媒体处理框架 BMF,投稿内容可以是:

  1. 在调用部署安装过程中的具体问题和解决方法
  2. 运行 BMF 的体验与反馈,包括优势与不足
  3. 使用 BMF 搭建应用的过程

前文

笔者略懂python,从产品的定义去理解使用BMF ,BMF是一个针对主要针对非结构化文件【即视频、音频】进行编辑操作的多媒体处理框架,BMF的编辑操作分为 TranscodeEditMeeting/BroadcasterCPU+GPU、 accelerationAI一共五部分。

  • 面向对象主要是开发者或者使用者,怎么提供通俗易懂的更友好的五部份相关的API?
  • 更友好的五部分相关的DEMO示例?
  • 参数展开相关的形象立体的解释。

环境配置

I系统CPU内存
Ubuntu 20.04.6 LTSi7-4710HQ *8核12G

安装步骤

安装基础包
​
apt update
apt install -y make \
    git pkg-config \
    libssl-dev \
    cmake binutils-dev \
    libgoogle-glog-dev \
    gcc g++ yasm nasm
​
​
apt install -y python3.9 \
    python3-dev \
    python3-pip
​
​
apt install -y \
    ffmpeg \
    libavcodec-dev \
    libavdevice-dev \
    libavfilter-dev \
    libavformat-dev \
    libavresample-dev \
    libavutil-dev \
    libpostproc-dev \
    libswresample-dev \
    libswscale-dev
    
我这里安装的时候需要  cmake3.1.7
​
https://cmake.org/files/
    
    
tar zxvf cmake-3.1.7.tar.gz
cd cmake-3.1.7
​
cmake .
​
make -j8
​
make install
​
​
把原来的cmake替代
root@henley-Inspiron-7447:~/cmake-3.1.7# update-alternatives --install /usr/bin/cmake cmake /usr/local/bin/cmake 1 --force
update-alternatives: using /usr/local/bin/cmake to provide /usr/bin/cmake (cmake) in auto mode
​

正式下载bmf

git clone  https://github.com/BabitMF/bmf
​
cd bmf
进行编译安装
./build.sh

picture.image

加载bmf相关库和头文件,环境 设置 如下

​
我默认的文件在/root/bmf
​
export pwd=/root/bmf/build
export C_INCLUDE_PATH=${C_INCLUDE_PATH}:$(pwd)/output/bmf/include
export CPLUS_INCLUDE_PATH=${CPLUS_INCLUDE_PATH}:$(pwd)/output/bmf/include
export LIBRARY_PATH=${LIBRARY_PATH}:$(pwd)/output/bmf/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$(pwd)/output/bmf/lib
​
# only set if you want to use BMF in python
export PYTHONPATH=$(pwd)/output/bmf/lib:$(pwd)/output
python进入控制,看是否能够加载相关库
​
import bmf
graph = bmf.graph()

picture.image

DEMO使用

/usr/local/bin有一些现成的命令功能,我的理解就是DEMO,看否能够正常使用。

/usr/local/bin/run_bmf_graph 就可以完成一个视频的转码,使用方式如下

/usr/local/bin/run_bmf_graph    /root/bmf/output/test/run_by_config/config.json
​
​
/root/bmf/input1.mp4是输入, /root/bmf/out.mp4是输出     

config.json的内容如下

{
  "mode": "normal",
  "input_streams": [],
  "output_streams": [],
  "option": {
    "dump_graph": 1
  },
  "nodes": [
    {
      "id": 0,
      "option": {
        "input_path": "/root/bmf/input1.mp4"
      },
      "input_streams": [],
      "output_streams": [
        {
          "identifier": "audio:ffmpeg_decoder_0_2",
          "alias": ""
        },
        {
          "identifier": "video:ffmpeg_decoder_0_1",
          "alias": ""
        }
      ],
      "module_info": {
        "name": "c_ffmpeg_decoder",
        "type": "",
        "path": "",
        "entry": ""
      },
      "input_manager": "immediate",
      "scheduler": 0,
      "meta_info": {
        "premodule_id": -1,
        "callback_bindings": []
      }
    },
    {
      "id": 1,
      "option": {
        "name": "scale",
        "para": "100:200"
      },
      "input_streams": [
        {
          "identifier": "ffmpeg_decoder_0_1",
          "alias": ""
        }
      ],
      "output_streams": [
        {
          "identifier": "ffmpeg_filter_1_0",
          "alias": ""
        }
      ],
      "module_info": {
        "name": "c_ffmpeg_filter",
        "type": "",
        "path": "",
        "entry": ""
      },
      "input_manager": "immediate",
      "scheduler": 0,
      "meta_info": {
        "premodule_id": -1,
        "callback_bindings": []
      }
    },
    {
      "id": 2,
      "option": {
        "name": "vflip"
      },
      "input_streams": [
        {
          "identifier": "ffmpeg_filter_1_0",
          "alias": ""
        }
      ],
      "output_streams": [
        {
          "identifier": "ffmpeg_filter_2_0",
          "alias": ""
        }
      ],
      "module_info": {
        "name": "c_ffmpeg_filter",
        "type": "",
        "path": "",
        "entry": ""
      },
      "input_manager": "immediate",
      "scheduler": 0,
      "meta_info": {
        "premodule_id": -1,
        "callback_bindings": []
      }
    },
    {
      "id": 3,
      "option": {
        "video_params": {
          "width": 320,
          "codec": "h264",
          "crf": 23,
          "preset": "veryfast",
          "height": 240
        },
        "audio_params": {
          "channels": 2,
          "bit_rate": 128000,
          "codec": "aac",
          "sample_rate": 44100
        },
        "output_path": "/root/bmf/out.mp4"
      },
      "input_streams": [
        {
          "identifier": "ffmpeg_filter_2_0",
          "alias": ""
        },
        {
          "identifier": "ffmpeg_decoder_0_2",
          "alias": ""
        }
      ],
      "output_streams": [],
      "module_info": {
        "name": "c_ffmpeg_encoder",
        "type": "",
        "path": "",
        "entry": ""
      },
      "input_manager": "immediate",
      "scheduler": 1,
      "meta_info": {
        "premodule_id": -1,
        "callback_bindings": []
      }
    }
  ]
}

我的使用

我对bmf的了解主要是根据这个

https://babitmf.github.io/docs/bmf/quick_experience/

我想了解 python相关的 api,根据这个

https://babitmf.github.io/docs/bmf/api/api_in_python/

我想了解更多的DEMO使用,根据以下demo目录。

picture.image

demo目录下有更多的使用例子

picture.image

建议改进

  • python api建议以五部分的方式来进行编排分布,再按照工程上的特点来进行分组,再按照功能特点划组织划分
  • python api的api细粒度参数详解,翻看了几个页面,来回 看了很久,感觉只有对api的声明,缺乏具休的参数调整后带来的变化 。
  • DEMO示例已经声明技术环境需要准备什么,但是业务来看光从语言还是没有了解到它所处的业务场景 ,建议用视频的方式来表明这个DEMO的示例和起到的效果是要用来做什么。
  • 作为国内不多的多媒 体框架,建议一个命令工具能够马上测出这个效果出来,现在我来看只有一个run_bmf_graph,这个run_bmf_graph感觉 没有那么好用,不能代表bmf。
  • 建议自带 官方的视频数据集在这里,这样使用后能够快速展现结果,而不是我还要上传一个视频。
164
1
0
0
关于作者
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论