
在多媒体编辑领域,音频处理一直是个「玄学」。
如果你有一段录音,里面混杂着人声、背景音乐、汽车喇叭声和狗叫声。你想把 “狗叫声”单独提取出来,或者反过来,你想把除了人声以外的所有声音都静音。
在以前,这需要专业的音频工程师,配合复杂的 EQ(均衡器)、频谱仪和昂贵的降噪插件,甚至手动去画波形,搞半天还不一定干净。
但就在前两天,Meta 甩出了一个王牌模型:SAM Audio,一款统一音频分割模型。
它继承了图像界 Segment Anything 的衣钵,主打一个核心理念:万物皆可分割,声音也不例外。
它和最新的统一多模态视频模型:可灵O1的作用很类似。

只要你给它一个提示(Prompt),它就能像「手术刀」一样,精准地把目标声音从复杂的混合声场中剥离出来。
提示词不限于文本、视觉和时间跨度提示
现在,Meta 这一开源,音频剪辑也可以像编辑视频那样简单了。
如果你对AI视觉领域稍有关注,一定听过 Segment Anything Model(SAM)。
它的核心理念非常简单,但影响深远:
不限定任务,不限定对象,用“提示”来分割一切。
模型就能把你想要的目标分割出来。
SAM Audio 正是把这套思想,完整迁移到了音频世界。
音频,也应该是“Anything”。
SAM Audio 的核心能力,在于它支持 三种互补的提示方式,而且可以单独或叠加使用。
1、文本提示
这是最直观的一种,比如:
模型就会从混合音频中,自动抽离对应的声音轨道。
你第一次可以「用自然语言来剪音频」。
2、视觉提示
当音频来自视频时,SAM Audio 的能力会变得更有意思。
你可以点击视频中发出声音的人或物体,即可单独播放其音频。
模型会结合视觉与音频信息,只提取这个目标对应的声音。
这一步,本质上打通了:
画面理解 → 声音定位 → 音频分割
对于 Vlog、访谈、多角色视频来说,这几乎是梦想级功能。
3、时间跨度提示
这是 SAM Audio 在 业内首创 的一个创新点。恰恰也是一个很容易被忽略、但极其实用的点。
该方法允许你标记目标音频出现的时间段。
你可以明确告诉模型:
“只在 00:30–01:10 这段时间内,处理某个声音。”
这样模型不会「全局扫一遍」,而是聚焦指定时间窗口。意味着会更快、更准、更可控。
4、提示可以叠加使用
真正强的地方在于:它们不是三选一,而是可以组合。
比如:
在指定时间段,点选视频里某个人,再用文本补充“说话声”
这已经不是“音频剪辑”,而是:多模态协作理解 + 精准分割。
这是过去传统音频工具几乎做不到的事。
SAM-Audio 是由 Python 语言100%开发,所以你只需要准备好 Python 3.10 及以上的开发环境和支持CUDA的显卡即可。
下载或克隆代码
git clone https://github.com/facebookresearch/sam-audio.git
cd sam-audio安装依赖
pip install .在正式使用前,还需要下载模型才可,目前推出了三款模型,可自行下载。
1、使用文本提示,即自然语言描述来分离声音。
from sam_audio import SAMAudio, SAMAudioProcessor
import torchaudio
model = SAMAudio.from_pretrained("facebook/sam-audio-large")
processor = SAMAudioProcessor.from_pretrained("facebook/sam-audio-large")
model = model.eval().cuda()
file = "<audio file>" # audio file path or torch tensor
description = "<description>"
batch = processor(
audios=[file],
descriptions=[description],
).to("cuda")
result = model.separate(batch)
# Save separated audio
sample_rate = processor.audio_sampling_rate
torchaudio.save("target.wav", result.target.cpu(), sample_rate) # The isolated sound
torchaudio.save("residual.wav", result.residual.cpu(), sample_rate) # Everything else2、视觉提示,使用掩码视频帧分离视频中与特定视觉对象相关的声音。
import torch
import numpy as np
from sam_audio import SAMAudio, SAMAudioProcessor
from torchcodec.decoders import VideoDecoder
# NOTE: Requires SAM3 for creating masks
# pip install git+https://github.com/facebookresearch/sam3.git
from sam3.model_builder import build_sam3_video_predictor
# Load SAM-Audio model
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = SAMAudio.from_pretrained("facebook/sam-audio-large").to(device).eval()
processor = SAMAudioProcessor.from_pretrained("facebook/sam-audio-large")
# Load video
video_file = "path/to/video.mp4"
decoder = VideoDecoder(video_file)
frames = decoder[:]
# Create mask using SAM3 (example with text prompt)
video_predictor = build_sam3_video_predictor()
response = video_predictor.handle_request({
"type": "start_session",
"resource_path": video_file,
})
session_id = response["session_id"]
masks = []
for frame_index in range(len(decoder)):
response = video_predictor.handle_request({
"type": "add_prompt",
"session_id": session_id,
"frame_index": frame_index,
"text": "The person on the left", # Visual object to isolate
})
mask = response["outputs"]["out_binary_masks"]
if mask.shape[0] == 0:
mask = np.zeros_like(frames[0, [0]], dtype=bool)
masks.append(mask[:1])
mask = torch.from_numpy(np.concatenate(masks)).unsqueeze(1)
# Process with visual prompting
inputs = processor(
audios=[video_file],
descriptions=[""],
masked_videos=processor.mask_videos([frames], [mask]),
).to(device)
with torch.inference_mode():
result = model.separate(inputs)3、跨度提示(时间锚点)
指定目标声音出现或不出现的时间范围。这为模型提供了一个具体的示例,说明需要隔离的内容。
import torch
import torchaudio
from sam_audio import SAMAudio, SAMAudioProcessor
# Load model and processor
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = SAMAudio.from_pretrained("facebook/sam-audio-large").to(device).eval()
processor = SAMAudioProcessor.from_pretrained("facebook/sam-audio-large")
# Define anchors: [type, start_time, end_time]
# "+" means the sound IS present in this time range
# "-" means the sound is NOT present in this time range
anchors = [
["+", 6.3, 7.0], # Sound occurs between 6.3 and 7.0 seconds
]
# Process with span prompting
inputs = processor(
audios=[audio_file],
descriptions=["A horn honking"],
anchors=[anchors],
).to(device)
with torch.inference_mode():
result = model.separate(inputs)多个锚点的示例:
anchors = [
["+", 2.0, 3.5], # Sound present from 2.0 to 3.5 seconds
["+", 8.0, 9.0], # Sound present from 8.0 to 9.0 seconds
["-", 0.0, 1.0], # Sound NOT present from 0.0 to 1.0 seconds
]输出格式:
该 model.separate() 方法返回一个结果对象,其中包含:
result.target:分离出的声音(您所要求的)result.residual:其他一切(剩余部分)两者都是 list[torch.Tensor] 每个张量均为一维波形的情况。
Meta 这次开源 SAM Audio,再次证明了多模态是 AI 的未来。
它打破了视觉和听觉的界限,让“音频编辑”这件事变得像“修图、剪视频”一样可视化、语义化。
从 SAM(图像/视频)到 SAM Audio(音频),你会发现一个明显趋势:
AI 不再只是“生成内容”,而是在重做“操作方式”。
而其统一分割的意义并不是一个功能,而是一种范式。
它更像是在音频领域,第一次明确提出:
音频分割,也可以是统一、可组合、可提示的。
SAM Audio 本质上,就是把“剪声音”这件事,从专业技能,拉回到直觉层面。
后面大多会被许多 AIGC 创作者们应用到 ComfyUI 工作流中,一套连招丝滑剪辑音频。
如果你做内容、做音频、做视频,或者正在研究多模态模型,这个项目都非常值得关注。
GitHub:https://github.com/facebookresearch/sam-audio HF模型:https://huggingface.co/facebook/sam-audio-large

如果本文对您有帮助,也请帮忙点个 赞👍 + 在看 哈!❤️
在看你就赞赞我!
