前言¶
在 DeepSeek Harness(DSH)裏,對話模型往往只有文本通道,本地視頻文件既進不了上下文,也沒有統一的時間軸。常見做法是手動截幾張圖、另開工具轉寫,再把片段拼進提示詞——步驟散、時間碼對不齊,模型很難把畫面和臺詞對應起來。
視頻之眼(dsh-video-eyes) 把抽幀、燒入真實時間碼、拼圖、音軌轉寫和可選的逐頁畫面描述收成一條流水線,並通過 read_video / read_video_transcript 暴露給 Agent。插件由社區維護者 fj7937290-sys 發佈,在插件目錄中歸類爲模型推理;倉庫當前在 GitHub 上星標爲 0,不代表功能完整性,安裝前仍建議閱讀源碼與 MIT 許可證。
下面介紹它是什麼、能做什麼,以及如何安裝與使用。
這是什麼¶
一句話:讓純文本模型理解視頻——按可調間隔抽幀,拼成帶真實時間碼的總覽圖,提取音軌並轉寫成帶時間戳的臺詞;在 DSH 插件形態下還可自行調用 Host 的視覺模型逐頁描述畫面。
倉庫裏有兩套交付物,邏輯與產物格式一致:
| 形態 | 位置 | 給誰用 |
|---|---|---|
| DSH 插件 | 倉庫根目錄(package.json / index.js / client.js / cordis.patch.yml) |
DSH:註冊工具,並在 Web 輸入框上方提供抽幀間隔滑塊 |
| 通用 skill | skills/video-eyes/ |
任意 Agent 或腳本:純 Node + ffmpeg,無第三方依賴 |
插件獨立工作,README 明確寫不依賴其他視覺插件;describe=true(默認)時由插件經 Host 的 LLM 服務完成識圖,不必安裝 vision-router。
核心功能¶
工具¶
| 工具 | 說明 |
|---|---|
read_video |
抽幀 → 燒入時間碼 → 拼圖 → 提取音軌 → 轉寫 → 默認再自行調用視覺模型逐頁描述 |
read_video_transcript |
按 record id 取回完整轉寫與自動紀要 |
兩種輸入都支持:
- 視頻:抽幀拼圖 + 音軌轉寫 + 逐頁描述(可配置關閉轉寫或識圖)
- 純音頻(無視頻流):跳過抽幀,只做轉寫,返回
hasVideo: false、sheetCount: 0
Web 界面:抽幀間隔滑塊¶
輸入框上方有一條滑軌(conversation.input.dock),範圍 0.1–10 秒:
- 拖動即生效,無需重新發消息;下一次
read_video會把它當作默認interval - 顯示形如
0.5s;非默認值時可點「恢復默認」 - 值存在 Host 進程內存,重啓後回到配置裏的
defaultInterval
Host 通過本地路由讀寫間隔,不經過第三方:
| 方法 | 路徑 | 作用 |
|---|---|---|
GET |
/_dsh/video-eyes/interval |
讀當前值(含 min/max/configured/runtime) |
POST |
/_dsh/video-eyes/interval |
設值;{"interval": 0} 或空值表示恢復默認 |
執行時優先級爲:工具參數裏的 interval > 運行時滑塊值 > 配置默認。
爲什麼叫 read_video 而不是 vision_*¶
dsh-vision-router 會接管所有以 vision_ 開頭的工具:在 Vision 模式關閉時調用會報錯,且工具可能從模型可見列表中被整段過濾。若視頻工具也落在 vision_ 命名空間,用戶關掉 Vision 開關後視頻能力會莫名消失。本插件因此使用 read_video*,與 vision-router 改名後不衝突,各自消耗各自的視覺調用配額。
與 vision-router 共處¶
運行時若檢測到 vision_describe(vision-router 在場),工具結果頭部會提示兩者互不干涉。任何其他插件若也註冊同名 read_video,會在 DSH 層因重複名而註冊失敗。
安裝與啓用¶
在 web profile 下安裝插件(命令來自倉庫 README):
dsh plugin --profile web add github:fj7937290-sys/dsh-video-eyes
package.json 要求 Node >= 18、dsh >= 0.1.5;插件面向 Web 客戶端注入輸入框滑塊。
若只想在任意 Agent 裏用同一套抽幀與轉寫邏輯,可複製 skill 到工作區:
cp -r skills/video-eyes <你的工作區>/.dsh/skills/
典型用法¶
DSH 內¶
安裝後,模型在需要理解本地視頻或音頻時調用 read_video,需要完整轉寫或紀要時用 read_video_transcript 按 record id 取回。抽幀間隔可在界面滑塊上調整,或在單次調用中顯式傳入 interval。
命令行 skill(與插件產物格式一致)¶
node <你的工作區>/.dsh/skills/video-eyes/scripts/video-eyes.mjs run demo.mp4 --interval 0.5
README 示例說明:例如 2 分鐘豎屏視頻,每 2 秒一幀、4×4 拼圖,每格左上角爲真實時間碼(見倉庫 docs/sample-real-video.jpg)。
配置項¶
可在 DSH 插件配置中調整(鍵名與默認值以 README 爲準):
| 鍵 | 默認 | 說明 |
|---|---|---|
artifactDir |
<cwd>/.dsh-video-eyes |
產物目錄,必須可寫;Host cwd 與子進程 ffmpeg 可寫路徑可能不一致,web profile 示例配到工作區 _video-eyes |
defaultInterval |
0.5 |
默認抽幀間隔(秒),範圍 0.1–10 |
columns / rows |
4 / 4 |
每頁網格 |
cellWidth |
480 |
單格寬度;豎屏會自動壓縮 |
maxSheets |
4 |
最多頁數 |
enableTranscribe |
true |
是否默認轉寫 |
enableDescribe |
true |
是否默認識圖 |
visionProvider / visionModel |
空 | 指定識圖路由;空則自動挑選 |
itingnaoApiKey |
空 | 聽腦 Key;空則讀 ITINGNAO_API_KEY,Windows 下再讀用戶級環境變量 |
ffmpegPath |
空 | 空則依次:FFMPEG_PATH → 包內 bin/ffmpeg.exe → PATH |
找不到可用視覺模型時,read_video 不會整體失敗:describe.status = unavailable 並給出原因,拼圖與轉寫仍可使用。
代碼會按 artifactDir → cwd/.dsh-video-eyes → 系統臨時目錄 順序實測寫入,採用第一個真正成功的路徑。
適用場景與注意¶
適合:需要在 DSH 或通用 Agent 裏把本地視頻/音頻變成「帶時間碼的畫面總覽 + 帶時間戳轉寫」、再交給文本或多模態模型推理的場景;與 vision-router 並存、各自識圖時也可選用本插件處理視頻專用流水線。
務必留意:
- 插件運行在 DSH Host 進程裏,不受會話文件沙箱約束(沙箱只約束 Agent 的 shell 工具)。安裝前應檢查源碼與 MIT 許可證,並確認
artifactDir對 ffmpeg 子進程可寫。 - 轉寫依賴聽腦相關 Key 配置;抽幀依賴 ffmpeg(可配置路徑或使用包內 Windows 二進制)。
- DSH 生態理念是「一切皆插件」;社區目錄站點與 DeepSeek / 幻方無官方從屬關係,本文僅介紹社區插件能力。
結尾¶
dsh-video-eyes 把「抽幀 + 時間碼 + 轉寫 + 可選自描述」做成可複用流水線,並刻意避開 vision_ 工具命名空間,方便與 vision-router 同場使用。需要安裝命令、配置與共處規則時,以倉庫 README 爲準。
- 插件目錄頁:https://www.skillhub.cn/plugins/fj7937290-sys/dsh-video-eyes
- GitHub:https://github.com/fj7937290-sys/dsh-video-eyes