Back to Skills

chatcut-property-merge

chatcut-property-merge

This skill should be used when the user supplies multiple local real-estate walkthrough or property-showcase video clips (e.g. 实探视频, 带看视频, 探盘视频) and asks to merge them into one edited video with accurate subtitles, keyword highlights, on-screen overlay cards, background music, and POI (point-of-interest such as 商场 / 学校 / 医院 / 公园 / 地铁) callouts. Trigger phrases include 合并剪辑, 批量合并, 实探视频剪辑, 字幕高亮, 重点标注, POI 叠加, 背景音乐, 删除卡顿/语气词, applied to a batch of numbered local video files. The workflow is built on the ChatCut MCP (chatcut-*) toolchain plus local Python helper scripts for overlay cards and royalty-free BGM synthesis.

SKILL.md


name: chatcut-property-merge description: This skill should be used when the user supplies multiple local real-estate walkthrough or property-showcase video clips (e.g. 实探视频, 带看视频, 探盘视频) and asks to merge them into one edited video with accurate subtitles, keyword highlights, on-screen overlay cards, background music, and POI (point-of-interest such as 商场 / 学校 / 医院 / 公园 / 地铁) callouts. Trigger phrases include 合并剪辑, 批量合并, 实探视频剪辑, 字幕高亮, 重点标注, POI 叠加, 背景音乐, 删除卡顿/语气词, applied to a batch of numbered local video files. The workflow is built on the ChatCut MCP (chatcut-*) toolchain plus local Python helper scripts for overlay cards and royalty-free BGM synthesis. agent_created: true

ChatCut 实探视频批量合并剪辑

Overview

将多条本地房产实探 / 带看视频按序号合并为一段结构清晰、重点突出的成片,自动完成:转写字幕 → 清理口播(卡顿 / 语气词)→ 关键词高亮 → 贴图文字说明 → 低音量氛围 BGM → 周边配套(POI)识别叠加 → 导出。

整套流程基于 ChatCut MCP(chatcut-* 工具) 的可编辑时间线,叠加层由本地 Python 脚本(scripts/)生成,渲染既可在浏览器本地完成,也可走云端。

When To Use

  • 用户提供 1.mp4 2.mp4 3.mp4 ... 等多条本地素材并说「按序号合并剪辑」。
  • 要求中同时出现:字幕、重点高亮、贴图/文字说明、BGM、POI(商场/学校/医院/公园等)叠加、删卡顿/语气词。
  • 房产 / 探盘 / 带看类视频的批量粗剪与精修。

若用户只给单条视频、或不要字幕 / POI 等部分环节,仍可用本流程,跳过对应步骤即可。

Prerequisites(环境)

ChatCut 本地上传助手 chatcut-upload-media 依赖 ffmpeg / ffprobe / node。本机已确认可用路径:

  • C:/Users/Administrator/.workbuddy/binaries/ffmpeg/ffmpeg-9.0.1-essentials_build/bin(含 ffmpeg.exe + ffprobe.exe)
  • C:/Users/Administrator/.workbuddy/binaries/node/versions/24.14.0(node)

执行上传命令前,先把它们加入 PATH:

export PATH="/c/Users/Administrator/.workbuddy/binaries/ffmpeg/ffmpeg-9.0.1-essentials_build/bin:/c/Users/Administrator/.workbuddy/binaries/node/versions/24.14.0:$PATH"

中文字体(贴图与字幕):C:/Windows/Fonts/msyh.ttc(常规)、msyhbd.ttc(粗体)——ChatCut 字幕经 libass/DirectWrite 可直接用「Microsoft YaHei」。

Workflow

Step 1 — 建项目

chatcut__create_project:compositionWidth=1920, compositionHeight=1080, fps=30。返回 projectId 与 timelineId,后续所有调用都要带上。

Step 2 — 上传素材

  1. chatcut__import_media(action: create_session)拿到 token + endpoint。
  2. 用上传助手批量上传,每批最多 4 个文件:
    chatcut-upload-media --token <token> --endpoint <endpoint> \
      "1.mp4" "2.mp4" "3.mp4" "4.mp4" --json-out "$TEMP/imports.json"
    
  3. 解析 JSON:result.assetId 即为素材 ID(assetType 区分 video / image / audio)。

Step 3 — 转写

  • 上传助手已自动抽音轨;逐条 chatcut__trigger_transcript(asset + timelineId + projectId)。多数情况下后端已 complete,无需等待。
  • chatcut__read_script(timelineId + projectId)读取整段时间线口播(markdown,含 [sN] 段落编号)。

Step 4 — 按序号拼接

chatcut__edit_item 的 adds 数组,按素材序号顺序,每段 type:"video", assetId, alignTo:"track-end", trackId:"V1" 链式拼接。

