DepthAnything V2 · 时序平滑 · 双边滤波 · Seedance 素材工厂

检测服务中...
🎬

拖入视频 或 点击选择文件

MP4 / WebM / MOV  ·  固定机位效果最佳

原始
深度图
调整参数实时预览
处理进度
准备中...0%
生成结果

🔗 DepthFlow → Seedance 2.0 工作流

用本工具生成的深度视频作为运动参考,配合一张人物图片,让 Seedance 2.0 把静态角色按深度视频的动作动起来——人物动作自然跟随,边缘干净,不崩脸。

1

准备人物图片

一张清晰的正面/半身人物照,白色或纯色背景最佳。光线均匀、五官清晰。可以是真实照片、AI 生成的角色图、或手绘稿。建议用 GPT Image 2 先生成角色设定图,保证一致性。

2

上传深度视频作为运动参考

把 DepthFlow 生成的深度视频上传到 Seedance 2.0 的参考视频槽位。深度视频定义了画面中每个像素的远近关系,Seedance 会把它解读为运动轨迹——近处(白色)= 前景运动,远处(黑色)= 背景静止。

💡 关键:Seedance 要求单帧像素在 409,600 ~ 8,295,044 之间(约 640×640 ~ 4K)。本工具分辨率下限已限制为 640p,960p/15fps 完全够用,文件小上传快。

3

在 Seedance 中绑定引用

使用 @ 引用系统标注你的素材:

@图片1 = 你的人物图片    @图片2 = 场景背景图(可选)   @视频1 = 你的深度视频

提示词中用 @图片1 指代角色、@图片2 指代场景、@视频1 指代动作来源。

4

写提示词 — 复制下面的模板

以下是经过验证的角色动画提示词模板,直接复制到 Seedance 使用:

@图片1 角色 @视频1 动作 人物动画
16:9 电影镜头,@图片1 中的角色执行 @视频1 中的动作,
角色的身体和四肢精确跟随深度视频中的运动轨迹,
保持角色面部、服装、发型完全不变,
真实人体比例,自然流畅的动作衔接,
电影级布光,浅景深虚化背景,
高质感 4K,无抖动无变形。
@图片1 角色 @视频1 动作 舞蹈/动作
竖屏 9:16,@图片1 中的人物完整复现 @视频1 的舞蹈动作,
身体律动、四肢摆动、重心转移都与参考视频同步,
面部特征锁定,服装随动作自然飘动,
舞台灯光从上方打下,背景暗色干净,
动态模糊适度,帧率流畅,无水印无字幕。
@图片1 角色 @视频1 动作 慢镜头/氛围
宽幅电影 21:9,@图片1 中的角色以慢动作演绎 @视频1 的动作,
每个姿态清晰可辨,运动轨迹平滑流畅,
柔和的自然光从侧面打入,空气中微尘飘浮,
电影胶片质感,轻微颗粒,高动态范围,
保持角色身份完全一致,无面部扭曲。
@图片1 角色 @视频1 动作 2D 动画
2D 动画风格,@图片1 中的角色形象完整执行 @视频1 的动作,
扁平色彩,干净线条,赛璐璐着色,
角色表情跟随动作变化,头发和衣物自然摆动,
纯色背景或简单场景,日本动画美学,
无额外角色,无场景切换。
@图片1 角色 @图片2 场景 @视频1 动作 都市街景
16:9 都市街景,@图片1 中的角色在 @图片2 的城市街道上执行 @视频1 的动作,
背景霓虹灯招牌和玻璃幕墙大厦,地面雨后反光,
行人稀疏模糊经过,暖黄路灯与冷蓝霓虹形成对比光,
电影级构图,浅景深突出人物,35mm 镜头感,
角色与场景光照融合自然,服装细节完整。
@图片1 角色 @图片2 场景 @视频1 动作 自然户外
16:9 户外自然场景,@图片1 中的角色在 @图片2 的树林/草地上执行 @视频1 的动作,
金色逆光从树叶间洒落,发丝边缘发光,
远景虚化的树木和山峦,前景轻微飘动的草叶,
自然色调温暖柔和,纪录片质感,
角色与环境光照融合,动作自然流畅。
@图片1 角色 @图片2 场景 @视频1 动作 室内影棚
竖屏 9:16,@图片1 中的角色在 @图片2 的影棚布景前执行 @视频1 的动作,
三点布光——主光从45度打下、辅光柔化阴影、轮廓光分离人物与背景,
白色无缝地面有轻微倒影,
中景镜别,画面干净高级,商业广告质感,
服装面料纹理清晰,角色与场景光照一致。
@图片1 角色 @图片2 场景 @视频1 动作 科幻/奇幻
宽幅 21:9,@图片1 中的角色在 @图片2 的赛博朋克环境中执行 @视频1 的动作,
全息投影广告牌和悬浮飞行器构成背景,冷色调金属质感,
体积光照穿过雾气和蒸汽,粒子特效漂浮在空中,
科幻电影级别渲染,精密机械细节,电致发光线条勾勒建筑边缘,
角色与场景光效融合,服装材质反射环境光。

