Skip to main content

Babit Multimedia Framework

Project description

BMF - Cross-platform, multi-language, customizable video processing framework with strong GPU acceleration

BMF (Babit Multimedia Framework) is a cross-platform, multi-language, customizable multimedia processing framework developed by ByteDance. With over 4 years of testing and improvements, BMF has been tailored to adeptly tackle challenges in our real-world production environments. It is currently widely used in ByteDance's video streaming, live transcoding, cloud editing and mobile pre/post processing scenarios. More than 2 billion videos are processed by the framework every day.

Here are some key features of BMF:

  • Cross-Platform Support: Native compatibility with Linux, Windows, and macOS, as well as optimization for both x86 and ARM CPUs.

  • Easy to use: BMF provides Python, Go, and C++ APIs, allowing developers the flexibility to code in their favourite languages.

  • Customizability: Developers can enhance the framework's features by adding their own modules independently because of BMF decoupled architecture.

  • High performance: BMF has a powerful scheduler and strong support for heterogeneous acceleration hardware. Moreover, NVIDIA has been cooperating with us to develop a highly optimized GPU pipeline for video transcoding and AI inference.

  • Efficient data conversion: BMF offers seamless data format conversions across popular frameworks (FFmpeg/Numpy/PyTorch/OpenCV/TensorRT), conversion between hardware devices (CPU/GPU), and color space and pixel format conversion.

BMFLite is a client-side cross-platform, lightweight, more efficient client-side multimedia processing framework. So far, the BMFLite client-side algorithm is used in apps such as Douyin/Xigua, serving more than one billion users in live streaming/video playing/pictures/cloud games and other scenarios, and processing videos and pictures trillions of times every day.

Dive deeper into BMF's capabilities on our website for more details.

Quick Experience

In this section, we will directly showcase the capabilities of the BMF framework around six dimensions: Transcode, Edit, Meeting/Broadcaster, GPU acceleration, AI Inference, and client-side Framework. For all the demos provided below, corresponding implementations and documentation are available on Google Colab, allowing you to experience them intuitively.

Transcode

This demo describes step-by-step how to use BMF to develop a transcoding program, including video transcoding, audio transcoding, and image transcoding. In it, you can familiarize yourself with how to use BMF and how to use FFmpeg-compatible options to achieve the capabilities you need.

If you want to have a quick experiment, you can try it on Open In Colab

Edit

The Edit Demo will show you how to implement a high-complexity audio and video editing pipeline through the BMF framework. We have implemented two Python modules, video_concat and video_overlay, and combined various atomic capabilities to construct a complex BMF Graph.

If you want to have a quick experiment, you can try it on Open In Colab

Meeting/Broadcaster

This demo uses BMF framework to construct a simple broadcast service. The service provides an API that enables dynamic video source pulling, video layout control, audio mixing, and ultimately streaming the output to an RTMP server. This demo showcases the modularity of BMF, multi-language development, and the ability to dynamically adjust the pipeline.

Below is a screen recording demonstrating the operation of broadcaster:

GPU acceleration

GPU Video Frame Extraction

The video frame extraction acceleration demo shows:

  1. BMF flexible capability of:

    • Multi-language programming, we can see multi-language modules work together in the demo
    • Ability to extend easily, there are new C++, Python modules added simply
    • FFmpeg ability is fully compatible
  2. Hardware acceleration quickly enablement and CPU/GPU pipeline support

    • Heterogeneous pipeline is supported in BMF, such as process between CPU and GPU
    • Useful hardware color space conversion in BMF

If you want to have a quick experiment, you can try it on Open In Colab

GPU Video Transcoding and Filtering

The GPU transcoding and filter module demo shows:

  1. Common video/image filters in BMF accelerated by GPU
  2. How to write GPU modules in BMF

The demo builds a transcoding pipeline which fully runs on GPU:

decode->scale->flip->rotate->crop->blur->encode

If you want to have a quick experiment, you can try it on Open In Colab

AI inference

LLM preprocessing

The prototype of how to build a video preprocessing for LLM training data in Bytedance, which serves billions of clip processing each day.

The input video will be split according to scene change, and subtitles in the video will be detected and cropped by OCR module, and the video quality will be assessed by BMF provided aesthetic module. After that, the finalized video clips will be encoded as output.

If you want to have a quick experiment, you can try it on Open In Colab

Deoldify

This demo shows how to integrate the state of art AI algorithms into the BMF video processing pipeline. The famous open source colorization algorithm DeOldify is wrapped as a BMF pyhton module in less than 100 lines of codes. The final effect is illustrated below, with the original video on the left side and the colored video on the right.

If you want to have a quick experiment, you can try it on Open In Colab

Super Resolution

This demo implements the super-resolution inference process of Real-ESRGAN as a BMF module, showcasing a BMF pipeline that combines decoding, super-resolution inference and encoding.

If you want to have a quick experiment, you can try it on Open In Colab

Video Quality Score

This demo shows how to invoke our aesthetic assessment model using bmf. Our deep learning model Aesmode has achieved a binary classification accuracy of 83.8% on AVA dataset, reaching the level of academic SOTA, and can be directly used to evaluate the aesthetic degree of videos by means of frame extraction processing.

If you want to have a quick experiment, you can try it on Open In Colab

Face Detect With TensorRT

