Kling 2.6 动作控制上传前预检:用 30 行 Python 判断“朝向”和裁剪时长

用 Kling 2.6 动作控制做角色动画时,最容易浪费时间的往往不是生成本身,而是素材不符合要求:动作视频太长、太短,或者选了“跟随图片朝向”却拿着一段 18 秒的舞蹈视频。本文写一个很小的 Python 脚本,在上传前用 ffprobe 读出视频时长和大小,告诉你该选哪种朝向、要不要先裁剪。

规则全部来自 Kling 2.6 动作控制 页面的说明。

Kling 2.6 动作控制页面要点
链接页面要点:kling4ai.io/zh/models/kling-2-6-motion-control(2026-10-30 读取)

先把规则整理清楚

页面上和上传相关的要求可以归纳为几条:

  • 需要一张角色图片和一段动作视频,图片提供主体,视频提供动作,不能只靠文字开始;
  • 角色图片:JPEG 或 PNG,最多 10 MB,尺寸大于 300 像素,比例 2:5 到 5:2;
  • 动作视频:MP4 或 MOV,3–30 秒,最多 100 MB;
  • 朝向选“图片”时,生成上限 10 秒;选“视频”时,可以到 30 秒;
  • 输出可选 720p 或 1080p;提示词最多 2,500 字符,用来描述场景,不能代替素材。

其中最容易踩坑的是朝向和时长的关系:同一段动作视频,换一个朝向设置,可用时长就从 30 秒变成 10 秒。

朝向与时长的关系
朝向设置决定了动作视频能用多长

脚本

"""plan_mc.py —— Kling 2.6 动作控制:上传前判断“朝向”选项与是否需要裁剪动作视频"""
import json, subprocess, sys

VIDEO_MIN, VIDEO_MAX = 3, 30      # 动作视频 3–30 秒
IMAGE_MODE_MAX = 10               # 跟随图片朝向时最长 10 秒
VIDEO_MB = 100                    # 动作视频不超过 100 MB

def probe(path):
    out = subprocess.run(["ffprobe", "-v", "error", "-show_entries", "format=duration,size",
                          "-of", "json", path], capture_output=True, text=True).stdout
    f = json.loads(out)["format"]
    return float(f["duration"]), int(f["size"]) / 1024 / 1024

def plan(path, want_image_orientation):
    dur, mb = probe(path)
    print(f"{path}: {dur:.1f} 秒, {mb:.2f} MB")
    if not path.lower().endswith((".mp4", ".mov")):
        print("  ✗ 格式需为 MP4 或 MOV"); return
    if mb > VIDEO_MB:
        print(f"  ✗ 超过 {VIDEO_MB} MB,先压缩"); return
    if dur < VIDEO_MIN:
        print(f"  ✗ 短于 {VIDEO_MIN} 秒,换一段更完整的动作"); return
    limit = IMAGE_MODE_MAX if want_image_orientation else VIDEO_MAX
    mode = "图片朝向" if want_image_orientation else "视频朝向"
    if dur <= limit:
        print(f"  ✓ 可直接用于「{mode}」(上限 {limit} 秒)")
    else:
        print(f"  ! 「{mode}」上限 {limit} 秒,需要裁剪,例如:")
        print(f"    ffmpeg -ss 0 -t {limit} -i {path} -c copy cut_{limit}s.mp4")
        if want_image_orientation and dur <= VIDEO_MAX:
            print("    或改用「视频朝向」,保留完整动作")

if __name__ == "__main__":
    plan(sys.argv[1], sys.argv[2] == "image")

几点说明:

  • 阈值全部写成顶部常量,页面规则变了只改这里;
  • 只读 format 里的时长和大小,不解码视频,速度很快;
  • 裁剪建议用 -c copy,不重新编码。注意它按关键帧切,实际起点可能略有偏差,需要精确起点时去掉 -c copy 重新编码。

运行结果

用 ffmpeg 生成三段测试视频(18 秒、6 秒、2 秒的竖屏测试图案,只用来演示脚本逻辑),分别运行:

$ python3 plan_mc.py dance18.mp4 image
dance18.mp4: 18.0 秒, 0.14 MB
  ! 「图片朝向」上限 10 秒,需要裁剪,例如:
    ffmpeg -ss 0 -t 10 -i dance18.mp4 -c copy cut_10s.mp4
    或改用「视频朝向」,保留完整动作
$ python3 plan_mc.py dance18.mp4 video
dance18.mp4: 18.0 秒, 0.14 MB
  ✓ 可直接用于「视频朝向」(上限 30 秒)
$ python3 plan_mc.py wave6.mp4 image
wave6.mp4: 6.0 秒, 0.05 MB
  ✓ 可直接用于「图片朝向」(上限 10 秒)
$ python3 plan_mc.py clip2.mov video
clip2.mov: 2.0 秒, 0.02 MB
  ✗ 短于 3 秒,换一段更完整的动作

同一段 18 秒视频,在两种朝向下给出了不同建议,这正是要提前判断的地方。

预检流程
先预检,再决定朝向和画质,最后看报价

朝向到底怎么选

页面的解释是:图片模式让角色朝向与图片一致,视频模式让朝向与表演视频一致。实际选择时可以这样想:

  • 角色图片是正面半身照,而动作视频里的人中途转身,选“视频朝向”更容易保持动作完整,但角色会跟着视频转;
  • 希望角色始终保持图片里的姿态和构图,选“图片朝向”,同时把动作控制在 10 秒内;
  • 需要一段 20 秒的完整表演,只能选“视频朝向”。

无论哪种,两份素材都应该清楚地拍到头部、肩膀和躯干,这是页面特别强调的。

图片也可以顺手检查

如果想把图片检查也放进脚本,用 Pillow 读尺寸即可:宽高都要大于 300 像素,宽高比在 0.4 到 2.5 之间(即 2:5 到 5:2),文件不超过 10 MB,格式为 JPEG 或 PNG。逻辑和视频部分一样,不再展开。

上传前检查清单
脚本通过之后,还需要人工看的几项

批量检查一个文件夹

素材多的时候,可以把脚本改成遍历文件夹,一次输出所有动作视频的判断结果。核心只多几行:

import pathlib
for p in sorted(pathlib.Path(sys.argv[1]).glob("*")):
    if p.suffix.lower() in (".mp4", ".mov"):
        plan(str(p), sys.argv[2] == "image")

这样在开始一批角色动画前,先跑一遍就知道哪些视频要裁剪、哪些要换朝向、哪些干脆不合格,整理素材的时间会少很多。需要注意的是,批量模式下所有视频都用同一个朝向判断;如果不同角色计划用不同朝向,还是按角色分文件夹分别运行更清楚。

小结

脚本能解决的是“规则类”问题:格式、大小、时长、朝向上限。动作是否清楚、手部是否被遮挡、画面里是否只有一个主体,还要自己看一遍素材。把这两步分开,提交给 Kling 2.6 动作控制的素材基本就不会因为硬性条件被打回。选好 720p 或 1080p 后,记得在提交前确认生成报价。

posted @ 2026-10-30 11:54  Wan3ai  阅读(7)  评论(0)    收藏  举报