跳到主内容
快讯直播
AI智模界
教程

用可灵4.0做多镜头一致短片:首尾帧接续与角色沿用

这篇能做出什么

照着做一遍,你会得到一条 6~10 个镜头的短片:同一个角色从头演到尾,脸型、发型、服装在不同镜头里对得上;镜头之间用「上一镜的尾帧 = 下一镜的首帧」硬接,或者用跨镜动作自然过渡;最后用 ffmpeg 拼成一条画幅、帧率统一的成片,可以直接发到短视频平台或放进提案里。

下面用一条 30 秒、6 个镜头的示例短片串起来讲:雨天傍晚,角色在巷口等人 → 抬头看天 → 转身 → 走进便利店 → 从货架上拿起一把伞 → 推门走进雨里。

每个镜头 5 秒上下,全程大约需要 15~25 次生成(含废片重试)。角色只有一个,场景只有两个(巷口、便利店),这样能把「一致性」的变量压到最少。

需要提前说清楚:可灵的入口名称、单镜可用时长、分辨率档位、消耗规则都会随版本调整,动手前以官方页面当前版本为准。下面的流程是通用的,换任何一版界面都能套。

前置条件清单

账号与额度

  • 可灵账号,积分或会员额度够跑 20 次以上生成。建议先用最低档分辨率和最短时长试片,定稿后再用高规格重跑。

素材

  • 角色定妆图 1~3 张:正面为主,光线均匀,背景干净,全身或大半身。如果能出侧面和背面各一张,跨镜时更稳。
  • 场景参考图 2 张:巷口、便利店各一张。风格、色调、时间段要统一。
  • 可选:关键道具图(比如那把伞),道具颜色一旦定下来就别改。

本地工具

  • 一个能跑命令行的地方,装好 ffmpeg 和 ffprobe(打包版本即可)。
  • 一个文本编辑器,用来维护角色卡和分镜表。
  • 一个文件夹结构,建议长这样:

```text

project/

├── refs/ # 角色与场景参考图

├── frames/ # 生成的首帧、尾帧静帧

├── shots/ # 每个镜头的原始视频

├── norm/ # 统一规格后的视频

└── out/ # 最终成片

```

一次性定下来的规格

  • 画幅:16:9 或 9:16,全片不许中途换。
  • 分辨率:先按 1280×720 跑通,定稿再上更高档。
  • 帧率:24 或 25,全片统一。
  • 单镜时长:5 秒起步。时长越长越容易崩,尤其是人物转身、走动这类动作。

分步骤

第 1 步:写分镜表,把「一致性」变成能核对的数据

一致性不是靠感觉,是靠一张能逐行对照的表。先在编辑器里把它写出来,后面每一步都对着这张表干活。

镜号时长景别/机位动作首帧来源尾帧去向
S015s中景,略低角度站在巷口,左右张望生成静帧 A1交给 S02 当首帧
S025s近景,仰拍抬头看天S01 尾帧生成静帧 B2
S035s中景,侧后方转身面向巷内S02 尾帧交给 S04
S045s全景,固定机位推门进便利店S03 尾帧生成静帧 D4
S055s特写,手持微晃从货架拿起伞S04 尾帧生成静帧 E5
S065s中景,逆光撑伞走进雨里S05 尾帧收尾

关键点:除了 S01,每个镜头都不需要凭空造首帧,直接用上一个镜头的尾帧。 这是整条流程里一致性收益最大的一个动作。只有当上一镜的尾帧实在不能用(糊了、人物崩了、动作停死)时,才退回第 2 步重新生成静帧。

第 2 步:做角色卡,把描述文字冻结下来

角色卡是一份你每次生成都要原样复制的文本。很多人一致性做不好,不是模型不行,是每镜都换了说法——这一镜写「深灰色外套」,下一镜写「灰夹克」,模型自然当成两个人。

新建 refs/hero_a.json:

```json

{

"character_id": "hero_a",

"固定描述": "二十七八岁的亚洲男性,黑色短发,下颌线清晰,穿深灰色立领外套,内搭白色圆领衫,左眉尾有一道浅疤",

"禁用描述": ["胡子", "长发", "眼镜", "领带", "帽子"],

"参考图": "refs/hero_a_front.png",

"备选参考图": ["refs/hero_a_side.png", "refs/hero_a_back.png"],

"固定色调": "阴天散射光,低饱和,青蓝为主色,暖黄仅作点缀"

}

```

三条纪律:

1. 「固定描述」在每一个镜头的提示词里逐字出现,一个字都不改,包括标点。

2. 「禁用描述」写进负面提示里。角色没有胡子,但模型爱加,就明确禁掉。

3. 参考图全片只用这几张,不要中途换新的定妆图。换了图,脸就换了。

第 3 步:先出静帧,再出视频

图生视频的一致性明显好于文生视频,原因很直白:起点被锁死了。所以每一镜都走「静帧 → 视频」两段路。

静帧阶段要做的事:用可灵的图像生成,输入角色卡里的固定描述 + 当前镜头的场景与机位描述,一次出 4 张,挑一张脸正、手没崩、构图留了运动空间的。

