dsh-video-merger:按文件夹合并视频并保持源规格

前言

在 DeepSeek Harness(DSH)里做本地批处理时,常见需求是把一批目录下的短视频拼成一个文件:课程分集、录屏分段、监控或素材按日期的切片等。手工用 ffmpeg 逐个目录写 concat 列表,再判断能否 -c copy、规格不一致时又要对齐第一个片段,既重复又容易漏目录。

下面介绍的 dsh-video-merger(维护者 a-mochis)是 DSH 的客户端(Web UI)插件:递归扫描目录树,按文件夹分组;每个至少包含 2 个视频的文件夹输出一个合并文件。片段编码、分辨率、帧率、像素格式与音频布局一致时走无损 remux;不一致时才按第一个片段规格归一化后再拼接。

插件仓库:https://github.com/a-mochis/dsh-video-merger
社区目录页:https://www.skillhub.cn/plugins/a-mochis/dsh-video-merger
许可证:MIT(package.json 中版本为 1.0.4)。

这是什么

一句话:在指定根目录下,每个子文件夹各生成一个合并视频,尽量保持源规格不变。

同一套合并引擎提供三种入口:

  • 会话内 视频合并 / Video Merge 标签页的 Web UI;
  • DSH 工具 merge_folder_videos;
  • 独立 CLI:node bin/merge-videos.mjs(需本机 Node.js 20+)。

运行时依赖本机 ffmpeg 与 ffprobe(可放在 PATH、在插件中指向其目录;Windows 上 UI 可下载已知可用构建)。插件本体无运行时 npm 依赖;npm install 仅用于跑客户端测试。

核心功能

根据仓库 README,已核实的能力包括:

  1. 按文件夹分组:递归扫描根目录;仅当文件夹内视频数 ≥ 2 才合并;片段默认按文件名排序(也可选 mtime)。
  2. 默认可无损:规格一致时用 ffmpeg concat demuxer 且流复制(-c copy),不重新编码。
  3. 规格不一致时回退:分辨率、帧率、编码、音频布局混合时,对齐到第一个片段再拼接(reencodeFallback 默认真)。
  4. 可选统一输出:可将所有结果集中到同一输出目录,或写回各源文件夹。
  5. Web UI:内置目录浏览、文件夹勾选、进度/速度/ETA、取消、播放、在文件管理器中显示;管理对话框可清理当前选择、历史根目录或合并记录。
  6. 输出命名与再扫描:输出名为 <folder>_merged.<原扩展名>;统一输出模式下用相对路径前缀避免重名;已存在的 *_merged.* 在下次扫描时会被忽略(除非开启覆盖)。

处理流程可概括为:扫描目录 → ffprobe 各片段 → 比较签名 → 相等则 concat + copy,不等则按首片段归一化后拼接。

环境与依赖

项目 说明
DSH 带 Web UI 的桌面或浏览器配置;package.json 要求 dsh >=0.2.0-0
ffmpeg / ffprobe 执行合并;需可用且可被插件找到
Node.js 20+ 仅在使用 CLI 或运行仓库测试时需要

安装与启用

安装本质是向 DSH 注册本地 bundle,官方 README 给出两类方式(示例路径请换成你本机目录)。

方式一:安装本地 bundle

在 DSH 中调用 plugin_manager 工具:

plugin_manager install_bundle target = <dsh-video-merger 的绝对路径>

也可从 latest release 下载打包 zip,解压后对解压目录执行同样的 install_bundle。

安装或更新后,在 Web UI 中强制刷新(Ctrl+Shift+R)。打开任意会话,在会话标签栏选择 视频合并 / Video Merge。

方式二:Discover 个人索引

在 DSH 中打开 Plugins → Discover → Index sources → Add index source,粘贴:

https://cdn.jsdelivr.net/gh/a-mochis/dsh-video-merger@main/market/index.json

Discover 中会出现 Video Merger 卡片,安装的仍是同一 bundle。该索引由仓库维护,不等同于社区精选目录的正式条目;细节见仓库 docs/marketplace.md。

典型用法

Web UI

  1. 打开 视频合并 标签。
  2. 选择根目录(可浏览、返回上级或直接输入路径),点击 选择此文件夹。
  3. 在列表中勾选要合并的文件夹,可展开查看片段顺序;取消不需要的项。
  4. 统一输出到同一个文件夹:勾选则集中输出(默认输出路径为扫描根目录);不勾选则各结果写回对应源文件夹。
  5. 点击 开始合并,查看各文件夹与总进度;完成后可播放或在文件管理器中打开结果。
  6. 页头 管理 / Manage 可切换最近根目录、清理选择或历史。

DSH 工具 merge_folder_videos

merge_folder_videos root="E:\videos" recursive=true outputDir="E:\videos\merged"

常用参数(节选,完整表见 README):

参数 默认 含义
root 必填 扫描根目录
folder – 只合并该文件夹,不扫全树
recursive true 是否扫描子目录
order name name 或 mtime
overwrite false 是否覆盖已有输出
reencodeFallback true 规格不一致时是否归一化后合并
deleteSource false 成功后是否删除源片段
outputDir – 统一输出目录
wait true false 时立即返回 job id

CLI

node bin/merge-videos.mjs "E:\videos" --out "E:\videos\merged"

其它开关包括 --no-recursive、--folder <path>、--order name|mtime、--overwrite、--no-reencode、--delete-source、--ffmpeg <dir>、--json。退出码:0 全部成功,1 至少一处失败,2 参数错误,3 找不到 ffmpeg/ffprobe。

适用场景与注意

适合:本地素材树按「每个文件夹 = 一集/一天/一个场景」组织,需要批量生成 *_merged.* 且希望同规格目录尽量不重编码的用户;希望在 DSH 会话里用图形界面完成,或把合并挂进智能体工具链的场景。

注意:

  • 插件在当前 DSH 进程权限下读写你选择的目录;安装前请自行审阅源码与 MIT 许可证,确认路径与 deleteSource / --delete-source 等选项符合预期(默认不删源文件)。
  • 规格不一致的文件夹会转码,耗时与画质取决于首片段规格与内容;若希望跳过混合规格目录,可对 CLI 使用 --no-reencode,或将工具的 reencodeFallback 设为 false。
  • 社区目录(如 skillhub.cn)用于发现与链接,与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,本插件分类为客户端,侧重 Web UI 与本地文件操作。

结尾

dsh-video-merger 把「按文件夹扫树 → 判断能否无损拼接 → 必要时对齐首片段」封装进 DSH:图形界面、merge_folder_videos 与 CLI 共用同一引擎,适合在智能体工作流里批量整理分段视频。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye