VisioForge
开源 · LGPL v2

GStreamer Metal 插件

Apple 平台上 GStreamer 的 GPU 加速视频处理。七个基于 Metal 的元素以零拷贝、单次 GPU 处理替代 CPU 密集型操作。

什么是 GStreamer Metal?

GStreamer Metal(gst-vf-metal)是一个专业级 GStreamer 插件,为 macOS 和 iOS 提供基于 Metal 的常见 CPU 密集型视频元素实现。它通过 Apple 的 Metal 框架和计算着色器实现显著的性能提升,以最小的 CPU 开销实现实时视频处理。

零拷贝架构

CVMetalTextureCache 消除了冗余的 CPU-GPU 拷贝。元素在配置为默认值时自动跳过 GPU 工作。

单次 GPU 处理

所有滤镜效果(亮度、对比度、色调、色度键、LUT 等)在一次 GPU 调度中应用——效果之间没有中间帧缓冲。

混合格式合成

合成器接受异构输入格式(如 BGRA + NV12 同时使用),并自动进行格式转换。

6 种像素格式

整个元素套件支持 BGRA、RGBA、NV12、I420、UYVY 和 YUY2 像素格式。

GPU 加速元素

🎬

vfmetalcompositor

多输入视频混合与合成

  • 每个焊盘的定位、缩放、Alpha 和 Z 顺序
  • 混合模式:source、over、add
  • 混合格式输入(BGRA + NV12 同时使用)
  • 保持宽高比的尺寸策略
🖥️

vfmetalvideosink

硬件加速视频渲染器和显示

  • GstVideoOverlay 和 GstNavigation 支持
  • 保持宽高比的自动窗口创建
  • 鼠标/键盘事件转发
  • BGRA、RGBA、NV12 和 I420 格式
🎨

vfmetalvideofilter

单个元素中 15 种 GPU 加速视觉效果

  • 颜色:亮度、对比度、饱和度、色调、伽玛
  • 效果:锐度/模糊、棕褐色、反转、噪点、暗角
  • 色度键(绿幕)容差控制
  • 3D LUT 色彩分级(.cube 和 .png 格式)
🔄

vfmetalconvertscale

格式转换与缩放合一

  • 支持所有 6 种格式对(如 NV12→BGRA、UYVY→I420)
  • 双线性和最近邻插值
  • 自定义边框颜色的信箱模式
  • 同时替代 videoconvert 和 videoscale

vfmetaltransform

几何变换

  • 8 种旋转和翻转方法
  • 按边裁剪
  • 无需变换时的恒等直通
  • BGRA、RGBA、NV12 和 I420 格式
📺

vfmetaldeinterlace

GPU 加速去隔行

  • Bob、weave、linear 和 greedy-H 算法
  • 运动自适应去隔行(greedy-H)
  • 自动/手动场序检测
  • BGRA、RGBA、NV12 和 I420 格式
🖼️

vfmetaloverlay

图像合成叠加

  • PNG 和 JPEG 叠加支持
  • 绝对和相对定位
  • 自定义大小与 Alpha 混合
  • BGRA、RGBA、NV12 和 I420 格式

15 种视频效果

所有效果在单次 GPU 处理中应用,可通过 GstController 进行动画:

亮度调节(-1 到 1)

对比度控制(0 到 2)

色彩饱和度(0 到 2)

色调旋转(-1 到 1)

伽玛校正(0.01 到 10)

锐度和模糊(-1 到 1)

棕褐色调效果(0 到 1)

色彩反转

噪点/颗粒叠加(0 到 1)

暗角效果(0 到 1)

色度键(绿幕移除)

色度键边缘容差

色度键边缘平滑度

通过 .cube 文件进行 3D LUT 分级(DaVinci Resolve/Adobe)

通过 .png 条带文件进行 3D LUT 分级

平台支持

macOS

13.0+(Ventura)

动态库(gstvfmetal.dylib)

iOS

14.0+

静态库(libgstvfmetal.a)

常见问题

什么是 GStreamer Metal?

GStreamer Metal 是一个开源 GStreamer 插件,为 macOS 和 iOS 提供 GPU 加速的视频处理元素。它使用 Apple 的 Metal 框架和计算着色器来替代 CPU 密集型的视频操作,在合成、色彩校正、格式转换和去隔行等任务中提供显著更好的性能。

支持哪些平台?

GStreamer Metal 支持 macOS 13.0(Ventura)及更高版本和 iOS 14.0 及更高版本。在 macOS 上构建为动态库(gstvfmetal.dylib),在 iOS 上构建为带有注册头文件的静态库(libgstvfmetal.a)。

支持哪些像素格式?

该插件支持六种像素格式:BGRA、RGBA、NV12、I420、UYVY 和 YUY2。大多数元素支持 BGRA、RGBA、NV12 和 I420,而 vfmetalconvertscale 支持所有六种格式以实现最大转换灵活性。

如何安装插件?

克隆 GitHub 仓库并运行附带的构建脚本(./build.sh)用于 macOS。对于 iOS,使用基于 CMake 的交叉编译配置。生成的库可以放置在 GStreamer 插件路径中以便自动发现。

是否免费?使用什么许可证?

是的,GStreamer Metal 完全免费且开源,在 GNU Library General Public License v2(LGPL v2)下发布。您可以在开源和商业应用中免费使用,无需许可费用。

包含哪些 GStreamer 元素?

该插件提供七个 GPU 加速元素:vfmetalcompositor(视频混合)、vfmetalvideosink(显示)、vfmetalvideofilter(15 种视觉效果)、vfmetalconvertscale(格式转换和缩放)、vfmetaltransform(旋转/翻转/裁剪)、vfmetaldeinterlace(去隔行)和 vfmetaloverlay(图像合成)。

可以在 iOS 应用中使用吗?

可以。对于 iOS,插件构建为静态库(libgstvfmetal.a),附带用于静态注册的 gstvfmetal_static.h 头文件。它与 GStreamer iOS SDK 集成,并支持 iOS 上常用的视频格式。

GPU 处理与基于 CPU 的元素相比如何?

GPU 加速处理相比基于 CPU 的 GStreamer 元素提供显著的性能提升。零拷贝架构和单次处理最小化了数据传输和帧缓冲。元素在恒等值时自动绕过 GPU 工作,确保不需要处理时没有开销。

开始使用 GStreamer Metal

使用 GPU 驱动的 GStreamer 元素加速您在 Apple 平台上的视频处理管道。