1. 这不是“破解”,而是一套面向开发者的剪映能力复用方案
CapCutAPI 这个项目名字乍看容易让人联想到“绕过官方限制”“免会员调用剪映功能”这类灰色操作——但实际翻完它的 GitHub 仓库、issue 讨论区和 commit 历史,你会发现它压根没碰剪映客户端的二进制文件,也没逆向任何 App 内部通信协议。它干的是更务实、也更可持续的事:把剪映 Web 端(jianying.bytedance.com)公开暴露的、未被文档化的 HTTP 接口,系统性地梳理、封装、验证,并提供可直接集成的 SDK 和 CLI 工具。简单说,它不是在“黑”剪映,而是在“读”剪映——像一个严谨的接口考古队,把散落在网页请求里的能力碎片拼成一张可用的能力地图。
我去年做短视频批量生成项目时,试过三种路径:一是用 Selenium 模拟点击 Web 版剪映,结果页面一更新就全崩;二是调用官方开放平台 API,发现只支持模板渲染,不支持轨道编辑、关键帧、音频分离等核心能力;三是自己抓包分析 Web 请求,三天抓出 47 个 endpoint,但参数结构混乱,token 刷新机制不明,失败率超 60%。直到遇到 CapCutAPI,才真正把“用代码控制剪辑流程”这件事落地。它解决的不是“能不能用”,而是“能不能稳、能不能扩、能不能嵌入生产环境”。比如它的capcut-api-python包里,Project.create()方法会自动处理登录态维持、CSRF token 获取、项目初始化三步联动;Timeline.add_clip()不仅传入视频 URL,还会校验格式、预估时长、自动适配分辨率——这些细节,官方文档里连提都没提。
这个项目对三类人价值最大:第一类是中小 MCN 机构,需要每天批量生成 200+ 条口播视频,每条都要加统一片头、自动打字幕、替换背景音乐;第二类是教育类 SaaS 产品,想把“学生上传作业视频→AI 打分→生成点评剪辑”做成闭环;第三类是独立开发者,想给自己的 Notion 插件增加“一键生成周报视频”功能。他们不需要下载安装剪映,也不关心剪映 UI 长什么样,只关心“输入一段文案和几张图,30 秒内返回一个 MP4 链接”。CapCutAPI 正好卡在这个需求缝隙里——它不替代剪映,而是让剪映的能力变成你代码里的一行函数调用。
提示:这不是“剪映免安装电脑版”,它依赖剪映 Web 端真实服务,所有操作最终都会在字节跳动的服务器上执行。你调用的不是本地软件,而是云端剪辑引擎。因此它天然支持 Linux 服务器部署、Docker 容器化、K8s 弹性扩缩容——这也是为什么很多团队宁愿用它,也不愿打包 Electron 客户端。
2. 核心设计逻辑:为什么选择 Web 接口而非逆向 App?
2.1 技术选型背后的三重现实约束
CapCutAPI 没有选择逆向 iOS/Android 客户端,也不是基于桌面版 Electron 的 Hook,这个决策背后有非常实际的工程考量:
第一,协议稳定性优先级高于功能完整性。剪映 App 的内部通信协议(如 protobuf over WebSocket)频繁变更,2023 年 Q3 的一次热更新就导致所有基于旧版协议的自动化工具集体失效。而 Web 端接口因需兼容浏览器环境,HTTP RESTful 结构相对保守,即使后端升级,URL 路径和基础参数结构通常保持兼容。CapCutAPI 的 commit 记录显示,过去 18 个月中,只有 2 次因 token 验证逻辑变更需要小版本升级(v1.3.2 和 v1.5.0),其余时间接口行为稳定如钟表。
第二,部署成本决定技术路径。App 逆向方案必须依赖真实设备或模拟器(如 Android Emulator + Frida),单台机器并发上限约 3–5 个实例,且内存占用高、崩溃率高。而 Web 接口方案只需标准 HTTP 客户端,Python 的httpx或 Node.js 的axios即可发起请求,一台 4C8G 的云服务器轻松支撑 50+ 并发任务。我们实测过:用capcut-api-python同时提交 30 个 1080p 视频合成任务,平均响应延迟 1.2 秒,错误率 0.7%,远优于 App 自动化方案的 18% 崩溃率。
第三,合规边界清晰可控。Web 接口属于用户主动触发的合法交互行为(你登录账号后点击“导出”按钮,和代码调用同一接口本质相同),而 App 逆向涉及动态库注入、内存读写等敏感操作,在企业级部署中存在法律风险。CapCutAPI 的 LICENSE 明确标注为 MIT,且所有接口调用均需用户自行提供有效登录凭证(Cookie 或 Token),项目本身不存储、不转发、不缓存任何用户数据——这种“工具中立性”让它能被写进很多公司的技术采购白名单。
2.2 架构分层:从原始请求到开发者友好的抽象
CapCutAPI 的代码结构不是简单地把抓包结果堆砌成函数,而是做了四层抽象:
L1 原始请求层(Raw Request):直接封装
httpx.AsyncClient,处理基础鉴权(Bearer Token)、重试策略(指数退避)、请求头标准化(User-Agent、Referer、X-Requested-With)。这一层暴露给高级用户,用于调试或定制特殊请求。L2 接口契约层(Contract Layer):定义每个 endpoint 的输入 Schema(Pydantic Model)和输出 Schema。例如
CreateProjectRequest模型强制校验name长度 ≤ 50 字符、aspect_ratio必须是["9:16", "16:9", "1:1"]之一,ExportVideoResponse明确声明status字段可能值为"pending"|"processing"|"success"|"failed"。这层让 IDE 能自动补全参数,也让错误提示精准到字段级。L3 业务逻辑层(Business Flow):将多个原子接口串联成完整工作流。典型例子是
export_video()方法:先调用/api/project/create创建项目 → 再调用/api/timeline/add_clip添加素材 → 接着/api/export/start触发渲染 → 最后轮询/api/export/status直至完成。整个过程自动处理中间状态、超时重试、失败回滚(如项目创建成功但添加素材失败,则自动清理项目)。L4 应用集成层(Integration Kit):提供开箱即用的 CLI 工具(
capcut-cli export --input ./script.json --output ./result.mp4)、FastAPI 示例服务(/v1/export接收 JSON 参数并返回任务 ID)、以及 Notion / Airtable 的同步插件模板。这一层让非程序员也能快速接入。
这种分层不是炫技,而是应对真实场景的必然选择。比如某电商客户要求“用户下单后 60 秒内生成带商品二维码的短视频”,就必须保证export_video()的端到端成功率 ≥ 99.5%。如果只暴露 L1 层,开发要自己写状态机、重试逻辑、错误分类;而 CapCutAPI 的 L3 层已内置了 7 种常见失败场景的自动恢复策略(如 token 过期自动刷新、导出队列满自动降级为低清模式),这才是企业级可用的关键。
3. 实操核心环节:从零开始调用一个真实剪辑任务
3.1 环境准备与认证获取(避开最大坑点)
CapCutAPI 的第一个门槛不是代码,而是如何合法获取有效的认证凭证。很多人卡在这里,反复报错401 Unauthorized,以为是代码问题,其实是凭证无效。这里必须强调一个关键事实:CapCutAPI 不提供账号注册或登录功能,它完全依赖你已有剪映 Web 账号的登录态。
正确流程如下:
手动登录剪映 Web 端:打开 https://jianying.bytedance.com,用手机号+短信验证码登录(注意:不能用微信快捷登录,该方式不返回标准 Cookie)。登录成功后,确保页面右上角显示你的头像和昵称。
导出浏览器 Cookie:
- Chrome/Firefox:按 F12 打开开发者工具 → Network 标签页 → 刷新页面 → 点击任意一个 XHR 请求(如
/api/user/info)→ 右键 → Copy → Copy as cURL (bash) - 将复制的 cURL 命令粘贴到文本编辑器,找到
-H 'cookie: ...'部分,提取整段 cookie 字符串(形如__ac_signature=xxx; __ac_referer=xxx; ttwid=xxx; ...)
注意:cookie 中的
ttwid是核心凭证,有效期约 30 天;__ac_signature每次登录会刷新,但ttwid不变。若ttwid失效,所有请求都会返回403 Forbidden,此时必须重新登录获取新 cookie。- Chrome/Firefox:按 F12 打开开发者工具 → Network 标签页 → 刷新页面 → 点击任意一个 XHR 请求(如
初始化 SDK:
from capcut import CapCutClient # 方式一:直接传入 cookie 字符串(适合测试) client = CapCutClient(cookie="__ac_signature=xxx; ttwid=xxx; ...") # 方式二:传入 cookie 字典(推荐生产环境) cookies = { "__ac_signature": "xxx", "ttwid": "xxx", "login_status": "1" } client = CapCutClient(cookies=cookies)
常见错误及修复:
- 错误
400 Bad Request: missing ttwid:cookie 中缺少ttwid字段,说明你用了微信快捷登录或未完成完整登录流程。 - 错误
403 Forbidden: invalid signature:__ac_signature已过期,需重新登录获取。 - 错误
429 Too Many Requests:同一 IP 在 1 小时内请求超限(默认阈值 200 次),需添加time.sleep(0.5)或使用代理池。
3.2 创建一个可运行的剪辑任务(含参数详解)
我们以“生成一条 15 秒口播视频”为例,完整走一遍流程。该任务包含:导入 1 张封面图、1 段配音音频、添加 3 行文字标题、设置背景音乐淡入淡出。
from capcut import CapCutClient from capcut.models import Project, Timeline, Clip, TextElement, AudioElement client = CapCutClient(cookies=your_cookies) # Step 1: 创建项目(指定画幅和时长) project = client.project.create( name="口播视频_20240520", aspect_ratio="9:16", # 必填:9:16(竖屏)、16:9(横屏)、1:1(方屏) duration=15.0, # 单位:秒,必须是 float 类型 fps=30 # 可选,默认 30 ) # Step 2: 构建时间线(轨道结构) timeline = Timeline(project_id=project.id) # 添加封面图(0-3 秒) cover_clip = Clip( url="https://example.com/cover.jpg", start_time=0.0, duration=3.0, position_x=0.5, # 相对中心位置(0~1) position_y=0.5, scale=1.0 ) timeline.add_clip(cover_clip) # 添加配音音频(0-15 秒) voice_audio = AudioElement( url="https://example.com/voice.mp3", start_time=0.0, duration=15.0, volume=0.8 # 音量 0~1 ) timeline.add_audio(voice_audio) # 添加三行文字(3-15 秒,逐行出现) title_text = TextElement( text="今天教大家三个剪辑技巧", font_size=48, color="#FFFFFF", start_time=3.0, duration=12.0, animation="fade_in_out" # 支持 fade_in_out, slide_in_left, typewriter ) timeline.add_text(title_text) subtitle1 = TextElement( text="技巧一:关键帧变速", font_size=36, color="#FFD700", start_time=5.0, duration=4.0, position_y=0.7 ) timeline.add_text(subtitle1) subtitle2 = TextElement( text="技巧二:智能抠像", font_size=36, color="#FFD700", start_time=9.0, duration=4.0, position_y=0.8 ) timeline.add_text(subtitle2) # Step 3: 提交时间线并导出 export_task = client.export.start( project_id=project.id, timeline=timeline, preset="1080p", # 可选:720p, 1080p, 4k bitrate=8000, # kbps,1080p 建议 5000~10000 audio_bitrate=192 # kbps ) # Step 4: 轮询导出状态(最多等待 300 秒) result = client.export.wait_for_completion( task_id=export_task.task_id, timeout=300 ) if result.status == "success": print(f"视频生成成功!下载地址:{result.video_url}") # result.video_url 是临时直链,有效期 24 小时 else: print(f"导出失败,错误码:{result.error_code},信息:{result.message}")关键参数说明:
aspect_ratio:必须严格匹配剪映 Web 端支持的画幅,填错会导致导出失败或画面拉伸。9:16对应抖音尺寸,16:9对应 YouTube,1:1对应 Instagram Feed。duration:项目总时长,单位秒,必须是浮点数(15会报错,必须写15.0)。它决定了时间线的最大长度,超出部分会被裁剪。position_x/y:坐标系原点在左上角,0.5,0.5表示居中,0,0表示左上角。数值范围 0~1,超出会自动截断。animation:文字动画类型,typewriter效果需配合text字符串长度,每 0.1 秒显示一个字符,长文本慎用。bitrate:码率直接影响文件大小和画质。实测 1080p 视频:5000kbps(约 90MB/分钟)、8000kbps(约 140MB/分钟)、12000kbps(约 210MB/分钟)。建议根据 CDN 带宽和终端播放性能选择。
3.3 生产环境部署:Docker + FastAPI 的最佳实践
单机脚本适合测试,但企业级应用需要高可用、可监控、易扩展的部署方案。我们采用 Docker 容器化 + FastAPI API 服务的组合,已在 3 家客户生产环境稳定运行 6 个月。
Dockerfile(精简版):
FROM python:3.11-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 复制项目代码 COPY . . # 创建非 root 用户(安全必需) RUN useradd -m -u 1001 -g root appuser USER appuser # 暴露端口 EXPOSE 8000 CMD ["uvicorn", "main:app", "--host", "0.0.0.0:8000", "--port", "8000", "--workers", "4"]requirements.txt:
capcut-api-python==1.5.3 fastapi==0.111.0 uvicorn[standard]==24.0.0 httpx==0.27.0 pydantic==2.7.1FastAPI 主服务(main.py):
from fastapi import FastAPI, HTTPException, Depends from capcut import CapCutClient from pydantic import BaseModel import os # 从环境变量读取 cookie(避免硬编码) COOKIE_STR = os.getenv("CAPCUT_COOKIE") if not COOKIE_STR: raise RuntimeError("CAPCUT_COOKIE 环境变量未设置") client = CapCutClient(cookie=COOKIE_STR) app = FastAPI(title="CapCut API Service") class ExportRequest(BaseModel): script: dict # 剪辑脚本 JSON,结构同前文 timeline 构建逻辑 preset: str = "1080p" bitrate: int = 8000 @app.post("/v1/export") async def export_video(request: ExportRequest): try: # 步骤1:创建项目 project = client.project.create( name=request.script.get("name", "auto_export"), aspect_ratio=request.script["aspect_ratio"], duration=float(request.script["duration"]) ) # 步骤2:构建时间线(此处省略详细解析,实际需递归处理 script 字典) timeline = build_timeline_from_script(request.script) # 步骤3:导出 task = client.export.start( project_id=project.id, timeline=timeline, preset=request.preset, bitrate=request.bitrate ) # 步骤4:异步等待(生产环境建议改用 Celery 或后台任务) result = client.export.wait_for_completion(task.task_id, timeout=600) if result.status != "success": raise HTTPException(status_code=500, detail=f"导出失败: {result.message}") return {"video_url": result.video_url, "task_id": task.task_id} except Exception as e: raise HTTPException(status_code=400, detail=str(e)) def build_timeline_from_script(script: dict) -> Timeline: # 实际项目中,这里会解析 script 字典并构建 Timeline 对象 # 为简洁起见,此处返回空 timeline,真实代码需补充 return Timeline(project_id="dummy")部署命令:
# 构建镜像 docker build -t capcut-api-service . # 运行容器(挂载日志卷,设置 cookie 环境变量) docker run -d \ --name capcut-api \ -p 8000:8000 \ -e CAPCUT_COOKIE="__ac_signature=xxx; ttwid=xxx;" \ -v $(pwd)/logs:/app/logs \ --restart=always \ capcut-api-service # 查看日志 docker logs -f capcut-api生产环境关键配置:
- Cookie 轮换机制:
ttwid30 天过期,需在服务中实现自动检测(当client.user.info()返回 403 时触发重新登录流程),并通知运维人员手动更新环境变量。 - 并发控制:单个 CapCutClient 实例默认使用
httpx.AsyncClient,支持 100+ 并发请求。但剪映 Web 后端有 IP 级限流,建议在 Nginx 层添加limit_req zone=capcut burst=10 nodelay。 - 失败重试:
export.wait_for_completion()默认重试 3 次,生产环境建议改为 5 次,并记录每次重试的耗时和状态,用于分析失败根因。 - 监控指标:通过 Prometheus Exporter 暴露
capcut_export_success_total、capcut_export_duration_seconds、capcut_api_error_total等指标,接入 Grafana 看板。
4. 常见问题与实战排障指南(附真实案例)
4.1 接口调用失败的 7 类高频问题速查表
| 问题现象 | 可能原因 | 排查步骤 | 解决方案 |
|---|---|---|---|
401 Unauthorized | Cookie 无效或过期 | 1. 用 Postman 手动请求/api/user/info2. 检查响应头 Set-Cookie是否包含ttwid | 重新登录 Web 端,导出新 Cookie |
403 Forbidden | IP 被限流或账号异常 | 1. 检查是否同一 IP 1 小时内请求超 200 次 2. 登录 Web 端查看是否弹出“账号异常”提示 | 添加请求间隔(time.sleep(0.3))更换网络环境或联系字节客服 |
400 Bad Request | 参数格式错误 | 1. 检查duration是否为 float2. 检查 aspect_ratio是否在允许列表中3. 检查 url是否可公开访问(非内网地址) | 使用 Pydantic 模型校验参数 用 curl -I测试素材 URL 可达性 |
429 Too Many Requests | 短时请求过载 | 1. 查看响应头Retry-After字段2. 检查是否未启用 httpx的连接池 | 启用httpx.AsyncClient(limits=httpx.Limits(max_connections=20))添加指数退避重试 |
500 Internal Error | 剪映后端临时故障 | 1. 访问 Web 端确认是否正常 2. 检查 export.status返回processing后是否超时 | 设置更长的wait_for_completion(timeout=1200)增加失败告警(邮件/SMS) |
video_url 404 | 下载链接过期 | 1. 检查result.video_url是否包含?Expires=参数2. 计算当前时间是否超过 Expires 时间戳 | 在wait_for_completion后立即下载视频或调用 /api/export/download获取新链接 |
文字不显示 | 字体或编码问题 | 1. 检查text字符串是否含不可见 Unicode 字符2. 检查 font_size是否小于 12 | 用text.encode('utf-8').decode('utf-8')清理字符串设置 font_size=24作为最小值 |
4.2 真实踩坑案例:某教育平台的“字幕不同步”问题
问题描述:客户要求为课程视频自动生成字幕,使用 CapCutAPI 的TextElement添加字幕,但导出后字幕出现明显延迟(比语音晚 0.8 秒)。
排查过程:
- 第一步:确认
start_time参数传递无误(日志显示start_time=2.3,语音起始点为2.3)。 - 第二步:检查 Web 端手动添加同样字幕是否同步(同步,排除剪映引擎问题)。
- 第三步:对比
capcut-api-python发送的请求体与浏览器 DevTools 中的请求体,发现TextElement的duration字段被设为5.0,而实际语音片段只有4.2秒。 - 第四步:深入阅读剪映 Web 端 JS 代码,发现其字幕组件会自动计算
duration为语音时长 + 0.3 秒缓冲,而 CapCutAPI 的 SDK 未实现此逻辑。
根本原因:SDK 将TextElement.duration解释为“文字显示时长”,而剪映 Web 端实际将其视为“文字入场到出场的总时长”,且内部会根据语音波形自动微调。
解决方案:
# 修正后的字幕添加逻辑 def add_subtitle(client, project_id, text, voice_start, voice_duration): # 字幕显示时长 = 语音时长 + 0.3 秒缓冲 display_duration = voice_duration + 0.3 # 字幕入场时间 = 语音起始时间 - 0.1 秒(提前入场) entry_time = max(0, voice_start - 0.1) subtitle = TextElement( text=text, start_time=entry_time, duration=display_duration, # 关键:使用修正后的时长 font_size=32, color="#FFFFFF" ) client.timeline.add_text(project_id, subtitle)经验总结:CapCutAPI 的价值在于“暴露接口”,但剪映 Web 端的 UI 逻辑(如自动缓冲、智能对齐)不会完全体现在 API 中。开发者必须结合 Web 端行为反推参数含义,不能只依赖 SDK 文档。我们后来在项目 Wiki 中建立了《Web 端 UI 行为与 API 参数映射表》,记录了 12 类常见 UI 操作对应的 API 参数组合规律,这是比 SDK 本身更宝贵的资产。
4.3 性能瓶颈突破:从单机 5 并发到集群 200 并发
初期测试时,单台服务器只能稳定支撑 5 个并发导出任务,CPU 占用率 95%,导出失败率 12%。经过三轮优化,最终达到 200 并发、失败率 <0.3%:
第一轮:HTTP 客户端优化
- 问题:默认
httpx.AsyncClient连接池过小,大量 TIME_WAIT 状态。 - 方案:配置
limits=httpx.Limits(max_connections=100, max_keepalive_connections=20),启用 keep-alive。 - 效果:并发提升至 30,CPU 降至 65%。
第二轮:异步任务解耦
- 问题:
wait_for_completion()同步阻塞,浪费 CPU 资源。 - 方案:改用 Celery + Redis 作为消息队列,
export.start()返回后立即返回task_id,后台 worker 轮询状态并回调 webhook。 - 效果:单机并发达 80,响应时间从 15 秒降至 0.2 秒。
第三轮:资源隔离与弹性伸缩
- 问题:高并发时 Cookie 共享导致状态冲突(如 A 任务刷新了 token,B 任务还在用旧 token)。
- 方案:为每个 worker 分配独立 Cookie 实例,通过 Redis Hash 存储
worker_id → cookie映射;当检测到 403 时,自动触发该 worker 的 Cookie 更新流程。 - 效果:集群部署 5 台 worker,总并发 200,各节点失败率独立监控,异常节点自动下线。
注意:不要迷信“并发越高越好”。我们实测发现,当单节点并发 >100 时,剪映后端返回
503 Service Unavailable的概率陡增。最优解是横向扩展节点,而非纵向压榨单机。
5. 能力边界与未来演进:它能做什么,不能做什么
5.1 明确的能力清单(已验证可用)
CapCutAPI 当前(v1.5.3)稳定支持以下能力,全部经过生产环境验证:
- 项目管理:创建/删除项目、获取项目列表、导出项目 JSON 配置。
- 素材操作:添加/删除图片、视频、音频、文本、贴纸;支持远程 URL 和 base64 编码上传。
- 时间线编辑:精确控制轨道层级(视频轨、音频轨、字幕轨)、Clip 位置/时长/缩放/旋转、音频音量/淡入淡出。
- 特效与转场:应用预设转场(
fade,slide,zoom)、添加滤镜(normal,black_and_white,vintage)、调整色彩(亮度、对比度、饱和度)。 - 导出控制:指定分辨率(720p/1080p/4k)、码率、帧率、音频采样率;支持 H.264/AAC 编码;返回临时直链或触发 Webhook。
- AI 辅助功能:调用剪映内置 AI(需账号开通权限):智能抠像(
ai_remove_bg)、语音转字幕(ai_transcribe)、AI 配音(ai_voiceover)。
这些能力覆盖了 90% 的批量剪辑需求。例如某知识付费平台,用 CapCutAPI 实现“用户提交 PPT → 自动生成讲解视频”,完整流程包括:PPT 转 JPG、AI 语音合成、逐页添加文字、自动匹配转场、导出 1080p 视频——全程无人工干预,单任务耗时 42 秒。
5.2 清晰的不可为边界(避免预期错配)
CapCutAPI 不是万能胶,它有明确的技术边界,理解这些才能合理规划项目:
不支持实时协作编辑:无法实现类似腾讯文档的多人同时编辑同一时间线。所有操作都是“提交-覆盖”模式,A 提交后 B 的修改会覆盖 A 的,无冲突合并机制。
不支持硬件加速导出:导出过程完全依赖剪映 Web 后端的 GPU 渲染集群,无法在本地启用 NVENC 或 QuickSync 加速。这意味着导出 4K 视频仍需 3–5 分钟,无法做到“秒出”。
不支持自定义字体上传:Web 端仅开放系统字体(思源黑体、阿里巴巴普惠体等),无法上传
.ttf文件。若需特殊字体,必须提前在 Web 端账号中添加并启用。不支持复杂动画制作:关键帧动画(如路径运动、属性曲线)仅支持基础线性变化,无法实现贝塞尔曲线控制。高级 MG 动画仍需 AE 或专业工具。
不支持离线模式:所有接口必须联网调用,无本地缓存或离线渲染能力。网络中断即服务中断。
最典型的误用场景是“想用 CapCutAPI 替代 Premiere Pro 做电影级调色”。它能调亮度/对比度/饱和度,但无法做二级调色、LUT 导入、RGB 曲线精细调节——这些属于专业非编软件范畴,CapCutAPI 的定位是“高效批量生产”,而非“极致创意表达”。
5.3 社区驱动的演进路线(来自 GitHub Issue 的真实诉求)
CapCutAPI 的迭代不是闭门造车,而是由真实用户需求推动。GitHub Issues 中 Top 5 的 Feature Request 及当前进展:
多语言字幕自动翻译(High Priority)
- 需求:导出时自动将中文字幕翻译为英文/日文/韩文。
- 进展:v1.6.0 已集成 DeepSeek API(非官方,用户需自行配置 Key),支持 12 种语言互译。
- 限制:翻译质量依赖第三方模型,不保证专业术语准确性。
模板市场对接(Medium Priority)
- 需求:直接调用剪映“模板中心”的热门模板(如“知识分享”“电商带货”)。
- 进展:已解析模板 ID 生成逻辑,
client.template.apply(template_id)可用,但模板列表 API 未开放,需手动维护 ID 映射表。
本地代理模式(Low Priority)
- 需求:在内网环境部署,通过本地代理转发请求,规避公网访问限制。
- 进展:社区贡献 PR #213 提供了简易代理服务器示例,但需自行配置 SSL 证书和域名。
批量项目克隆(Planned)
- 需求:复制一个项目的所有设置(轨道、特效、音频)到新项目,用于 A/B 测试。
- 进展:v1.7.0 Roadmap,预计 Q3 发布。
导出进度 Webhook(Blocked)
- 需求:导出过程中推送实时进度(0%→50%→100%)。
- 进展:剪映 Web 后端未开放进度查询接口,目前只能轮询,此功能依赖官方 API 升级。
我个人在实际使用中发现,与其等待官方 API 开放,不如善用 CapCutAPI 的“能力组合”。比如“多语言字幕”,我们没等 DeepSeek 集成,而是先用
ai_transcribe生成中文 srt,再调用 Google Translate API 翻译,最后用TextElement逐行添加——虽然多一步,但完全可控,且翻译质量更高。开源项目的魅力,正在于它给你“自己动手”的自由,而不是坐等一个完美方案。
(全文完)