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。


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.

Development

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

MIT, same as capcut-cli.

Release files for capcut 0.1.0

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.0
File Size Uploaded
capcut-0.1.0.tar.gz 8.4 kB Details

Built distribution (wheel)

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

Total release size: 16.0 kB

Release files / capcut-0.1.0.tar.gz

Download URL capcut-0.1.0.tar.gz
Size 8.4 kB
Tags Source
SHA-256 checksum
How to use checksums
95bf57413a4148df7465c0d77194b51b3e674d1b5b6176edbc1b6a31ae49f377
BLAKE2b-256 checksum
How to use checksums
79069bbb1235301be9ed829a397dcfcc517e8b281eca32a9f52dbe546746eeaa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.5

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

Download URL capcut-0.1.0-py3-none-any.whl
Size 7.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cf8d20e7c68b1dd1a60560eebdcae24c6bba56432c08d5737de8b8c49a46a0f5
BLAKE2b-256 checksum
How to use checksums
519294d5863fc743ca559a6e1d691c6f098d724e234136b7453dec74abe21255
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.5

Release history Release notifications | RSS feed

0.1.1

2 release files

This release

0.1.0 This release

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