简介:Seedance 2.0提示词指南是一份面向短视频创作者和AI视频爱好者的实操资源,围绕字节跳动即梦平台核心视频模型,系统讲解从基础参数到高阶导演控制的方法。内容以五要素导演法为主线,涵盖主体/角色、动作/剧情、镜头/运镜、场景/氛围/光影、风格/特效/音频的组织逻辑,并给出稳公式模板与@参考标签的使用方式,可解决多参考文件整合、运镜精细控制与物理真实感呈现等痛点。压缩包共3个文件,以HTML页面、Inscode配置及Git忽略规则为主,整体仅14KB,其中HTML承载指南内容,Inscode配置对应可直接运行源码工程。已有960人学习,适合希望从生成废片转向精准控场的AI创作者。通过该包可获得80+可直接复制的提示词模板、基础参数设置建议、高阶玩法与负面提示必加内容,同时借助避坑和进阶心法减少试错,快速提升视频创作质量。
1. Seedance 2.0提示词指南:先看懂「可运行源码」到底在解决什么问题
如果你用过几款文生视频模型,大概会有同感:模型能力越来越强,但出片质量的天花板往往不在模型,而在你给的那段话。Seedance 2.0也不例外。它的底层能力足以支撑10秒、多镜头、带交互动作的高质量视频,但前提是你得把提示词写成它能“读懂”的结构——主体、动作、运镜、风格、环境、光影各归各位,而不是一句华丽的散文。这篇文章要讲的,是一套我能稳定复现的Seedance 2.0提示词写法,以及配套的可运行源码。它适合已经在视频生成工具链上花过时间、想系统提升出片率的从业者,也适合做AI视频工具集成的开发者。你会看到提示词怎么拆、代码怎么调、参数怎么配,以及哪些地方最容易让你翻车。先把提示词这件事当成工程来做,后面出片质量才能谈。
2. 先拆提示词:Seedance 2.0的八段式结构与最小可用模板
2.1 八段式结构:从“一句话”到“分镜脚本”
Seedance 2.0对提示词的解析方式,和Midjourney那类“短词堆叠”不同。它对长句、复合句的语义解析更强,但也不是“越长越好”。我经手过大量出片案例后,总结出一个能覆盖大部分视频诉求的八段式结构:主体、主体动作、动作细节、环境场景、镜头语言、光线氛围、风格材质、画质与帧率约束。八段在提示词里按顺序排列,用逗号或分号隔开,模型对段位顺序的敏感度比你想象的高,尤其是镜头语言,放在动作前面和放在动作后面,出片结果可能是两个方向。
举个例子,一段“女孩在雨中跳舞”的提示词,我一般会写成:一个穿红色雨衣的年轻女孩,在空旷的城市广场上旋转跳舞,雨滴落在雨衣上溅起水花,镜头缓慢推近到她的脸部,阴天冷色调,柔和的环境光,电影感画面。
这里“镜头缓慢推近”放在动作之后,模型会按“先动作后运镜”去理解。如果你把它放在最前面,模型可能把这句当成画面主体描述,导致运镜失效。所以八段式不只是内容清单,更是语序规范。新手最容易犯的错,是把所有修饰词堆在一起,模型不得不自行取舍,结果每个元素都“沾一点”但谁都不完整。
2.2 可运行源码:用Python SDK把提示词变成视频
以下是我在本地跑通的一段最小可运行代码,基于常见的火山引擎方舟SDK,用OpenAI兼容接口调用Seedance 2.0的文生视频能力。先把依赖装好:
pip install volcengine-python-sdk openai然后写一个生成视频的函数。这里的关键不是SDK本身,而是把八段式提示词作为结构化字段传进去的方式:
import json import time from openai import OpenAI client = OpenAI( api_key="<YOUR_API_KEY>", base_url="https://ark.cn-beijing.volces.com/api/v3" ) def seedance_generate(prompt: str, duration: int = 5, resolution: str = "1280x720", cfg_weight: float = 0.8, skill_type: str = ""): """ 调用 Seedance 2.0 文生视频接口 prompt: 八段式结构提示词 skill_type: 可选导演运镜技能,例如 horizontal_move / push / pull """ request_body = { "model": "doubao-seedance-2-0", "content": [ { "type": "text", "text": prompt } ], "duration": duration, # 生成视频时长,可选 4/8/10 "resolution": resolution, # 分辨率,横屏竖屏均可 "cfg_weight": cfg_weight, # 语义跟随强度,0.5~1.0 "watermark": False } if skill_type: request_body["skill_type"] = skill_type response = client.videos.generations.create( **request_body ) return response.id # 返回任务ID,用于轮询结果 task_id = seedance_generate( prompt="一个穿红色雨衣的年轻女孩,在空旷的城市广场上旋转跳舞," "雨滴落在雨衣上溅起水花,镜头缓慢推近到她的脸部," "阴天冷色调,柔和的环境光,电影感画面", duration=8, skill_type="push" ) print("任务ID:", task_id)这段代码的逻辑是:先构造一个符合OpenAI视频接口规范的结构化请求,其中content数组里放文本提示词;duration控制视频长度;skill_type单独传给模型作为导演运镜控制,不混在提示词里。这样做的原因是,Seedance 2.0把“镜头语言”拆成了两个通道——提示词里的文字描述,以及接口层面的技能参数。两者可以配合,但不能互相替代。
参数说明里最值得注意的两个值是cfg_weight和skill_type。cfg_weight控制模型对提示词的忠实程度,调太高(接近1.0)会让画面显得僵硬,每个词都被死死框住;调太低(低于0.6)则模型开始自由发挥,主体可能跑偏。我一般取0.7到0.9之间,偏写实的场景用0.85,偏创意的用0.7。skill_type是Seedance 2.0区别于很多其他模型的特色能力,下一章展开讲。
2.3 参数表:duration、resolution、cfg_weight、skill_type怎么配
| 参数 | 可选值 | 推荐值 | 说明 |
|---|---|---|---|
| duration | 4 / 8 / 10 | 8 | 10秒适合叙事,4秒适合动态封面 |
| resolution | 1280x720 / 720x1280 | 1280x720 | 竖屏用720x1280,构图逻辑完全不同 |
| cfg_weight | 0.5 ~ 1.0 | 0.8 | 语义跟随强度,不是越高越好 |
| skill_type | horizontal_move / push / pull / rotate等 | 按需 | 导演运镜控制,见第3章 |
| watermark | True / False | False | 关闭水印后更方便后续处理 |
一个小经验:如果你生成的是带文字的画面(比如招牌、海报),resolution最好选1280x720以上,同时cfg_weight不要低于0.85,否则模型会把文字糊成乱码。文字类内容对语义跟随强度非常敏感,这是参数组合里最容易被忽略的一组。
3. 镜头语言与导演skill:让提示词具备“运镜控制权”
3.1 skill_type运镜控制:水平移动、推拉、环绕怎么选
Seedance 2.0在接口层面提供了一组导演技能参数,官方把它叫做“导演台”能力。简单说,你可以通过skill_type直接告诉模型“镜头怎么动”,而不需要在提示词里用大段文字描述。我常用的是以下几个:horizontal_move(水平横移,适合展示环境全景)、push(推近,强化主体情绪)、pull(拉远,交代环境关系)、rotate(环绕拍摄,适合产品展示或角色登场)。
选型的逻辑不是“哪个看起来炫”,而是跟你的主体动作匹配。比如主体在做奔跑动作,你选push,镜头追着主体正面推近,观众能看到表情变化;选horizontal_move,镜头跟主体平行移动,适合展示速度感。反过来,主体原地站立转身,你选rotate,出来的效果就像时尚大片;选horizontal_move,画面会显得空。我通常会先定主体动作,再反推镜头怎么配合,而不是先定镜头再想动作。
3.2 把镜头指令写进提示词:模板与组合规则
skill_type和提示词里的镜头文字可以叠加,但要用对方式。如果你的场景需要“先推近再拉远”这样复杂的镜头组合,单靠skill_type一个参数不够,需要在提示词里写成“镜头先缓慢推近到主体面部,再快速拉远展示全景”,同时skill_type留空。反过来,如果你的镜头需求是单一且明确的,比如“缓慢推近”,那么用skill_type="push"更可靠,因为接口级参数对镜头的控制力度比提示词文字强。
我见过不少人把skill_type和提示词里的镜头描述写成互相矛盾的内容,比如skill_type="push"但提示词里写“镜头固定不动”,结果模型输出要么是推近,要么是固定,甚至出现画面抖动。正确的组合方式是二选一,或者让文字描述服务于技能参数:skill_type负责镜头运动方向,提示词里的镜头句负责补充细节,比如“镜头缓慢推近到她的脸部,背景虚化”。这样分工明确,模型不会打架。
3.3 中文提示词的镜头表达:Seedance 2.0对这类词的处理边界
关于中文提示词,Seedance 2.0的中文理解能力在同类模型里算靠前的,类似Flux系列那样能原生理解中文描述,不需要先翻译成英文再生成。但这不代表你可以随意写。它对人称代词和空间关系词的理解仍有边界。比如“镜头从她身后绕到身前”,模型有可能把“身后”理解成画面里的空间位置,导致镜头路径变成“从画面右侧绕到左侧”,而不是三维空间里的环绕。
我一般会把这类空间感较强的镜头描述,拆成“时间顺序 + 画面结果”的两段式写法:“先展示她的背影,然后镜头环绕到正面,能看到她的表情”。用画面结果去引导模型的空间理解,比直接描述镜头轨迹更可靠。如果你需要精确的环绕效果,直接用skill_type="rotate",别在提示词里写“绕到正面”这种模糊表述。
4. 鹈鹕骑自行车测试:文生视频提示词的“压测样例”怎么写
4.1 为什么是鹈鹕骑自行车:动作、姿态、交互与重力的一锅端
“鹈鹕骑自行车”在视频生成圈里已经成了一个经典压测提示词,热度一直没降过。原因是它把文生视频最难解决的几个问题一次全占了:鸟类不是人类,怎么用翅膀控制车把;两条腿怎么踩踏板;喙那么长,会不会戳到车把;整体动作是否符合重力规律;以及最难的——鹈鹕骑车的画面还能不能让人一眼认出是鹈鹕。很多模型在这个提示词上翻车:要么鹈鹕变成鸵鸟,要么自行车变成独轮车,要么翅膀穿模,要么骑两秒就变成人骑车。Seedance 2.0对这类复杂动作的支持比第一代明显更好,但提示词写不好一样会崩。
这个测试的价值在于:你的提示词结构如果能在“鹈鹕骑自行车”这种高难度场景下稳定出片,那常规的商业视频需求基本都能覆盖。我建议每个刚接触Seedance 2.0的人,都先用这个提示词跑一遍,它能暴露你对动作细节描述、姿态约束和语义负责任的把握程度。
4.2 失败写法 vs 能稳定出片的写法(可直接抄的提示词模板)
先把一个失败写法摆出来:“一只鹈鹕在乡村小路上骑自行车。”这种写法模型大概率会生成出各种离谱画面,因为模型不知道鹈鹕用什么部位骑车、车把怎么控制、视角在哪。它只能靠训练数据里关于“骑车”的强先验,最终很可能画成一只鹈鹕站在自行车旁边,或者鹈鹕被绑在自行车上。
能稳定出片的写法,是把动作细节和姿态约束写清楚:
一只白色的大鹈鹕,站在一辆老式黑色自行车上,两只翅膀向前伸展握住车把, 长长的喙伸向前方,两条腿交替踩动踏板,自行车在乡间柏油路上向前行驶, 路两边是绿色的田野,阳光明媚,镜头从侧面跟随拍摄,写实风格,画面平稳,动作流畅对比一下就能看出差别:失败写法里“主体+动作+环境”三段式太粗糙,模型缺少动作细节的锚点。稳定写法里,我加了三组关键信息:第一组是“翅膀握住车把”“腿踩踏板”,把鹈鹕的肢体和自行车的部件绑定;第二组是“喙伸向前方”,把鹈鹕特有的长喙处理成姿态的一部分,而不是障碍;第三组是“镜头从侧面跟随拍摄”,避免模型在正面视角下处理不好喙和车把的空间关系。侧面视角是所有视角里对长喙动物最友好的。
4.3 用帧率与时长反推动作密度
选4秒还是8秒,在鹈鹕骑自行车这类场景里是有讲究的。4秒视频约120帧,适合表现“骑过来”这一组动作;8秒视频约240帧,模型会不得不补很多中间帧,如果动作密度不够,画面就会出现原地踏步式的“假骑行”。我一般会在提示词里加上“动作流畅”“持续前进”这类节奏词,同时用duration=4来降低动作崩坏概率。如果你确实需要8秒,建议在提示词里增加一个转折动作,比如“骑行过程中鹈鹕稍微转头看向镜头”,给模型一个可发挥的动作节点,而不是让它硬拉长同一组动作。
这也是Seedance 2.0一个很有意思的特点:它生成的视频时长越长,对提示词里动作信息的数量要求就越高。你给4秒视频写80字提示词可能够了,给10秒视频就得写到150字以上,否则画面内容撑不满时长。动作密度的估算方法很简单:一个提示词里描述的动作事件数量,乘以1.5秒每个事件,就是你能撑满的画面时长。三个动作事件大概撑到4到5秒,六个动作事件可以试试8到10秒。把握这个节奏,你就不会生成出“一个动作拖10秒”的尴尬画面。
5. 提示词工程避坑:Seedance 2.0里最容易翻车的5个细节
5.1 提示词超过200字:主体漂移与元素丢失
现象:提示词写得非常详细,从主体到道具到背景到光线都铺满,结果生成出来主体角色变了样,次要道具直接消失。
原因:Seedance 2.0对长提示词的解析虽然先进,但它也存在注意力分配的天花板。超过200字后,后面写的内容被模型“选择性遗忘”的概率急剧上升。尤其是放在后面的光线氛围、环境细节,往往是最先被丢掉的。
解决:把八段式结构当成裁剪原则。超过200字就删,优先保留主体动作段和镜头段,环境段压缩成不超过10个字。我自己的标准是:一段成片提示词控制在120到180字,超过就往画面质感上做减法。
5.2 中文提示词里写“镜头特写”:被当成画面内容
现象:提示词里写“镜头特写”,生成结果不是特写,而是画面里出现了一个镜头、一台摄像机,甚至一个人的眼睛占据整个屏幕。
原因:Seedance 2.0的中文解析虽然能理解“镜头”在影视语境里的意思,但如果你把“镜头特写”和主体的距离拉太开,模型会把它当作画面里的独立物件去生成。
解决:改用接口参数skill_type,或者把“特写”描述成画面结果,比如“画面中只有她的脸部,背景完全虚化”。用画面内容去描述镜头效果,比用影视术语更安全。这条同样适用于“推近”“拉远”“俯拍”这类词,能避就避,不能避就用画面结果写。
5.3 skill_type与prompt镜头指令冲突:运镜互相打架
现象:skill_type="push",提示词里又写“镜头固定不动,远处拍摄”,生成结果出现画面先推近后跳切,或者镜头抖动明显。
原因:接口参数运镜和文字运镜走了不同的控制通路,模型对两边的指令都采信了,但没有把它们当作一条连续运动来融合。
解决:单一运镜用skill_type,复杂运镜留空skill_type只写文字。永远不要让两个通道做同一件事,也不要让它们互相矛盾。这个坑我踩过不下十次,后来养成习惯:先想清楚这条片子是靠“参数运镜”还是“文字运镜”,再动手写提示词。
5.4 没有负面提示词:用“规避词”反向约束
现象:Seedance 2.0没有独立的负面提示词参数,你没法像做图模型那样写“no extra fingers, no blurry face”这类负面描述。很多人不知道这一点,把负面描述写进正向提示词里,结果越描越黑。
原因:当你写“不要模糊”,模型仍然会去解析“模糊”这个视觉概念,然后生成出带模糊的画面——这就是典型的“否定词陷阱”。
解决:用“规避词”代替“否定词”。想避免模糊,就写“画面锐利清晰”;想避免多手指,就写“正常的五根手指,动作自然”。把你想规避的东西,用正面描述写出来。我在提示词工程里一直在用正向描述做约束,效果比负面写法稳定得多。
5.5 图生视频的提示词:别把参考图内容再写一遍
现象:图生视频模式下,提示词把参考图里已经存在的内容又仔细描述了一遍,结果生成出来的视频主体虽然和图一致,但动作几乎没有,或者画面和原图差距过大。
原因:图生视频的输入图本身就是最强的主体约束,提示词再重复一遍主体,相当于模型同时接收了图片和文字两个来源,当两者有细微不一致时,模型不知道该听谁的,结果反而破坏了原图的稳定性。
解决:图生视频的提示词只写“动态信息”——主体要做什么动作、镜头怎么动、环境里有什么变化。比如参考图是一只坐在窗台上的猫,提示词应该写“猫转头看向窗外,耳朵轻微抖动,阳光从窗外照进来,镜头缓慢推近”,而不是“一只橘色的猫坐在窗台上”。动态信息才是图生视频提示词的价值所在。
6. 用权重语法与批量验证:把提示词调出“可复用”的颗粒度
如果你已经能稳定出片,下一步是把单个提示词沉淀成一套模板。我推荐两个进阶技巧,成本不高但收益明显。第一个是权重语法。Seedance 2.0支持在提示词里用(词:权重)的方式对某个元素做加权或降权,比如(红色雨衣:1.2)表示提高雨衣元素的权重,(背景路人:0.5)表示降低路人的存在感。这个语法在做多元素场景时特别好用,它能解决“提示词里写了但模型没生成出来”的痛点——不是靠加字数,而是靠权重去拉模型的注意力分配。
第二个技巧是批量验证。手动一条条改成片效率太低,我通常把提示词模板化,跑一个脚本批量生成多个变体,对比效果后再定稿:
import itertools def build_prompt(subject, action, camera, style): return f"{subject},{action},{camera},{style},画面平稳,动作流畅" subjects = ["一只白色的大鹈鹕", "一只褐色的鹈鹕"] actions = ["翅膀握住车把骑行在乡间小路", "站在自行车上滑行"] cameras = ["镜头从侧面跟随拍摄", "镜头固定正面拍摄"] styles = ["写实风格,阳光明媚", "电影感,黄昏暖色调"] # 生成4组组合,批量提交生成任务 for combo in itertools.product(subjects, actions, cameras, styles): prompt = build_prompt(*combo) task_id = seedance_generate( prompt=prompt, duration=4, cfg_weight=0.85, skill_type="horizontal_move" if "侧面" in combo[2] else "" ) print(f"提示词: {prompt}\n任务ID: {task_id}\n")这个脚本的核心思路是:把提示词模板里的变量拆出来,用穷举组合的方式跑多个变体,然后只挑效果最好的那组沉淀到项目模板里。代码里的seedance_generate复用了第2章的函数,组合逻辑用itertools.product实现,按变量数量自动生成全部组合。我用这个方式调过“鹈鹕骑自行车”的提示词,从4组变体里筛出了最稳出片的一组,之后直接复用。用批量验证替代玄学调参,是我调Seedance 2.0以来的最大习惯转变。单条出片有运气成分,但批量出片率的分布不会骗人,多跑几组对比,你会对自己写的提示词结构有更客观的判断。希望这些方法和踩过的坑能帮到你。
本文还有配套的精品资源,点击获取