想把 Wan-Dancer 生成的舞蹈直接剪进短视频,最省事的顺序不是先试提示词,而是先把两笔账算清:成片要什么画幅、每个镜头要多少秒。画幅决定了构图能不能用,时长决定了要生成几次、拼几次。这两件事在生成前五分钟就能定下来,定完再写提示词,基本可以避免"做完发现横屏裁成竖屏人只剩半个"或者"一次生成太长失败重跑半小时"的返工。
舞蹈素材的返工大头通常不在动作质量,而在画幅与时长没对齐剪辑需求。建议先按最终投放位置锁定输出比例,再用"多段短生成 + 首尾帧衔接 + ffmpeg 拼接"替代一次长生成;每段控制在模型稳定输出的长度内,拼接处靠统一帧率、分辨率和关键帧起点保证不跳变。这类做法适合单机、非实时的内容制作流程,不解决动作物理合理性;模型单次可生成的最长时长、支持的分辨率档位、参考帧字段名,需要结合你当前部署的版本和页面实际选项确认。
按最终投放位置反推需要的画幅比例
舞蹈是全身动作,画幅对可用性的影响比一般镜头大得多。先确定这条素材最终出现在哪,再回头找生成参数里的分辨率或比例字段,不要反过来"先看看能生成什么就发什么"。常见的对应关系大致如下,具体字段名依你的接入方式而定,可能是配置文件里的 width/height,也可能是参数里的 aspect_ratio 或 size:
- 竖屏短视频(手机端信息流):常用 1080×1920,比例 9:16,参数常写成 aspect_ratio: "9:16" 或 width=1080, height=1920。
- 横屏长视频平台:常用 1920×1080,比例 16:9,同名字段填对应值。
- 方形或 4:5 信息流位:1080×1080 对应 1:1,1080×1350 对应 4:5,多用于图文混排场景。
比例变化对构图的影响是直接切画面:从横屏改竖屏,等于左右各裁掉一部分,单人全身舞时展开的手臂、侧向的滑步和转身出画都容易被切;从竖屏改横屏,通常要上下补背景或留黑边,画面重心会下移。所以如果最终是竖屏投放,建议直接用竖屏比例生成,不要先横屏生成再裁——裁完损失的画幅和构图,靠后期补不回来。填写前先确认模型或页面本身支持哪些分辨率档位,某些版本只接受固定几档尺寸,写一个不支持的宽高可能被静默改成默认值,这一点只能靠生成后查输出尺寸确认。
把长舞蹈拆成多段短生成再拼接
一次生成十几秒的连续舞蹈,动作越到后面越容易松散,而且中途失败整段作废。改成按剪辑节奏拆成若干段短生成,每段一个可独立使用的小单元,坏一段只重跑一段。分段参数可以先这样组织,时长和帧数按你自己的模型输出能力替换:
{
segment_seconds: 4,
fps: 16,
frames: 64,
width: 1080,
height: 1920,
overlap_frames: 0,
seed: 1001
}
把每段生成结果按顺序命名,写一个拼接列表文件 list.txt,每行一条 file 指令:
file 'seg_01.mp4'
file 'seg_02.mp4'
file 'seg_03.mp4'
参数完全一致时可以直接流复制拼接:
ffmpeg -f concat -safe 0 -i list.txt -c copy joined.mp4
如果各段分辨率、帧率或像素格式有过差异(比如中途改过参数),流复制会花屏或报错,这时改为重编码:
ffmpeg -f concat -safe 0 -i list.txt -c:v libx264 -crf 18 -pix_fmt yuv420p -r 16 joined.mp4
拼接处的帧对齐要点是三条:所有段统一帧率(-r 显式指定,不要依赖各段自带的时间基)、统一分辨率和像素格式、每段都从关键帧开始。生成端如果允许设置关键帧间隔,建议每段开头单独出一个关键帧,否则拼接后第一帧可能依赖前一段的参考帧而出现一闪而过的残影。
确认相邻两段能否衔接,避免拼接处跳变
即使参数一致,两段各自独立生成,姿态和机位也可能对不上,拼接处会出现人物忽然换位置、手臂突然换姿势。比较稳的做法是把上一段的尾帧截出来,作为下一段的首帧参考或初始化图像(字段名在常见接入里可能是 first_frame、init_image 或 reference_image,以你实际用的参数页为准)。截尾帧:
ffmpeg -sseof -0.1 -i seg_01.mp4 -frames:v 1 last_frame.png
生成完第二段后,不要只看播放,直接抽拼接点附近的帧逐张比对更快:
ffmpeg -i joined.mp4 -vf "select='between(t,3.5,4.5)'" -vsync 0 check_%03d.png
看三件事:人物朝向是否连续、地面或背景的参照物有没有位移、手脚位置是否发生无过渡的跳变。若跳变明显,优先调尾帧参考加提示词里对机位和动作的描述,其次才是缩短单段时长让每段动作幅度更小。这里有一条边界要认:尾帧衔接能让画面连贯,但连续几个长段拼下来,动作节奏感还是会有轻微不匀,追求严格节拍对齐的成片,更适合在剪辑软件里按拍点重新切分。
按剪辑时间线反推每段需要多长
先看剪辑软件里的时间线:这段舞蹈在成片里占几个节拍、需要几秒,再倒推生成几个短段。换算时用帧率乘秒数得到帧数,帧率以模型实际输出为准,不要按经验假设,生成后用 ffprobe 查一遍:
ffprobe -v error -select_streams v:0 -show_entries stream=width,height,r_frame_rate,nb_frames,duration -of default=nw=1 seg_01.mp4
常见的换算关系(fps 一列请替换成你实际输出值):
- 成片需要 4 秒,fps 16,则 64 帧,对应 segment_seconds 填 4、frames 填 64。
- 成片需要 8 秒,可以用两段 4 秒拼接,也可以单段 8 秒,前者失败成本低。
- 成片需要 12 秒,建议拆成三段 4 秒,每段独立重跑。
- 单个镜头只需 2~3 秒特写,就按 2 秒或 3 秒生成,不要生成 5 秒再裁掉两秒,裁掉的部分同样消耗生成时间。
分段长度还受动作复杂度影响:转圈、跳跃、连续地板动作这类幅度大的段落,单段时长可以取短一些,衔接点放在动作完成、身体静止的瞬间,比切在动作中途更容易对齐。
把选定的时长与画幅写进常用配置
参数试通一次后,把它固化成配置文件,下次换动作只改提示词和随机种子,不再重新纠结画幅和时长。示例模板(字段名按你的接入方式替换,结构保持一致即可):
output:
width: 1080
height: 1920
fps: 16
segment:
seconds: 4
frames: 64
count: 3
seed: 1001
concat:
list_file: list.txt
reencode: true
验证方式建议按顺序走一遍:先只跑第一段,用前面那条 ffprobe 命令确认宽高、r_frame_rate、nb_frames 与配置一致;再抽首尾两帧看图,确认构图里人物的头和脚都在画面内;然后跑满 count 段并执行拼接命令,最后对 joined.mp4 再跑一次 ffprobe,确认总时长接近 count × seconds。三步都能对上,这套配置才算固化完成。之后每次批量生成前,只核一次输出尺寸就够——模型版本升级或页面默认值调整时,这里是第一个会变的地方。