本页面记录了 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
降噪滤镜展示了一个更复杂的实现。
降噪滤镜:
来源:plugins/obs-filters/noise-suppress-filter.c77-542
视频滤镜处理视频帧,通常通过将源渲染到纹理,应用效果,然后渲染修改后的结果。
来源:plugins/obs-filters/hdr-tonemap-filter.c140-189
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 转换为 SDR | hdr-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
增益滤镜展示了一个直接的音频滤镜实现。
gain_create):分配滤镜数据内存并初始化设置。gain_update):当用户更改滤镜设置时更新设置。gain_filter_audio):将每个音频样本乘以增益因子。gain_destroy):释放已分配的内存。来源:plugins/obs-filters/gain-filter.c22-95
压缩器滤镜展示了一个更复杂的音频处理算法。
压缩器:
来源:plugins/obs-filters/compressor-filter.c294-435
OBS Studio 中的滤镜提供了一种强大的方式来修改音频和视频源。它们遵循基于 obs_source_info 接口的一致实现模式,并具有用于音频和视频处理的专用函数。理解这种架构对于开发新滤镜或修改现有滤镜至关重要。
来源:plugins/obs-filters/obs-filters.c plugins/obs-filters/CMakeLists.txt1-44