This Demo shows a full-link face detect pipeline based on TensorRT acceleration, which internally uses the TensorRT-accelerated Onnx model to process the input video. It uses the NMS algorithm to filter repeated candidate boxes to form an output, which can be used to process a Face Detection Task efficiently.

If you want to have a quick experiment, you can try it on Open In Colab

Client-side Framework

Edge AI models

This case illustrates the procedures of integrating an external algorithm module into the BMFLite framework and management of its execution.

sr

Real-time denoise

This example implements the denoise algorithm as a BMF module, showcasing a BMF pipeline that combines video capture, noise reduction and rendering.

sr

Table of Contents

License

The project has an Apache 2.0 License. Third party components and dependencies remain under their own licenses.

Contributing

Contributions are welcomed. Please follow the guidelines.

We use GitHub issues to track and resolve problems. If you have any questions, please feel free to join the discussion and work with us to find a solution.

Acknowledgment

The decoder, encoder and filter reference ffmpeg cmdline tool. They are wrapped as BMF's built-in modules under the LGPL license.

The project also draws inspiration from other popular frameworks, such as ffmpeg-python and mediapipe. Our website is using the project from docsy based on hugo.

Here, we'd like to express our sincerest thanks to the developers of the above projects!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

BabitMF_GPU-0.1.0-cp312-cp312-manylinux_2_28_x86_64.whl (37.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

BabitMF_GPU-0.1.0-cp311-cp311-manylinux_2_28_x86_64.whl (37.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

BabitMF_GPU-0.1.0-cp310-cp310-manylinux_2_28_x86_64.whl (37.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

BabitMF_GPU-0.1.0-cp39-cp39-manylinux_2_28_x86_64.whl (37.5 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ x86-64

BabitMF_GPU-0.1.0-cp38-cp38-manylinux_2_28_x86_64.whl (37.5 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.28+ x86-64

BabitMF_GPU-0.1.0-cp37-cp37m-manylinux_2_28_x86_64.whl (37.5 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.28+ x86-64

BabitMF_GPU-0.1.0-cp36-cp36m-manylinux_2_28_x86_64.whl (37.5 MB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.28+ x86-64

File details

Details for the file BabitMF_GPU-0.1.0-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for BabitMF_GPU-0.1.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 61cce63c09383c06ca79da329d1c7ac303d07c172332a1d6ea688f52fab96c41
MD5 becf5337f7c8c9ebe72a13d3144f7938
BLAKE2b-256 cdb221e2bc660020fd50f7b69c2ad2bc3d0c7f49af2db2333a99d31dcdf56667

See more details on using hashes here.

File details

Details for the file BabitMF_GPU-0.1.0-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for BabitMF_GPU-0.1.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 206b92b47bb1df7649399344bcd0383c25c83f6bd7a68e5cc365ba822e4ec849
MD5 f0ee92978d78df9071ff4918e5d6451b
BLAKE2b-256 a4f24a770dc880b0390e7334635b9f0d19dab0f5d682fd935e486e1a64c09da7

See more details on using hashes here.

File details

Details for the file BabitMF_GPU-0.1.0-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for BabitMF_GPU-0.1.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 66400bccab7e63d4e93c0fcf2d3f09e26cdb1b0e3fbc4ed4f4cfb77734923fb4
MD5 63eafcb8332ffe06e8eb6a84ad38b2bb
BLAKE2b-256 89416c9e0a092ecc3e3e7f935c288d8115ad87248af02bc524e872aac6b5b5be

See more details on using hashes here.

File details

Details for the file BabitMF_GPU-0.1.0-cp39-cp39-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for BabitMF_GPU-0.1.0-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 739ffe2d9da413ff53684ed0270dc8359522aa0d364e78cf48f376edf81cdfc4
MD5 3c421541754c7a65b13eb729fcefce25
BLAKE2b-256 1730dfee10db0794796c5e9310a3aa722a475e932793bd3e88ef676ec3eec55e

See more details on using hashes here.

File details

Details for the file BabitMF_GPU-0.1.0-cp38-cp38-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for BabitMF_GPU-0.1.0-cp38-cp38-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ee33455447172f1c6b344a209b7a5bd9b3bb7010938e50a8e50fa30ebc5f8ad1
MD5 ee5eef0af05b39e34d1dcaee01fb6981
BLAKE2b-256 24e77519bb2e5e4a914bf699b3fc9cf42cfdd9ce5b2181a0ead3e68aa933741d

See more details on using hashes here.

File details

Details for the file BabitMF_GPU-0.1.0-cp37-cp37m-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for BabitMF_GPU-0.1.0-cp37-cp37m-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 86300e5e1ba31258415a1ffde38c4952a2d27794b4cd42172b46007ce235db15
MD5 fd3a7a872a342456aa75b58b1eab188c
BLAKE2b-256 dfa4a3969787fda3976daa4c9a666fa27d3eb03090c919dd5d489778c73d1734

See more details on using hashes here.

File details

Details for the file BabitMF_GPU-0.1.0-cp36-cp36m-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for BabitMF_GPU-0.1.0-cp36-cp36m-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 47b74e0dd2e5903e38ee9a6d5e4f5597218b97d77e69eb5f4706bf8029e3256b
MD5 fe3022218bbf80641a45e9de45819e55
BLAKE2b-256 717f729a569c7972bfca2378ed7ecf372e9040086978d14c9187771878ce4de0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page