挑选标准(按优先级):

  • 脸部清晰,五官和参考图对得上;
  • 人物在画面里没有贴边,前方留出至少一个身位;
  • 姿势是「动作的起点」而不是「动作的高潮」,比如要拍走路,就选抬脚前的那一帧;
  • 背景干净,没有莫名其妙的路人或文字。

挑好的静帧按 frames/S01_start.png 这样的规则命名,尾帧同理。

第 4 步:用首尾帧接续,把镜头缝起来

在图生视频里选择首尾帧模式,上传起始图和结束图。两种用法:

用法一:单镜内部的运镜。 首帧和尾帧是同一场景的两个不同状态,比如 S01 首帧是「站在原地」,尾帧是「头微微转向左侧」。模型负责中间那段过渡。

用法二:跨镜接续。 把 S01 生成的视频最后一帧截出来,作为 S02 的首帧。可灵生成的视频一般能在结果页直接取到视频,用 ffmpeg 截最后一帧:

```bash

取视频最后一帧,作为下一镜的首帧

ffmpeg -sseof -0.1 -i shots/s01.mp4 -vframes 1 -q:v 2 frames/S02_start.png -y

```

sseof -0.1 表示从结尾往前 0.1 秒开始取,比取绝对最后一帧更稳,能避开某些编码下的空白帧。

拿到 S02_start.png 后,它同时是 S02 的首帧来源。S02 的尾帧则重新生成一张静帧(抬头看天的状态),保证动作有推进。

跨镜接续有个容易忽略的细节:上一镜的尾帧不要停在完全静止的姿势上。 人站得笔直、手垂着,下一镜从这个状态起步,会显得两段视频之间「顿」了一下。让尾帧停在动作中段——手抬到一半、身体刚转过四分之一——接起来才顺。

第 5 步:角色沿用,靠模板而不是靠记忆

每一镜的提示词按同一个模板填,不要自由发挥:

```text

【镜头 S03】

画面主体:{角色固定描述},站在雨后的老城区巷口

景别与机位:中景,略低角度,机位固定在人物右前方

动作:从静止起步,向右前方走两步后停下

环境:青灰砖墙,地面有积水反光,远处有暖色路灯

光线与色调:阴天散射光,低饱和,青蓝为主色,暖黄仅作点缀

镜头运动:轻微手持跟随,幅度小

时长:5 秒

负面提示:不要换脸,不要改变服装颜色,不要出现第二个人物,不要字幕,不要水印

```

其中「画面主体」和「光线与色调」两行,全片逐字复用。变的是景别、动作、镜头运动。

参考图的做法:如果当前版本支持上传参考图并指定人物一致性,就把 hero_a_front.png 传上去,权重调高;如果支持多图参考,可以把正面和侧面一起传,模型对侧面和背面镜头的还原会好一些。具体入口和参数名以官方页面当前版本为准。

还有一个省事的技巧:把全部 6 个镜头的提示词先写成文件再粘贴。 用一段小脚本从角色卡里批量填模板,避免手抄出错:

```python

import json, pathlib

card = json.loads(pathlib.Path("refs/hero_a.json").read_text(encoding="utf-8"))

shots = [

("S01", "中景,略低角度", "站在巷口,左右张望"),

("S02", "近景,仰拍", "抬头看天"),

("S03", "中景,侧后方", "转身面向巷内"),

("S04", "全景,固定机位", "推门走进便利店"),

("S05", "特写,手持微晃", "从货架上拿起一把伞"),

("S06", "中景,逆光", "撑伞走进雨里"),

]

tpl = """【镜头 {sid}】

画面主体:{who},{act}

景别与机位:{size}

光线与色调:{tone}

负面提示:{neg}

"""

for sid, size, act in shots:

print(tpl.format(sid=sid, who=card["固定描述"], act=act,

size=size, tone=card["固定色调"],

neg="、".join(card["禁用描述"])))

```

生成好之后逐条复制到网页里,比一镜一镜现想文案可靠得多。

第 6 步:镜头接续的三种方式,按场景挑

硬接。 上一镜结束、下一镜开始,中间不重叠。适合场景切换(巷口 → 便利店)。做法是把上一镜尾帧当下一镜首帧,然后让下一镜的首帧稍微往前跑一点,形成「同一时刻、不同角度」的感觉。

动作跨镜。 一个动作被切成两镜。比如「拿起伞」拆成 S05 的手部特写 + S06 的起身中景。这就要求 S05 的尾帧停在「手握伞柄、还没拿起来」的位置,S06 的首帧就是这一帧。

空镜过渡。 动作接不上时,插一个 2~3 秒的环境空镜(雨滴打在积水上、便利店门口的灯牌)。空镜不涉及角色,也不怕不一致,是修补接缝的常用手段。

三种方式可以混用。越是想显得「连续」,越要靠前两种;空镜是兜底。

第 7 步:统一规格并导出成片

