开发者指南
目录
简介
capcut-mate 是一个开源的剪映自动化工具,提供基于 API 的草稿管理、媒体素材处理和视频导出能力。该项目采用 Python FastAPI 构建后端服务,并结合 Electron 构建桌面客户端,支持 Windows 和 Linux 平台。项目现已实现完整的跨平台兼容性,通过可选依赖管理和优雅降级机制,确保在不同操作系统上的开发体验一致。
项目现在使用条件依赖安装机制,根据操作系统自动选择合适的依赖包,避免在不支持的平台上安装不兼容的组件。
项目结构
项目采用分层架构设计,主要分为以下几个层次:
graph TB
subgraph "桌面客户端层"
DC[Electron Desktop Client]
UI[React Web UI]
end
subgraph "API 层"
API[FastAPI 应用]
ROUTER[路由层]
MIDDLEWARE[中间件层]
end
subgraph "业务逻辑层"
SERVICE[服务层]
SCHEMAS[数据模型]
end
subgraph "工具层"
UTILS[工具模块]
LOGGER[日志系统]
DOWNLOADER[草稿下载器]
end
subgraph "底层系统"
PYJY[剪映自动化]
CONFIG[配置管理]
TEMPLATES[模板系统]
end
DC --> API
UI --> API
API --> ROUTER
API --> MIDDLEWARE
ROUTER --> SERVICE
SERVICE --> UTILS
SERVICE --> PYJY
UTILS --> DOWNLOADER
UTILS --> LOGGER
SERVICE --> SCHEMAS
SERVICE --> CONFIG
SERVICE --> TEMPLATES
核心组件
项目包含多个核心组件,每个组件都有明确的职责分工:
1. 应用入口组件
- main.py: FastAPI 应用入口,负责应用初始化、路由注册和中间件配置
- 桌面客户端: Electron 应用,提供图形化界面和本地文件管理
2. 中间件组件
- PrepareMiddleware: 环境初始化中间件,负责创建必要的目录结构
- ResponseMiddleware: 统一响应处理中间件,标准化 API 响应格式
3. 服务组件
- 草稿服务: 草稿创建、管理和导出的核心业务逻辑
- 媒体处理服务: 视频、音频、图片和字幕的处理能力
- 自动化服务: 剪映应用程序的自动化控制
4. 工具组件
- 日志系统: 结构化的日志记录和格式化
- 草稿下载器: 远程草稿文件的下载和本地化处理
- 配置管理: 环境变量和路径配置的集中管理
架构概览
系统采用分层架构,各层之间通过清晰的接口进行通信:
sequenceDiagram
participant Client as 客户端
participant API as FastAPI
participant Middleware as 中间件
participant Service as 服务层
participant Utils as 工具层
participant Jianying as 剪映自动化
Client->>API : HTTP 请求
API->>Middleware : 请求进入
Middleware->>Service : 调用业务逻辑
Service->>Utils : 使用工具函数
Utils->>Jianying : 控制剪映应用
Jianying-->>Utils : 返回执行结果
Utils-->>Service : 返回处理结果
Service-->>Middleware : 返回业务结果
Middleware-->>API : 统一响应格式
API-->>Client : HTTP 响应
详细组件分析
FastAPI 应用架构
应用采用模块化设计,主要组件包括:
classDiagram
class FastAPIApp {
+title : str
+version : str
+include_router()
+add_middleware()
+run()
}
class Router {
+prefix : str
+tags : list
+post()
+get()
}
class Middleware {
+dispatch()
+process_request()
+process_response()
}
class ServiceLayer {
+business_logic()
+validation()
+error_handling()
}
FastAPIApp --> Router : "包含"
Router --> ServiceLayer : "调用"
FastAPIApp --> Middleware : "注册"
ServiceLayer --> ServiceLayer : "内部调用"
中间件处理流程
中间件系统提供请求预处理和响应后处理能力:
flowchart TD
Start([请求到达]) --> Prepare["PrepareMiddleware<br/>创建目录结构"]
Prepare --> Next["调用下一个中间件"]
Next --> Response["ResponseMiddleware<br/>统一响应处理"]
Response --> Validation{"参数验证"}
Validation --> |通过| Business["调用业务逻辑"]
Validation --> |失败| Error422["处理422错误"]
Business --> Success["成功响应"]
Error422 --> ErrorResp["返回错误响应"]
Success --> ErrorCheck{"是否有异常"}
ErrorCheck --> |是| CustomError["处理自定义异常"]
ErrorCheck --> |否| JsonFormat["JSON响应格式化"]
CustomError --> FinalResp["最终响应"]
JsonFormat --> FinalResp
ErrorResp --> FinalResp
草稿管理系统
草稿管理是系统的核心功能,包含完整的生命周期管理:
stateDiagram-v2
[*] --> 草稿创建
草稿创建 --> 草稿初始化 : 创建模板
草稿初始化 --> 媒体添加 : 添加素材
媒体添加 --> 草稿保存 : 保存更改
草稿保存 --> 草稿导出 : 导出视频
草稿导出 --> 草稿清理 : 清理临时文件
草稿清理 --> [*]
草稿创建 --> 草稿删除 : 删除草稿
草稿删除 --> [*]
剪映自动化控制
剪映自动化控制系统提供完整的应用交互能力:
classDiagram
class JianyingController {
+app : WindowControl
+app_status : str
+app_sub_status : str
+find_and_click_draft()
+click_export_button()
+export_draft()
+get_window()
+switch_to_home()
}
class ControlFinder {
+desc_matcher()
+class_name_matcher()
}
class ExportResolution {
+RES_8K
+RES_4K
+RES_2K
+RES_1080P
+RES_720P
+RES_480P
}
class ExportFramerate {
+FR_24
+FR_25
+FR_30
+FR_50
+FR_60
}
JianyingController --> ControlFinder : "使用"
JianyingController --> ExportResolution : "设置"
JianyingController --> ExportFramerate : "设置"
跨平台兼容性架构
项目实现了完整的跨平台兼容性,通过可选依赖管理和优雅降级机制:
flowchart TD
Platform[平台检测] --> WinCheck{Windows?}
WinCheck --> |是| WinDeps[加载Windows依赖]
WinCheck --> |否| BaseDeps[加载基础依赖]
WinDeps --> SysCheck{系统完整性?}
SysCheck --> |是| FullFunc[完整功能]
SysCheck --> |否| Graceful[优雅降级]
BaseDeps --> Graceful
Graceful --> BasicFunc[基础功能]
FullFunc --> AutoExport[自动导出功能]
BasicFunc --> ManualExport[手动导出功能]
项目现在使用条件依赖安装机制,通过 sys_platform 条件确保只在支持的平台上安装相应的依赖包。
依赖关系分析
外部依赖管理
项目使用 Poetry 进行依赖管理,主要依赖包括:
graph TB
subgraph "核心依赖"
FASTAPI[fastapi>=0.100.0]
UVICORN["uvicorn[standard]>=0.35.0"]
REQUESTS[requests>=2.32.5]
end
subgraph "系统集成"
PYWIN32[pywin32>=311]
UIAUTOMATION[uiautomation>=2.0.29]
MEDIAINFO[pymediainfo>=7.0.1]
end
subgraph "云存储"
COS[cos-python-sdk-v5>=1.9.38]
end
subgraph "邮件验证"
EMAIL[email-validator>=2.2.0]
end
subgraph "应用入口"
MAIN[main.py]
end
MAIN --> FASTAPI
MAIN --> UVICORN
MAIN --> REQUESTS
MAIN --> PYWIN32
MAIN --> UIAUTOMATION
MAIN --> MEDIAINFO
MAIN --> COS
MAIN --> EMAIL
Windows 特定依赖现在通过可选依赖组 windows 提供,并使用 sys_platform == 'win32' 条件确保只在 Windows 平台上安装。
可选依赖策略
项目采用可选依赖策略,将 Windows 特定依赖设为可选:
graph TD
BaseDeps[基础依赖] --> Core[核心功能]
BaseDeps --> CrossPlatform[跨平台支持]
CrossPlatform --> Linux[Linux支持]
CrossPlatform --> Windows[Windows支持]
Windows --> WinSpecific[Windows特定功能]
WinSpecific --> AutoExport[自动导出]
WinSpecific --> UIAutomation[UI自动化]
Core --> AllFeatures[完整功能集]
Linux --> BasicFeatures[基础功能集]
可选依赖现在使用 sys_platform 条件,确保依赖安装与操作系统匹配。
内部模块依赖
内部模块之间的依赖关系如下:
graph TD
MAIN[main.py] --> ROUTER[src/router/v1.py]
MAIN --> PREPARE[src/middlewares/prepare.py]
MAIN --> RESPONSE[src/middlewares/response.py]
MAIN --> DOWNLOADER[src/utils/draft_downloader.py]
MAIN --> LOGGER[src/utils/logger.py]
ROUTER --> SERVICE[src/service/]
ROUTER --> SCHEMAS[src/schemas/]
SERVICE --> PYJY[src/pyJianYingDraft/]
SERVICE --> UTILS[src/utils/]
SERVICE --> CONFIG[config.py]
PYJY --> EXCEPTIONS[exceptions.py]
UTILS --> LOGGER
UTILS --> CONFIG
性能考虑
系统在设计时充分考虑了性能优化:
1. 缓存策略
- 草稿缓存:使用内存缓存减少重复创建开销
- 文件下载缓存:避免重复下载相同文件
- 路由信息缓存:减少路由注册时的计算开销
2. 异步处理
- 文件下载采用异步模式
- 剪映自动化操作使用非阻塞等待
- 日志记录采用异步写入
3. 资源管理
- 连接池管理数据库连接
- 文件句柄自动释放
- 内存使用监控和回收
4. 网络优化
- HTTP 请求超时设置
- 重试机制和退避算法
- 连接复用和持久连接
5. 跨平台性能优化
- 条件导入减少不必要的模块加载
- 平台特定功能的延迟初始化
- 优雅降级避免功能缺失时的性能损失
项目现在使用条件导入机制,避免在不支持的平台上加载不兼容的模块,提高启动性能。
故障排除指南
跨平台兼容性问题
-
Windows 上缺少依赖
- 检查是否正确安装了 Windows 可选依赖
- 验证 pywin32 和 uiautomation 是否正确安装
- 确认 Windows 版本兼容性
-
Linux 上功能受限
- 确认基础依赖已正确安装
- 验证自动导出功能是否按预期降级
- 检查日志输出确认功能状态
-
导入错误
- 检查 sys.platform 是否正确识别
- 验证可选依赖的条件安装
- 确认模块路径配置正确
错误处理模式
系统采用统一的错误处理模式:
flowchart TD
Request[请求处理] --> PlatformCheck{平台检查}
PlatformCheck --> WinCheck{Windows?}
WinCheck --> |是| WinImport[导入Windows模块]
WinCheck --> |否| BaseImport[导入基础模块]
WinImport --> ImportCheck{导入成功?}
ImportCheck --> |是| WinReady[Windows功能就绪]
ImportCheck --> |否| GracefulDowngrade[优雅降级]
BaseImport --> BaseReady[基础功能就绪]
GracefulDowngrade --> BaseReady
WinReady --> Validate{参数验证}
BaseReady --> Validate
Validate --> |通过| Business[业务逻辑]
Validate --> |失败| ParamError[参数验证错误]
Business --> Success{业务成功}
Success --> |是| SuccessResp[成功响应]
Success --> |否| BusinessException[业务异常]
ParamError --> ErrorResp[错误响应]
BusinessException --> ErrorResp
ErrorResp --> Log[日志记录]
结论
capcut-mate 项目展现了良好的软件工程实践,采用分层架构设计、模块化组件和完善的错误处理机制。项目现已实现完整的跨平台兼容性,通过可选依赖管理和优雅降级机制,确保在不同操作系统上的开发体验一致。项目提供了完整的草稿管理和剪映自动化能力,为开发者提供了清晰的扩展路径和维护指南。
项目现在具备完善的跨平台开发支持,通过条件依赖安装和优雅降级机制,为不同平台的开发者提供了最佳的开发体验。
附录
开发环境搭建步骤
Windows 平台(完整功能)
在 Windows 上安装完整功能,包括 UI 自动化:
# 使用 uv 安装(推荐)
uv sync
# 或者使用 pip 安装 Windows 可选依赖
pip install -e .[windows]
这将安装所有依赖,包括:
pywin32- Windows API 接口uiautomation- UI 自动化库
Linux 平台(基础功能)
在 Linux 上安装基础功能,UI 自动化相关功能将不可用:
# 使用 uv 安装(推荐)
uv sync
# 或者使用 pip 安装基础依赖
pip install -e .
这将只安装跨平台依赖,不包括 Windows 特定的库。
环境变量配置
无论在哪个平台,都需要配置以下环境变量:
# 基础配置
export DRAFT_DIR="/path/to/drafts"
export OUTPUT_DIR="/path/to/output"
# 腾讯云配置(可选)
export SECRET_ID="your_secret_id"
export SECRET_KEY="your_secret_key"
export REGION="your_region"
export BUCKET="your_bucket"
使用示例
在 Windows 上运行完整服务
# 启动 API 服务
uvicorn main:app --host 0.0.0.0 --port 8000
# 视频自动导出功能可用
在 Linux 上运行基础服务
# 启动 API 服务
uvicorn main:app --host 0.0.0.0 --port 8000
# 注意:视频自动导出功能不可用
# 可以使用 /gen_video 接口,但会返回提示信息
跨平台测试策略
CI/CD 跨平台测试
项目包含专门的 CI/CD 测试脚本,用于验证跨平台兼容性:
# 运行 CI 依赖测试
python tests/test_ci_dependencies.py
# 运行跨平台兼容性测试
python tests/test_cross_platform.py
这些脚本会自动检测运行环境并验证:
- 基础依赖安装
- 平台特定依赖处理
- 功能模块导入
CI/CD 现在使用 uv sync 而不是 uv sync --all-extras,避免在 Linux 环境中安装 Windows 特定依赖。
测试覆盖范围
-
基础依赖测试
- 验证核心依赖的正确安装
- 检查可选依赖的条件安装
- 确认模块导入的完整性
-
平台特定功能测试
- Windows 平台的 UI 自动化功能
- Linux 平台的占位符功能
- 优雅降级机制的正确性
-
CI/CD 环境测试
- uv sync 的正确执行
- 可选依赖的智能跳过
- 平台检测的准确性
Docker 容器化部署
Windows Docker(推荐用于生产)
FROM python:3.11-windowsservercore-ltsc2022
WORKDIR /app
COPY . .
# 安装完整依赖
RUN pip install -e .[windows]
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Linux Docker
FROM python:3.11-slim
WORKDIR /app
COPY . .
# 安装基础依赖
RUN pip install -e .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Docker 配置现在支持两种部署模式,分别针对 Windows 和 Linux 平台。
CI/CD 集成
GitHub Actions 工作流
项目包含完整的 CI/CD 配置,支持跨平台构建:
# 主要工作流 - Docker 构建
name: Docker Image CI Dev
on:
push:
branches: [ "main", "dev" ]
tags:
- 'v*'
pull_request:
branches: [ "main", "dev" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
# 安装 uv 环境
- name: 安装uv
uses: astral-sh/setup-uv@v2
with:
version: "0.8.11"
enable-cache: true
# 只安装基础依赖,避免平台特定依赖
- name: 安装基础依赖
run: uv sync
# 构建 Docker 镜像
- name: 构建并推送Docker镜像
uses: docker/build-push-action@v5
with:
context: .
file: ./Dockerfile
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
CI/CD 工作流现在使用 uv sync 而不是 uv sync --all-extras,确保在 Linux 环境中正确跳过 Windows 特定依赖。
跨平台开发最佳实践
1. 开发环境选择
- Windows 开发: 使用完整依赖,包括 UI 自动化功能
- Linux 开发: 使用基础依赖,专注于 API 功能开发
- 跨平台开发: 使用条件导入机制,确保代码在不同平台上的兼容性
2. 代码编写规范
- 使用
sys.platform或sys.platform.startswith()进行平台检查 - 为不支持的功能提供优雅降级方案
- 使用 try-except 处理可选依赖的导入错误
3. 测试策略
- 在本地开发环境中验证核心功能
- 使用 CI/CD 确保跨平台兼容性
- 定期运行跨平台测试脚本
4. 部署考虑
- 生产环境使用 Docker 容器化部署
- 根据目标平台选择合适的 Docker 基础镜像
- 确保依赖安装过程的平台兼容性
API 测试策略
-
单元测试
- 使用 pytest 进行单元测试
- 覆盖核心业务逻辑
- 模拟外部依赖
-
集成测试
- 测试完整的 API 工作流
- 验证剪映自动化功能
- 检查错误处理机制
-
性能测试
- 压力测试草稿创建
- 测试并发处理能力
- 监控资源使用情况
贡献指南
-
代码规范
- 遵循 PEP 8 编码标准
- 使用类型注解
- 编写清晰的文档字符串
-
提交规范
- 使用 Conventional Commits 格式
- 提供详细的变更描述
- 包含测试用例
-
审查流程
- 代码审查必须通过
- 测试覆盖率要求
- 性能基准测试
-
跨平台兼容性
- 新功能需支持跨平台
- 可选依赖的正确使用
- 优雅降级的实现
- 全面的测试覆盖
贡献指南现在强调跨平台兼容性和条件依赖的正确使用。