AgentStack
SKILL unreviewed MIT Self-run

Video Agent Jianying Editor

skill-chenyuxiaojin-video-agent-skills-video-agent-jianying-editor · by chenyuxiaojin

>

No reviews yet
0 installs
11 views
0.0% view→install

Install

$ agentstack add skill-chenyuxiaojin-video-agent-skills-video-agent-jianying-editor

Open-source listing — not yet scanned by AgentStack. Follow the source repository for install instructions.

Security review

⚠ Flagged

1 finding(s); flagged for manual review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures
  • high Dangerous shell/eval execution.

What it can access

  • Network access Used
  • Filesystem access Used
  • Shell / process execution Used
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Video Agent Jianying Editor? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

video-agent-jianying-editor(剪映剪辑师)

与达芬奇剪辑师的关系

两个剪辑师共享完全相同的输入文件,区别仅在输出目标:

| 维度 | 达芬奇剪辑师 (editor) | 剪映剪辑师 (jianying-editor) | |------|----------------------|------------------------------| | 输入 | visual-timeline.json + 音频 + 素材 | 相同 | | 输出 | DaVinci Resolve 项目(API 直连) | 剪映 draft 文件夹(离线生成) | | 依赖 | 达芬奇 Studio 必须运行 | VectCutAPI 服务必须运行 | | 导入方式 | 自动创建到达芬奇 | 复制 draft 到剪映目录,重启剪映 |

制片人在调度时通过参数 output_target 指定:

  • output_target: "resolve" → 调达芬奇剪辑师
  • output_target: "jianying" → 调剪映剪辑师
  • output_target: "both" → 两个都调,生成两份项目

职责边界

  • ✅ 读取 visual-timeline.json,通过 VectCutAPI 构建剪映草稿
  • ✅ 创建多轨时间轴(视频轨、音频轨、字幕轨)
  • ✅ 处理"后期制作"标记的镜头(生成占位素材放入草稿)
  • ✅ 为静态图片设置展示时长和基础动画
  • ✅ 导入字幕(SRT 格式)
  • ✅ 添加基础转场效果
  • ❌ 设计画面内容(分镜师负责)
  • ❌ 搜索或生成素材(美术师负责)
  • ❌ 配音(配音师负责)
  • ❌ 视频渲染导出(在剪映中手动完成)

输入 → 输出

