菜单

滤镜

相关源文件

本页面记录了 OBS Studio 中音频和视频滤镜的实现。滤镜是应用于源的效果,它们在编码器和输出处理音频或视频输出之前对其进行修改。有关用户角度的滤镜 UI 信息,请参阅 OBS 用户文档。

滤镜系统概述

OBS Studio 中的滤镜被实现为一种特殊类型的源(OBS_SOURCE_TYPE_FILTER),可以附加到其他源上以处理其音频或视频数据。多个滤镜可以串联在一起,每个滤镜接收上一个滤镜的输出作为其输入。

来源:plugins/obs-filters/obs-filters.c

滤镜注册和结构

所有内置滤镜都通过 obs_filters 模块在 OBS 核心中注册。每个滤镜都定义为一个 obs_source_info 结构体,提供各种操作的函数指针。

当模块加载时,每个滤镜都使用 obs_register_source 函数注册到 OBS。

来源:plugins/obs-filters/obs-filters.c42-76

音频滤镜

音频滤镜处理 PCM 音频数据。它们接收包含音频样本的 obs_audio_data 结构体,根据其算法修改这些样本,并返回修改后的结构体。

常见音频滤镜结构

大多数音频滤镜遵循类似的实现模式

来源:plugins/obs-filters/gain-filter.c plugins/obs-filters/noise-gate-filter.c plugins/obs-filters/limiter-filter.c

音频滤镜数据流

音频数据处理通常遵循以下流程

来源:plugins/obs-filters/gain-filter.c50-66 plugins/obs-filters/noise-gate-filter.c110-154

示例:增益滤镜

增益滤镜是最简单的音频滤镜之一。它将每个音频样本乘以用户定义的增益因子。

来源:plugins/obs-filters/gain-filter.c50-66

复杂示例:降噪滤镜

降噪滤镜展示了一个更复杂的实现。

降噪滤镜:

  1. 使用双端队列缓冲输入音频
  2. 分析音频包络
  3. 应用选定的降噪算法(Speex、RNNoise 或 NVIDIA 音频效果)
  4. 缓冲处理后的输出
  5. 返回处理后的音频

来源:plugins/obs-filters/noise-suppress-filter.c77-542

视频滤镜

视频滤镜处理视频帧,通常通过将源渲染到纹理,应用效果,然后渲染修改后的结果。

视频滤镜数据流

来源:plugins/obs-filters/hdr-tonemap-filter.c140-189

示例:HDR 色调映射滤镜

HDR 色调映射滤镜使用不同的算法将 HDR 视频转换为 SDR。

来源:plugins/obs-filters/hdr-tonemap-filter.c140-189

可用滤镜

OBS Studio 包含了各种用于音频和视频源的内置滤镜。

音频滤镜

过滤器描述文件
降噪使用各种算法减少背景噪音noise-suppress-filter.c
压缩器减少音频的动态范围compressor-filter.c
限制器防止音频超过阈值limiter-filter.c
增益增加或减少音频音量gain-filter.c
噪声门将低于阈值的音频静音noise-gate-filter.c
均衡器三段均衡器用于频率调节eq-filter.c
扩展器扩展动态范围(与压缩器相反)expander-filter.c
向上压缩器增加安静声音的音量expander-filter.c
反转极性反转音频波形invert-audio-polarity.c

来源:plugins/obs-filters/obs-filters.c42-76 plugins/obs-filters/data/locale/en-US.ini1-139

视频滤镜

过滤器描述文件
图像遮罩/混合应用遮罩或与其他图像混合mask-filter.c
裁剪/填充调整视频帧的边界crop-filter.c
色彩校正调整颜色属性color-correction-filter.c
应用 LUT应用查找表进行颜色分级color-grade-filter.c
锐化增强图像细节sharpness-filter.c
色度键移除特定颜色(绿幕)chroma-key-filter.c
色彩键移除特定颜色color-key-filter.c
滚动水平或垂直滚动内容scroll-filter.c
GPU 延迟增加视频处理延迟gpu-delay.c
异步延迟增加视频异步延迟async-delay-filter.c
亮度键根据亮度移除图像部分luma-key-filter.c
HDR 色调映射将 HDR 转换为 SDRhdr-tonemap-filter.c

来源:plugins/obs-filters/obs-filters.c42-76 plugins/obs-filters/data/locale/en-US.ini1-139

滤镜实现细节

滤镜生命周期

滤镜的生命周期遵循以下通用模式

来源:plugins/obs-filters/gain-filter.c22-95 plugins/obs-filters/noise-gate-filter.c50-196

音频滤镜实现示例

增益滤镜展示了一个直接的音频滤镜实现。

  1. 初始化gain_create):分配滤镜数据内存并初始化设置。
  2. 更新gain_update):当用户更改滤镜设置时更新设置。
  3. 处理gain_filter_audio):将每个音频样本乘以增益因子。
  4. 清理gain_destroy):释放已分配的内存。

来源:plugins/obs-filters/gain-filter.c22-95

复杂音频滤镜:压缩器

压缩器滤镜展示了一个更复杂的音频处理算法。

压缩器:

  1. 检测音频包络
  2. 根据阈值和比率计算增益衰减
  3. 将增益衰减应用于音频样本
  4. (可选)使用侧链输入进行包络检测

来源:plugins/obs-filters/compressor-filter.c294-435

结论

OBS Studio 中的滤镜提供了一种强大的方式来修改音频和视频源。它们遵循基于 obs_source_info 接口的一致实现模式,并具有用于音频和视频处理的专用函数。理解这种架构对于开发新滤镜或修改现有滤镜至关重要。

来源:plugins/obs-filters/obs-filters.c plugins/obs-filters/CMakeLists.txt1-44