SAM 2 可以在视频帧上用点击或矩形框指定对象,再把对象掩码传播到其他帧。它输出的是分帧分割掩码,不是已经去背景的透明视频;这篇教程把掩码应用到原始帧的 alpha 通道,得到可在剪辑软件中继续合成的透明 PNG 序列。
准备帧序列和运行环境
SAM 2 官方项目要求 Python 3.10 或更新版本、PyTorch 2.5.1 及 torchvision 0.20.1 或更新版本,并提供视频预测器示例。先用 FFmpeg 把短片按较低帧率导出成按数字命名的 JPEG 帧,例如:

mkdir frames
ffmpeg -i input.mp4 -vf "fps=5" frames/%05d.jpg
这条命令只用于降低演示素材的计算量;它会丢弃部分原始帧,不能当作完整帧率输出。准备好 SAM 2 官方安装依赖和与所选配置匹配的 checkpoint 后,照项目 notebook 初始化视频预测器与帧目录。
在关键帧框选,再传播到整段视频
inference_state = predictor.init_state(video_path=video_dir)
frame_idx = 0
obj_id = 1
box = np.array([x1, y1, x2, y2], dtype=np.float32)
_, object_ids, mask_logits = predictor.add_new_points_or_box(
inference_state=inference_state,
frame_idx=frame_idx,
obj_id=obj_id,
box=box,
)
video_segments = {}
for out_frame_idx, out_obj_ids, out_mask_logits in predictor.propagate_in_video(inference_state):
video_segments[out_frame_idx] = {
out_id: (out_mask_logits[i] > 0.0).cpu().numpy()
for i, out_id in enumerate(out_obj_ids)
}
把框的坐标改成目标在第一帧中的像素坐标。先查看该帧的掩码;如果把背景也选进来,使用负向点击补充排除区域,或在目标形状变化明显的关键帧再次修正。官方示例通过 propagate_in_video 收集每帧的 mask logits,并以大于 0 作为目标区域。
用掩码制作透明 PNG 并检查
下面的示例将已收集到的掩码与同编号原图合成 RGBA,再写成带透明通道的 PNG。要求 video_segments、obj_id 是上一步生成的对象掩码结果;frames 目录里的帧必须与传给 SAM 2 的输入帧顺序一致。
from pathlib import Path
import numpy as np
from PIL import Image
frame_dir = Path("frames")
out_dir = Path("rgba_frames")
out_dir.mkdir(exist_ok=True)
frame_paths = sorted(frame_dir.glob("*.jpg"))
for frame_idx, frame_path in enumerate(frame_paths):
objects = video_segments.get(frame_idx, {})
if obj_id not in objects:
continue # 此帧没有该对象的掩码
mask = np.asarray(objects[obj_id]).squeeze().astype(bool)
rgb = np.asarray(Image.open(frame_path).convert("RGB"))
if mask.shape != rgb.shape[:2]:
raise ValueError(f"帧 {frame_idx} 的掩码尺寸与原图不一致")
alpha = mask.astype(np.uint8) * 255
rgba = np.dstack((rgb, alpha))
Image.fromarray(rgba, mode="RGBA").save(out_dir / f"{frame_idx:05d}.png")
运行前安装 Pillow(pip install pillow)。检查第 1、1/3、2/3、末帧以及转身和遮挡处:在支持透明背景的查看器中,透明区应显示为棋盘格,主体边缘不应突然跳动。若把抽帧后的 PNG 序列送进剪辑软件,先按实际抽帧率设置帧率;要和原视频同步,还需按同一时间戳重新合成声音与画面。
背景复杂、对象离开画面、镜头剪切或多个物体交叉时,传播的掩码可能漂移;回到出错帧加正向/负向点击并重新传播。SAM 2 的能力是提示式图像/视频分割,不会自动补出被遮挡的真实像素,也不会替你做视频修复。原始视频与透明输出分开保存,确认授权后再发布。
官方资料
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/32026.html