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 共用同一引擎,適合在智能體工作流裏批量整理分段視頻。

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

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

小夜