Communitygithub.com

视频剪辑

用于剪辑视频、拼接片段、添加片头剧照、抽帧/抽音轨、导出 mp4 等操作(Android 宿主 weizhi:video)。桌面环境无 MediaCodec 时不适用。

视频剪辑 是什麼?

本技能(video-edit)专为 Android 宿主 `weizhi:video` 提供视频剪辑能力,支持探针(probe)、抽帧/抽音轨、导出 mp4 等核心操作。它提供两套导出 API:v1 用于简单裁切和无淡化拼接(remux),v2 支持多轨、剧照、Ken Burns 效果和交叉淡化。开发者应先调用 `load_skill` 加载技能文档,复杂任务前使用 `find_caps` 查询具体能力签名以避免参数错误。脚本需放入 `jobs/*.js` 并通过 `run_js` 的 `file` 参数执行,可设置超时上限 600000ms。技能强调正确的轨道使用规则,例如图片必须放入 `type: "image"` 轨并设置 `durationMs`,交叉淡化仅支持图片轨且要求下一片段起始时间精确重叠。对于多轨复杂时间线,推荐先用 v1 导出中间片段再拼接,避免未声明淡化的片段硬叠。最终成片信息以链接形式告知用户。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/fengshihao/agent1-skills/tree/main/skills-src/video-edit

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

預覽

來自技能 README

說明文件

视频剪辑(weizhi:video)

范围

做不做
probe、抽帧/抽音轨、exportVideo 导出用 webview_exec 解码整段 mp4
v1 remux:掐头去尾、无淡化拼接假装支持桌面转码(桌面无本包)

开工协议

  1. 先 load_skill(video-edit) 读本正文。
  2. 写 exportVideo 或复杂时间线前:find_caps 一次(query 含 exportVideo weizhi:video 或具体能力),按返回的调用示例写,不要猜字段名。
  3. 脚本放进 jobs/*.js,用 run_js 的 file 执行;可 timeout_ms 加大(上限 600000)。
  4. 脚本里 API 报错(如 bad argument、unsupported):再 find_caps 核对签名后改脚本。

选路

任务API
只裁一段、多段首尾相接、不重编码v1 exportVideo({ clips: [{ path, startMs?, endMs? }], output })
多轨、剧照片头、Ken Burns、交叉淡化v2 exportVideo({ width, height, tracks, output })

时间线 v2(要点)

  • 剧照 / 图片:type: "image" 轨,durationMs 必填。
  • mp4 片段:type: "video" 轨,inMs / outMs;不要把图片塞进 video 轨。
  • 交叉淡化(仅 image 轨):后一个 clip 写 transition: { type: "crossfade", durationMs: D },且
    startMs_next = startMs_prev + durationMs_prev - D(重叠恰好 D 毫秒)。没有 crossfadeMs 字段。
  • 同一轨上未声明 transition 的 clip 不能时间重叠;报错 overlapping clips 即检查上式与 transition。
  • transition 与 clip 自写的 opacity 关键帧不能同时用。
  • 音轨:type: "audio" 单独一条 track。

示例(两图淡化 + 再接视频):

import { exportVideo } from "weizhi:video";

const D = 300;
await exportVideo({
  width: 720,
  height: 1280,
  tracks: [
    {
      type: "image",
      clips: [
        { src: "a.jpg", startMs: 0, durationMs: 1000 },
        {
          src: "b.jpg",
          startMs: 1000 - D,
          durationMs: 1000,
          transition: { type: "crossfade", durationMs: D },
        },
      ],
    },
    {
      type: "video",
      clips: [{ src: "clip.mp4", startMs: 1700, inMs: 0, outMs: 5000 }],
    },
  ],
  output: "out/final.mp4",
});

推荐流程

  1. probe 源视频时长与分辨率。
  2. 需要封面帧:extractFrame / extractFrames(见 find_caps)。
  3. 复杂片:可先 v1 导出中间 part1.mp4、part2.mp4,再 v1 或 v2 拼接;避免在一轨上硬叠未声明淡化的片段。
  4. 配乐:单独 audio 轨,outMs 对齐画面总长。

编排

  • 一段 jobs/render.js 串行完成探测、导出、复核(可再 probe 成片)。
  • 外层不要用多个工具代替一整段脚本。

对用户怎么说

说明成片文件名与时长;用 [成片](out/xxx.mp4) 链接。不堆栈术语。

相關技能