输入(与达芬奇剪辑师完全相同)

  • visual-timeline.json(美术师产出)
  • audio/voiceover.mp3
  • audio/subtitles.srt
  • visuals/*.png(美术师下载/生成的素材)
  • storyboard.md(参考,用于后期制作镜头的细节)

输出

  • jianying-draft/dfd_/ — 剪映草稿文件夹,包含 draft_content.json 和素材引用
  • jianying-editor-report.md — 剪辑报告(包含导入指南和待手动完成的任务清单)

轨道结构

| 轨道 | 类型 | 内容 | |------|------|------| | 主视频轨 | 视频 | 图片/视频素材(按 visual-timeline.json 排列) | | 叠加轨 1 | 视频 | 文字动效占位素材(后期替换) | | 叠加轨 2 | 视频 | 数据动效/图表占位素材(后期替换) | | 主音频轨 | 音频 | voiceover.mp3 | | 音频轨 2 | 音频 | BGM 预留(留空) | | 字幕轨 | 字幕 | 根据 subtitles.srt 生成 |

前置环境

1. 安装 VectCutAPI

git clone https://github.com/sun-guannan/VectCutAPI.git
cd VectCutAPI
python -m venv venv-capcut
source venv-capcut/bin/activate
pip install -r requirements.txt
cp config.json.example config.json

2. 启动 VectCutAPI 服务

cd /path/to/VectCutAPI
source venv-capcut/bin/activate
python capcut_server.py
# 服务启动后监听 http://localhost:9001

3. macOS 剪映草稿目录

剪映专业版(macOS)的草稿目录:

/Users//Movies/JianyingPro/User Data/Projects/com.lveditor.draft/

如果用户使用 CapCut 国际版:

/Users//Movies/CapCut/User Data/Projects/com.lveditor.draft/

脚本会自动检测两个路径,优先使用存在的那个。

4. 依赖

  • Python 3.10+
  • VectCutAPI 服务(运行中)
  • FFprobe(获取音频/视频时长)
  • Pillow(生成占位素材)
  • requests(调用 VectCutAPI)

执行步骤

步骤 1:预处理后期制作镜头

与达芬奇剪辑师共用同一个脚本,生成占位素材。

python scripts/generate_placeholders.py /visual-timeline.json /visuals/

占位素材规则(与达芬奇剪辑师一致):

  • 文字动效:黑色背景 + 白色文字描述
  • 数据动效:深蓝背景 + 白色文字标注
  • 分屏:灰色背景 + 区域分割线

步骤 2:通过 VectCutAPI 构建剪映草稿

python scripts/import_to_jianying.py 

脚本执行流程:

import requests
import json
import subprocess
import os

CAPCUT_API = "http://localhost:9001"

# ── 1. 读取项目数据 ──
with open(f"{project_dir}/visual-timeline.json") as f:
    timeline = json.load(f)

# 获取语音时长
result = subprocess.run(
    ["ffprobe", "-v", "quiet", "-show_entries", "format=duration",
     "-of", "csv=p=0", f"{project_dir}/audio/voiceover.mp3"],
    capture_output=True, text=True
)
total_duration = float(result.stdout.strip())

# ── 2. 创建草稿 ──
resp = requests.post(f"{CAPCUT_API}/create_draft", json={
    "width": 1920,
    "height": 1080
})
draft_id = resp.json()["draft_id"]

# ── 3. 添加语音到主音频轨 ──
voiceover_path = os.path.abspath(f"{project_dir}/audio/voiceover.mp3")
requests.post(f"{CAPCUT_API}/add_audio", json={
    "draft_id": draft_id,
    "audio_url": voiceover_path,
    "start": 0,
    "end": total_duration,
    "volume": 1.0
})

# ── 4. 按 visual-timeline.json 添加视觉素材 ──
for shot in timeline["shots"]:
    shot_number = shot["shot_number"]
    start_time = shot["start_time"]
    end_time = shot["end_time"]
    acquire_method = shot.get("acquire_method", "search")

    # 确定素材文件路径
    if acquire_method == "post_production":
        img_path = os.path.abspath(
            f"{project_dir}/visuals/placeholder_{shot_number:03d}.png"
        )
    else:
        img_path = os.path.abspath(
            f"{project_dir}/visuals/{shot_number:03d}.png"
        )

    if not os.path.exists(img_path):
        print(f"⚠️  镜头 {shot_number} 素材缺失: {img_path}")
        continue

    # 添加到主视频轨
    requests.post(f"{CAPCUT_API}/add_video", json={
        "draft_id": draft_id,
        "video_url": img_path,
        "start": start_time,
        "end": end_time,
        "transition": "fade_in"
    })

# ── 5. 导入字幕 ──
srt_path = os.path.abspath(f"{project_dir}/audio/subtitles.srt")
if os.path.exists(srt_path):
    subtitles = parse_srt(srt_path)
    for sub in subtitles:
        requests.post(f"{CAPCUT_API}/add_subtitle", json={
            "draft_id": draft_id,
            "text": sub["text"],
            "start": sub["start"],
            "end": sub["end"],
            "font_size": 36,
            "font_color": "#FFFFFF",
            "shadow_enabled": True,
            "background_alpha": 0.6
        })

# ── 6. 保存草稿 ──
resp = requests.post(f"{CAPCUT_API}/save_draft", json={
    "draft_id": draft_id
})
draft_folder = resp.json()["local_path"]
print(f"✅ 草稿已保存: {draft_folder}")

步骤 3:部署草稿到剪映

脚本保存草稿后,自动将 dfd_xxx 文件夹复制到剪映的 drafts 目录:

import shutil

# 检测剪映草稿目录
jianying_paths = [
    os.path.expanduser(
        "~/Movies/JianyingPro/User Data/Projects/com.lveditor.draft/"
    ),
    os.path.expanduser(
        "~/Movies/CapCut/User Data/Projects/com.lveditor.draft/"
    ),
]

target_dir = None
for p in jianying_paths:
    if os.path.exists(p):
        target_dir = p
        break

if target_dir:
    dest = os.path.join(target_dir, os.path.basename(draft_folder))
    shutil.copytree(draft_folder, dest)
    print(f"✅ 草稿已复制到剪映目录: {dest}")
    print("⚠️  请重启剪映或切换一下草稿列表即可看到新项目")
else:
    print("⚠️  未找到剪映草稿目录,请手动复制:")
    print(f"   {draft_folder}")
    print("   → 到剪映的 Projects/com.lveditor.draft/ 目录下")

步骤 4:生成剪辑报告

输出 jianying-editor-report.md,内容包括:

# 剪映剪辑报告

## 项目信息
- 草稿名称: dfd_xxx
- 总时长: X 分 X 秒
- 镜头数: N 个
- 分辨率: 1920x1080

## 草稿位置
- VectCutAPI 输出: /path/to/dfd_xxx/
- 剪映目录: ~/Movies/JianyingPro/.../dfd_xxx/

## 导入指南
1. 确保剪映已关闭
2. 草稿已自动复制到剪映目录(如果检测到)
3. 打开剪映,在草稿列表中找到项目
4. 如果看不到,请重启剪映

## 待手动完成的工作

### 后期制作镜头(需替换占位素材)
- [ ] 镜头 003: 文字动效 — "..."
- [ ] 镜头 007: 数据图表 — "..."

### BGM
- [ ] 添加背景音乐到音频轨 2

### 字幕样式
- [ ] 调整字幕字体和位置(当前为默认白色 36px)

### 转场
- [ ] 检查各镜头间的转场效果,按需调整

### 最终导出
- [ ] 在剪映中预览并导出最终视频

VectCutAPI 接口速查

| 接口 | 用途 | 关键参数 | |------|------|----------| | POST /createdraft | 创建新草稿 | width, height | | POST /addvideo | 添加视频/图片到视频轨 | draftid, videourl, start, end, transition, volume | | POST /addaudio | 添加音频 | draftid, audiourl, start, end, volume | | POST /addtext | 添加文字 | draftid, text, start, end, fontsize, fontcolor, shadowenabled | | POST /addsubtitle | 添加字幕 | draftid, text, start, end, fontsize, fontcolor | | POST /addimage | 添加图片叠加 | draftid, imageurl, start, end | | POST /addvideokeyframe | 添加关键帧动画 | draftid, trackname, propertytypes, times, values | | POST /addeffect | 添加特效 | draftid, effectname, start, end | | POST /addsticker | 添加贴纸 | draftid, stickerurl, start, end | | POST /savedraft | 保存草稿到本地 | draftid | | POST /getduration | 获取媒体时长 | mediaurl |

MCP 集成(可选)

如果在 Claude Code 中使用,可以配置 VectCutAPI 的 MCP 服务器:

{
  "mcpServers": {
    "capcut-api": {
      "command": "python3",
      "args": ["mcp_server.py"],
      "cwd": "/path/to/VectCutAPI",
      "env": {
        "PYTHONPATH": "/path/to/VectCutAPI",
        "DEBUG": "0"
      }
    }
  }
}

配置后 Claude Code 可以直接调用 VectCutAPI 的工具,无需通过 HTTP。

注意事项

  • VectCutAPI 服务必须在运行状态(python capcut_server.py),否则脚本无法工作
  • 素材路径必须使用绝对路径,VectCutAPI 需要能访问到文件
  • 剪映版本兼容性:VectCutAPI 生成的草稿格式兼容剪映专业版和 CapCut 国际版
  • 草稿复制到剪映目录后需要重启剪映才能看到
  • 如果素材文件很大,save_draft 可能需要较长时间(会复制素材到草稿文件夹内)
  • 字幕样式在剪映中可以二次调整,脚本只设置基础样式

脚本文件

  • scripts/generate_placeholders.py — 生成后期制作占位素材(与达芬奇剪辑师共用)
  • scripts/import_to_jianying.py — VectCutAPI 导入主脚本
  • scripts/parse_srt.py — SRT 字幕解析工具
  • scripts/deploy_to_jianying.py — 自动复制草稿到剪映目录

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.