200+ 个视频一键自动剪辑成 10 分钟卡点成片:我用 DeepSeek Harness 写了个自动剪辑插件

一、背景:228 个毕业视频,剪不动了

        毕业季结束后,我翻出这几年的相册:228 个视频文件,52.8 GB,总时长 82 分钟,横跨 2023 年到 2026 年毕业典礼——佳能相机的 MVI_ 素材、手机的 VID_ 视频、微信收发的 Video_ 片段,乱七八糟什么格式都有。

        想做一部 10 分钟的毕业回忆录,但手动剪辑意味着:

        - 228 个文件要逐个打开看内容

        - 82 分钟素材里找值得保留的瞬间

        - 4K / 1080p / 竖屏混剪,规格统一就够头疼

        - 还要卡点、转场、排序……

        于是我干脆给 DeepSeek Harness写了个插件“dsh-video-clip”,让 AI 完成“识别 → 分析 → 删减 → 拼接”全流程,最后产出一部 11.8 分钟的卡点成片。

> 🔗 项目地址(GitHub):GitHub - auspiceflow/dsh-video-clip · GitHub

二、插件能做什么

        一句话:给 AI 装上一套全自动剪辑流水线。核心能力:

能力

实现

超量文件识别

递归扫描目录,分页处理,200+ 视频无压力

内容分析(信号级)

场景切换检测 + 音频能量包络 → 每个视频的「精彩区间」和「可删冗余段」

内容分析(语义级)

抽帧 + Codex 视觉模型 → 中文内容描述、场景类型、人物、氛围、是否值得保留

自动删减

只保留关键片段,丢弃冗长平淡段

自动方案生成

每个视频公平贡献最佳片段、长视频多配额、节拍网格量化时长

卡点拼接

0.8s 节拍网格(75 BPM)+ 0.12s 淡入淡出 + 统一 1080p30

三、工作流程

graph LR

    A[素材目录] --> B[video_batch_probe<br/>批量元数据]

    B --> C[video_scan_activity<br/>信号分析:精彩/可删区间]

    C --> D[video_analyze_content<br/>视觉语义标签]

    D --> E[video_plan<br/>生成剪辑方案]

    E --> F[video_build<br/>裁剪+拼接成片]

        核心算法设计

1. 活动度分析(找关键点)

        对每个视频同时跑两条 ffmpeg 通道:

# 场景切换检测(select + showinfo + metadata,兼容老版 ffmpeg)

ffmpeg -i in.mp4 -vf "select='gt(scene,0.35)',showinfo,metadata=print" -an -f null -

# 音频能量包络(每 0.5s 一个 RMS 采样点)

ffmpeg -i in.mp4 -af "astats=metadata=1:reset=0.5,ametadata=print:key=lavfi.astats.Overall.RMS_level" -vn -f null -

        两者融合成 0.5 秒粒度的“活动度曲线”,滑动窗口打分后:

        - 高于阈值 → 高光区间(保留)

        - 持续低活动 → 平淡区间(可删)

2. 公平覆盖(防长视频被挤掉)

        普通做法按分数全局排序选片段,会导致 200 多个短视频把毕业典礼长视频挤没影。我的做法是每个视频至少贡献一个最佳片段,预算按视频数均分,长视频(>45s)额外加配额:

单视频预算 = max(最小片段时长, 总目标时长 / 视频数)

长视频预算 × 1.5 ~ × 2

3. 卡点量化

        所有片段时长量化到 0.8 秒节拍网格(等效 75 BPM),转场点天然落在节拍上;每段首尾 0.12 秒淡入淡出,衔接顺滑。

四、快速上手

环境准备

```bash

# 1. Node.js ≥ 20

# 2. ffmpeg / ffprobe(免安装二进制也可以)

npm install @ffmpeg-installer/ffmpeg @ffprobe-installer/ffprobe

# 3. Codex CLI(可选,语义分析需要,需登录)

```

安装插件

        在 DSH 会话中:

1. 复制 `plugin.js` 中 `return {` 起的代码;

2. 通过 cordis_define 创建动态插件,粘贴为 `code.host`;

3. `cordis_run` 激活。

修改配置

        插件顶部 `CONFIG` 对象集中了所有路径与参数:

const CONFIG = {
  ffmpeg: 'D:\\tools\\ffmpeg.exe',   // ffmpeg 路径
  workDir: 'D:\\剪辑工程',            // 工作目录
  codexExe: '...\\codex.exe',        // Codex CLI(可选)
  targetSec: 600,                    // 目标成片 10 分钟
  beatSec: 0.8,                      // 卡点节拍
  minClipSec: 1.5, maxClipSec: 4,    // 片段时长区间
}

跑流水线

video_batch_probe   → 228 个视频元数据一次扫完

video_scan_activity → 分批活动度分析(offset/limit 分页)

video_analyze_content → 分批视觉语义分析(需 Codex)

video_plan          → 生成 plan.json 剪辑方案

video_build         → 执行裁剪拼接 → output/final.mp4

五、实际效果

        在真实素材集上的实测数据:

指标

数值

输入素材

228 个视频 / 52.8 GB / 82 分钟

成片时长

11.8 分钟(709.9s)

选材压缩比

约 7:1

片段数

231 段(每视频至少 1 段)

输出规格

1920×1080@30fps,H.264+AAC,662MB

编排顺序

按拍摄时间(2023 → 2026 毕业季)

        产物链:`scan.json`(活动度分析)→ `content.json`(语义标签)→ `plan.json`(精确时间码方案)→ `seg_*.mp4`(中间片段)→ 成片。

六、工程上的几个坑

1. 沙箱管道限制:DSH 沙箱禁止 Node 子进程管道捕获输出(EPERM),改用文件重定向方案;

2. 老版 ffmpeg 兼容:`metadata=print` 不输出时间戳,用 `showinfo` 的 `pts_time` 关联;

3. 幂等重跑:build 阶段每个片段生成后落盘,失败重跑自动跳过已完成部分(断点续跑);

4. 无音轨素材:相机素材常无音轨,用 `anullsrc` 补静音轨保证 concat 流拷贝成功。

七、局限与计划

        - 语义分析依赖视觉模型:需要 Codex 登录或 OpenAI 兼容 key(无 key 时仅信号级分析可用);

        - 当前转场为淡入淡出,后续计划支持 BGM 节拍对齐混音、片头字幕;

        - 视频中的具体人脸识别、姓名标注不在能力范围内。

八、总结

        这套插件的本质是把剪辑师的“看素材 → 做标注 → 定结构 → 上时间线”压缩成一条可重跑的流水线。82 分钟素材全程无需手动翻看,从扫描到成片一个多小时全自动完成(信号分析约 40 分钟,剪辑约 20 分钟)。

        对毕业回忆录、活动记录、旅行视频这类“素材多、结构清晰、时长目标明确”的场景非常合适。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值