⚠️ 踩坑经验(省你 50 次重试)

  • 一个镜头只做一件事 — 不要同时要求镜头推拉 + 角色大动作 + 背景变化,Seedance 会崩
  • 单次生成 ≤ 8 秒 — 长视频拆成多个片段,每个片段独立生成再拼接
  • 角色一致性靠参考图 — 所有片段用同一张人物图 + @图片1,不要每段换图
  • 深度视频的质量直接影响动作质量 — 如果深度视频闪烁严重,Seedance 输出的动作也会抖动。把本工具的「时序平滑」调到 0.8+
  • 背景干净的角色图效果远好于复杂背景 — 上传前用去背景工具处理一下
  • 风格描述放在提示词最前面 — Seedance 对开头 20 个字最敏感
  • 第一帧和最后一帧可以锁图 — 如果你有起止姿态的关键帧图,Seedance 2.0 支持首尾帧绑定
  • 免费额度够用 — Seedance 免费计划每天有积分,日常实验完全够,别一上来就充钱
📡 连接状态
未启动
💻 本地客户端
1

配置服务器信息

控制端口 映射端口
2

下载 frp 客户端

自动下载到本地 frp/ 目录

3

启动隧道

将本地 8765 映射到公网端口

📋 运行日志
等待操作...
🖥 服务器端 — SSH 登录后执行

复制脚本到服务器执行

自动下载 frps、创建配置、启动服务(脚本使用上面填写的服务器参数生成)

请先在「配置服务器信息」中填写IP并保存

📡 DepthFlow API 文档

所有接口均可通过 HTTP 调用,支持异地编程访问。参数说明中 str / int / float 为期望类型。

返回服务状态、GPU/CPU 设备、模型是否加载完毕。

curl http://127.0.0.1:8765/api/health

# 返回:
# {"status":"ok","device":"cuda","model_loaded":true}

上传视频文件,返回视频元信息和 video_id。后续所有操作依赖此 ID。

curl -F "video=@你的视频.mp4" http://127.0.0.1:8765/api/upload

# 返回:
# {"video_id":"a1b2c3d4e5","width":1920,"height":1080,
#  "duration":12.5,"fps":30.0,"frameCount":375,"filename":"你的视频.mp4"}

获取指定时间点的深度预览图(PNG)。所有参数可选,返回 image/png 二进制流。

curl -X POST http://127.0.0.1:8765/api/preview/a1b2c3d4e5 \
  -F "frame_time=3.5" \
  -F "gamma=1.0" \
  -F "contrast=1.0" \
  -F "temporalSmooth=0.3" \
  -F "edgePreserve=70" \
  -F "fgBoost=0" \
  -F "maxRes=960" \
  -o preview.png

# 参数说明:
# frame_time:  时间戳(秒), 默认0
# gamma:       伽马, <1提亮 >1压暗, 默认1.0
# contrast:    对比度, 默认1.0
# temporalSmooth: 时序平滑, 0~0.8, 默认0.3 (单帧预览此参数无效)
# edgePreserve: 边缘保真, 20~140, 默认70
# fgBoost:     背景压暗, 0~0.7, 默认0
# maxRes:      分辨率上限, 640~1920, 默认960

启动完整视频处理任务,返回 task_id 用于轮询进度和下载。

curl -X POST http://127.0.0.1:8765/api/process/a1b2c3d4e5 \
  -F "gamma=1.0" \
  -F "contrast=1.0" \
  -F "temporalSmooth=0.3" \
  -F "edgePreserve=70" \
  -F "fgBoost=0" \
  -F "maxRes=960" \
  -F "outFps=24" \
  -F "seedanceMode=false"

# 返回:
# {"task_id":"f8e7d6c5"}

# 参数含义同上, 额外:
# outFps:      输出帧率 24~30, 默认24
# seedanceMode: 伪彩色深度图 true/false, 默认false

轮询任务状态。status=processing 时带帧数和进度百分比,status=done 时处理完成。

curl http://127.0.0.1:8765/api/progress/f8e7d6c5

# 处理中:
# {"status":"processing","frame":120,"totalFrames":300,"progress":40}

# 完成:
# {"status":"done","frame":300,"totalFrames":300,"progress":100,
#  "output":"output/f8e7d6c5.mp4"}

# 出错:
# {"status":"error","message":"错误详情"}

下载处理完成的视频文件。task_id 也可以用 output/ 目录下的文件名(不含扩展名)。

curl -O http://127.0.0.1:8765/api/download/f8e7d6c5
# 下载为 depthflow.mp4

返回最近 20 条已生成视频的列表。

curl http://127.0.0.1:8765/api/history

# 返回:
# [{"name":"f8e7d6c5.mp4","size":3385922,
#   "mtime":1751792416.0,
#   "url":"/api/download/f8e7d6c5"}, ...]
import requests, time
BASE = "http://127.0.0.1:8765"

# 1. 上传
r = requests.post(f"{BASE}/api/upload", files={"video": open("input.mp4","rb")})
vid = r.json()["video_id"]

# 2. 处理
r = requests.post(f"{BASE}/api/process/{vid}",
  data={"gamma":1.0,"contrast":1.0,"temporalSmooth":0.3,
        "edgePreserve":70,"fgBoost":0,"maxRes":960,"outFps":24})
tid = r.json()["task_id"]

# 3. 轮询
while True:
    p = requests.get(f"{BASE}/api/progress/{tid}").json()
    print(f"进度: {p.get('progress',0)}%")
    if p["status"] == "done": break
    time.sleep(2)

# 4. 下载
r = requests.get(f"{BASE}/api/download/{tid}")
with open("depth_output.mp4","wb") as f: f.write(r.content)
print("完成!")