Skip to main content

capcut(Python 客户端) · capcut (Python client)

中文 | English

用 Python 创建和编辑 CapCut / 剪映草稿。这是 capcut-cli 的一层薄封装:每次调用启动一次 capcut 命令,不经过 shell,返回它打印的那一份 JSON。没有服务、没有守护进程,磁盘上的草稿就是全部状态。打开剪映时,每一轨都还是可编辑的。

安装

npm install -g capcut-cli   # 命令行本体,需要 Node ≥ 18
pip install capcut          # 本包,纯 Python,无依赖
capcut doctor               # 检查环境

五行起步

import capcut

d = capcut.run("quickstart", "旁白短视频", video="clip.mp4", ratio="9:16")
capcut.run("add-text", d["draft_path"], "0s", "3s", "你好,世界", font_size=16)
print(capcut.run("lint", d["draft_path"])["summary"])
  • 关键字参数就是命令行选项:font_size=16 → --font-size 16,karaoke=True → --karaoke,列表会重复该选项,None / False 直接省略。
  • 位置参数原样传递,每个参数就是一个 argv,中文、空格、引号都不需要转义。
  • 全部命令、参数和选项见命令参考(中文),或者在 Python 里 capcut.describe()。

出错时

命令非零退出会抛出 capcut.CommandError,带 status、data(CLI 打印的 JSON,通常含 error)、stdout、stderr:

try:
    capcut.run("lint", path)
except capcut.CommandError as e:
    print(e.status, e.data)          # lint 有错误时退出码为 2

不想抛异常就用 capcut.run_raw(...),它返回 Result(ok、status、data、error)。找不到 capcut 命令时抛 capcut.CliNotFound,提示里有安装命令;也可以用环境变量 CAPCUT_CLI 指定,例如 CAPCUT_CLI="node /path/to/capcut-cli/dist/index.js"。

批量:serve

capcut serve 是一个无状态的 JSONL 任务队列。从 Python 喂任务进去,拿回每个任务一条结果:

results = capcut.serve([
    capcut.Job("add-text", project=path, args=["8s", "2s", "关注我"], id="title"),
    capcut.Job("lint", project=path),
], workers=2)
for r in results:
    print(r["id"], r["ok"], r["status"], r["stdout"])

失败的任务是一条 ok: false 的结果,不是异常。

剪映 6.0+ 用户

新建的草稿是明文,据报告剪映 11.4(macOS)能打开并就地升级,其他版本未验证;已有的加密草稿本 CLI 不读取。capcut.doctor() 会报告环境,capcut.run("decrypt", path) 会报告某个草稿的加密状态;来龙去脉见 jianying-encryption.zh-CN.md。

反馈与商业合作

  • 在用 Python 驱动 CapCut / 剪映?到 这个讨论 说说你在做什么,这决定 Python 客户端下一步做什么。
  • 与赞助无关:如果你正在把 capcut 集成进自己的产品,或者需要它实现目前还不支持的功能,我会承接少量集成项目。请发邮件至 rene@renezander.com,写明你在做什么。
  • 想支持这个项目:成为赞助者。

English

Create and edit CapCut / JianYing drafts from Python. A thin layer over capcut-cli: each call spawns the capcut binary once, without a shell, and returns the one JSON document it prints. No server, no daemon; the draft on disk is the only state, and every track stays editable in the app.

Install

npm install -g capcut-cli   # the CLI itself, Node >= 18
pip install capcut          # this package, pure Python, no dependencies
capcut doctor               # environment check

Five lines

import capcut

d = capcut.run("quickstart", "Narrated short", video="clip.mp4", ratio="9:16")
capcut.run("add-text", d["draft_path"], "0s", "3s", "Hello, world", font_size=16)
print(capcut.run("lint", d["draft_path"])["summary"])
  • Keyword arguments are flags: font_size=16 → --font-size 16, karaoke=True → --karaoke, a list repeats the flag, None / False are dropped.
  • Positional arguments pass through as they are, one argv token each: text with spaces or quotes never needs escaping.
  • Every command, argument and option: command reference, or capcut.describe() from Python.

Errors

A non-zero exit raises capcut.CommandError with status, data (the CLI's JSON, usually with error), stdout, stderr:

try:
    capcut.run("lint", path)
except capcut.CommandError as e:
    print(e.status, e.data)          # lint exits 2 on errors

capcut.run_raw(...) never raises; it returns a Result (ok, status, data, error). A missing binary raises capcut.CliNotFound with the install line; CAPCUT_CLI can point at one explicitly, e.g. CAPCUT_CLI="node /path/to/capcut-cli/dist/index.js".

Batch: serve

capcut serve is a stateless JSONL job queue. Feed it jobs from Python and get one result per job:

results = capcut.serve([
    capcut.Job("add-text", project=path, args=["8s", "2s", "Subscribe"], id="title"),
    capcut.Job("lint", project=path),
], workers=2)
for r in results:
    print(r["id"], r["ok"], r["status"], r["stdout"])

A failed job is a result with ok: false, not an exception.

Feedback and commercial work

  • Driving CapCut or JianYing from Python? Tell us what you are building in this discussion; it decides what the Python client gets next.
  • Separate from sponsorship: if you are building capcut into a product, or you need it to do something it does not do yet, I take on a small number of integration engagements. Write to rene@renezander.com and say what you are building.
  • To support the project: become a sponsor.

Development

cd python && python -m unittest discover -s tests -v
python -m build

MIT, same as capcut-cli.

Metadata

Release files for capcut 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for capcut 0.1.2
File Size Uploaded
capcut-0.1.2.tar.gz 9.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for capcut 0.1.2
File Interpreter ABI Platform
capcut-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 17.2 kB

Release files / capcut-0.1.2.tar.gz

Download URL capcut-0.1.2.tar.gz
Size 9.1 kB
Tags Source
SHA-256 checksum
How to use checksums
8a7b7277f81a6d8a220c0d4f06fd9638ae9b6a36df686f3dd583ec62646b2af3
BLAKE2b-256 checksum
How to use checksums
e7ae7e3c17e446fe7942a764f02475ff4fe3d4a0b1f243ae08b08cbec88a1b3b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.25 {"installer":{"name":"uv","version":"0.9.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / capcut-0.1.2-py3-none-any.whl

Download URL capcut-0.1.2-py3-none-any.whl
Size 8.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1dd266e5cf5dbb43525fa69113415a169228c5898fdf88dd89aacb911c5f1dbf
BLAKE2b-256 checksum
How to use checksums
34ee44975704f0d1b8761ad8f690e2f7a3ebe0ab3ba9aa0b0a7dbb86f5baaddd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.25 {"installer":{"name":"uv","version":"0.9.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

0.1.3

2 release files

This release

0.1.2 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page