Step 5 — 清理口播(删卡顿 / 语气词)

  1. chatcut__clean_script(longSilence: 800)压缩超过 0.8s 的长停顿(即「卡顿」),保留自然呼吸节奏。
  2. chatcut__read_script 重读,用 chatcut__apply_script 提交编辑后的 markdown:删除「啊 / 呢 / 呃」等语气词与冗余过渡句(如「就是一点」)。务必保留顶部 4 行标记(script-stamp / script-lib-stamp / script-timeline / script-track)与原始 [sN] 身份,只改正文。

Step 6 — 字幕 + 关键词高亮

  1. chatcut__edit_captions(action: enable)开启字幕轨道。
  2. chatcut__read_captions 读取全部字幕卡片与 revision。分页参数必须放进 json 字段:{"limit":50,"offset":50,"revision":"fnv1a:..."}。
  3. chatcut__edit_captions(action: batch)批量 set_card_span_style 高亮重点词。样式模板见下(琥珀金卖点 / 蓝色交通 POI),朗读时带淡入动效。

Step 7 — 生成叠加层 + BGM(本地脚本)

  • scripts/make_overlays.py:JSON 配置驱动,生成 1920×1080 透明 PNG 卡片(置于顶部,避开底部字幕)。先 cards.json 定义各卡文案/配色/出现时机,再运行。
  • scripts/make_bgm.py <时长秒> [输出.wav]:合成免版权轻氛围钢琴垫乐(I–vi–IV–V + 琶音),立体声,音量压低,后期再调。
  • scripts/poi_detect.py <转写文本或字幕.md>:扫描口播,输出 POI 命中(分类 + 词 + 配色),据此绘制配套卡。

Step 8 — 上传并铺叠加层

  1. chatcut__import_media 分批(≤4)上传 8 张贴图 + 1 个 BGM,拿 assetId。
  2. chatcut__edit_item 的 adds:
    • 贴图:type:"image", assetId, from:"<起点s>", duration:"<时长s>"(起点/时长来自转写时间轴);自动落在非重叠轨道(V2+),全部置于顶部。
    • BGM:type:"audio", assetId, from:"0s", duration, decibelAdjustment:-15, audioFadeIn:1, audioFadeOut:2.5(压低到人声下,带淡入淡出)。

Step 9 — 验证 + 导出

  • chatcut__preview_timeline(views:["timeline"] 看结构;views:["viewer"], viewerFrames:[...] 取像素帧需已连接的浏览器执行器)。
  • chatcut__submit_export(format:"video", codec:"h264", resolution:"1080p", renderMode:"local" 或 "cloud",带 idempotencyKey 防重)。
  • chatcut__track_export(action:"status", renderIds)跟踪进度。
  • 本地渲染(local)依赖浏览器 lease:会话中断 / 上下文压缩会导致 BrowserDisconnectedError。省心方案用 renderMode:"cloud"(服务器渲染,不依赖本地浏览器,1080p 封顶)。

Critical Gotchas(必看)

  • 上传 PATH:不在 PATH 时 chatcut-upload-media 直接失败,先 export PATH=...ffmpeg bin...;...node...。
  • read_captions 分页:limit/offset/revision 必须包在 json 字符串字段里,否则参数被忽略、只读前 50 张。
  • apply_script 易错:删词时别动顶部 4 行标记与 [sN];改完务必回填原始 script-stamp。
  • BGM add_pad 广播:numpy 切片累加要用 L[i0:i0+n] += ...,不能直接对整段 L[:] += sig(长度不一致会广播报错)。
  • 本地渲染断连:长会话下 renderMode:"local" 易因浏览器断开失败;重试即可,或直接改用 "cloud"。
  • POI 不硬编:只叠加口播里实际提到的配套;未提及的类别不要编造卡片。

POI 检测规则(scripts/poi_detect.py)

逐句扫描转写,命中即归类并配色(叠加卡用对应色):

类别 关键词 配色
商场 商场、广场、mall、购物中心、万象城、万达 橙 #F59E0B
学校 小学、中学、大学、学校、附小、附中、学院 蓝 #3B82F6
医院 医院、三甲、卫生院、诊所 红 #EF4444
公园 公园、绿地、湿地公园、市政公园 绿 #22C55E
交通 地铁、地铁口、站、公交、轻轨、高铁 青 #06B6D4
生活 超市、菜市场、银行、菜场 紫 #A855F7

同一类别取首次出现时间作为卡片起点;可在 Step 8 与对应讲解片段对齐叠加。

Resources

  • scripts/make_overlays.py — JSON 驱动的透明贴图卡片生成器(含 card() 绘制函数 + 区域预设)。
  • scripts/make_bgm.py — 免版权氛围 BGM 合成(参数化时长)。
  • scripts/poi_detect.py — 转写文本 POI 分类检测。
  • references/chatcut_tools.md — ChatCut MCP 工具契约、参数示例与全部坑点详版。

Want to use chatcut-property-merge in Slack or Teams?

chatcut-property-merge

Run with Leina in 1-Click