音频滤镜处理
更新时间:2026-05-18
音频滤镜处理
简介
音频滤镜处理算子,通过 FFmpeg 的 audio filter 机制对音频施加任意滤镜(音量调整、高通/低通滤波、降噪等),适用于音频预处理场景。
功能描述
- 封装 FFmpeg audio filter 接口,支持任意 FFmpeg 内置音频滤镜
- 支持 volume、highpass、lowpass、equalizer、aecho 等常用滤镜
- 支持本地路径输入或二进制数据输入
- 可选择同时返回处理后音频的二进制内容
- 可指定输出音频格式,默认保留原始格式
- 可将处理结果上传至 BOS 存储目录
算子参数
输入
| 输入 | 含义 |
|---|---|
| audio_paths | 音频文件路径数组(可选,与 audio_binaries 二选一) |
| audio_binaries | 音频二进制数据数组(可选,与 audio_paths 二选一) |
| audio_formats | 音频格式标识数组,如 "mp3"(binary 输入时需提供) |
| output_basenames | 输出文件基名数组(可选) |
输出
| 输出字段 | 类型 | 含义 |
|---|---|---|
| processed_audio_path | string | 处理后的音频文件路径 |
| processed_audio_binary | binary | 处理后的音频二进制内容(仅 output_audio_binary=True 时有值) |
参数
| 参数名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| filter_name | str | (必填) | FFmpeg 音频滤镜名称,如 "volume"、"highpass"、"lowpass"、"aecho" |
| filter_kwargs | dict 或 None | None | 传给滤镜的参数字典,如 {"volume": 1.5}、{"frequency": 200} |
| global_args | list[str] 或 None | None | FFmpeg 全局参数列表(如 ["-loglevel", "quiet"]) |
| output_bos_dir | str | "" | 输出上传目标 BOS 目录,为空则保存到本地 |
| output_audio_binary | bool | False | 是否同时返回处理后音频的二进制内容 |
| output_audio_format | str 或 None | None | 输出音频格式,None 表示保留原始格式 |
调用示例
Plain Text
1from __future__ import annotations
2
3import os
4
5import daft
6from daft import col
7
8from daft.aihc.common.udf import aihc_udf
9from daft.aihc.functions.audio.audio_ffmpeg_wrapped import AudioFFMPEGWrapped
10
11if __name__ == "__main__":
12 if os.getenv("DAFT_RUNNER", "native") == "ray":
13 import ray
14 ray.init(dashboard_host="0.0.0.0", ignore_reinit_error=True)
15 daft.set_runner_ray()
16 daft.set_execution_config(actor_udf_ready_timeout=6000, min_cpu_per_task=0)
17
18 samples = {
19 "audio_path": [
20 "/tmp/test_speech1.mp3",
21 "/tmp/test_speech2.mp3",
22 ]
23 }
24 ds = daft.from_pydict(samples)
25
26 # 示例:将音量放大 1.5 倍
27 constructor_kwargs = {
28 "filter_name": "volume",
29 "filter_kwargs": {"volume": 1.5},
30 "output_audio_binary": False,
31 }
32 ds = ds.with_column(
33 "processed",
34 aihc_udf(
35 AudioFFMPEGWrapped,
36 construct_args=constructor_kwargs,
37 num_cpus=1,
38 concurrency=2,
39 batch_size=4,
40 )(col("audio_path")),
41 )
42 ds = ds.with_column("processed_path", col("processed")["processed_audio_path"])
43 ds.show()
评价此篇文章