不管前面生成时选了什么参数,导出前全部归一化。先把每一条镜头转成相同分辨率、相同帧率、相同像素格式:

```bash

mkdir -p norm out

for f in shots/*.mp4; do

name=$(basename "$f")

ffmpeg -i "$f" \

-vf "scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,fps=24,setsar=1" \

-c:v libx264 -crf 18 -preset medium -pix_fmt yuv420p \

-c:a aac -ar 48000 -ac 2 \

"norm/$name" -y

done

```

几个参数的含义:

  • scale 加 pad:不拉伸画面,按比例缩放后补黑边,避免人物被压扁。
  • fps=24:统一帧率,拼接时不会出现忽快忽慢。
  • crf 18:接近视觉无损,文件又不会太夸张。数值越小越清晰、文件越大。
  • pix_fmt yuv420p:播放器兼容性好的像素格式,很多平台只认这个。

再按顺序拼成一条:

```bash

: > list.txt

for f in norm/s01.mp4 norm/s02.mp4 norm/s03.mp4 norm/s04.mp4 norm/s05.mp4 norm/s06.mp4; do

echo "file '$PWD/$f'" >> list.txt

done

ffmpeg -f concat -safe 0 -i list.txt \

-c:v libx264 -crf 18 -pix_fmt yuv420p -r 24 \

-c:a aac -b:a 192k \

out/final.mp4 -y

```

这里重编码一次而不是用 -c copy,是因为各段视频的编码参数即使看起来一样,也可能有细微差别,直接复制拼接容易在接缝处黑屏或花屏。

最后检查一遍:

```bash

ffprobe -v error -select_streams v:0 \

-show_entries stream=width,height,r_frame_rate,duration \

-of default=nw=1 out/final.mp4

```

输出的宽高、帧率、时长和你设定的一致,就说明成片没问题。

导出参数怎么选:

用途分辨率帧率建议码率区间
平台竖屏投放1080×192024 或 308~12 Mbps
横屏展示/提案1920×108024 或 2510~16 Mbps
内部预览1280×720244~6 Mbps

音频如果只是配乐,导出时保持 AAC、48kHz、双声道即可。需要配音或对口型的话,建议先导出无声成片,再单独做音轨后合成,改动成本低。

常见坑与排错

现象大概率原因处理办法
换镜后脸变了参考图换了,或固定描述被改过全片只用同一组参考图;固定描述逐字复制
服装颜色飘描述里前后不一致,或没写进负面提示把颜色写死在固定描述里,负面提示加「不要改变服装颜色」
首尾接续处跳变上一镜尾帧和下一镜首帧不是同一张图直接用 ffmpeg 从上一镜视频里截最后一帧
接缝处画面「顿」一下尾帧停在完全静止的姿势让尾帧停在动作中段,留出运动余量
手部、文字崩坏特写里出现手或招牌文字避开手部特写,背景不要带文字招牌
全景里人物变小后走形单镜时长太长或人物占画面比例过低缩短到 5 秒内,或改成中景
拼接后黑屏/花屏用 -c copy 直接拼了不同编码的视频先归一化,再重编码拼接
画面被拉伸scale 没加 pad,宽高比不一致用 force_original_aspect_ratio=decrease 加 pad
消耗超预算一上来就用高分辨率长时长试错先用最低档跑通分镜,定稿再重跑高规格
生成结果与参考图姿势冲突首帧姿势和参考图差太远参考图选正面站姿,首帧不要选极端角度

排错顺序建议:先看静帧对不对(脸、服装、构图),再看单镜视频对不对(动作、有没有崩),最后才看接缝。前两步不对,接缝再怎么调也救不回来。

下一步建议

跑通一条 6 镜短片之后,可以往这几个方向加东西:

加声音。 用无声成片做底,单独铺环境音(雨声、门铃)和对白。声音能大幅掩盖接缝处的小瑕疵,性价比很高。

做对口型。 如果有正面或四分之三侧面的近景镜头,可以用对口型功能生成说话画面。前提是那一镜的人物脸要足够清晰,模糊的镜头做出来会很怪。

固化模板。 把角色卡、分镜表、提示词模板、ffmpeg 命令整理成一个项目文件夹,下次换故事只改分镜表和角色卡。第二部片子的一致性成本会低很多。

批量跑镜头。 如果当前版本开放了 API,可以用脚本把分镜表读进去、按顺序提交任务、轮询结果、下载视频,再串上本文的归一化与拼接命令,一条流水线跑完。接口形态、鉴权方式和并发限制以官方文档当前版本为准。

做长镜头。 单镜时长受限时,用「尾帧续接」把同一镜拆成多段生成,再用第 7 步的方法拼起来,能做出超过单次生成上限的长镜头。代价是每一段都要单独检查一致性,工作量会成倍增加,建议只在关键镜头用。

最后提醒一句:一致性的本质是减少变量。角色只有一个、场景只有两个、参考图只有一组、描述只有一套,剩下的交给模型。变量越少,可控性越高,出片速度也越快。

AI 生成本文由 AI 基于公开信息自动生成,仅供参考。