用 dsh-video-downloader 在 DeepSeek Harness 裏檢測並下載網頁視頻

前言

DeepSeek Harness(簡稱 dsh)的設計是「一切皆插件」:瀏覽器自動化、視覺理解、文檔解析都可以往運行時上掛。做資料整理或內容歸檔時,還有一類很具體的需求——對話裏丟進一個鏈接,讓智能體先判斷這是不是視頻或音頻,再把文件落到本地。社區目錄裏瀏覽器自動化插件不少,專門做媒體識別和下載的工具卻很少。

dsh-video-downloader 就是衝着這個缺口來的。它把 Chrome MV3 擴展 video-downloader-extension 裏的媒體識別邏輯從瀏覽器沙箱裏抽出來,變成純 Node 函數,再註冊成三個 agent 可調用的工具。本文按社區目錄頁、GitHub 倉庫 README 與 src/index.js 交叉覈對後整理。需要先說明兩點:社區插件目錄是獨立站點,與 DeepSeek / 幻方沒有官方從屬關係;Harness 本身仍處於 developer preview,後續可能出現不兼容變更。

這是什麼

dsh-video-downloader 是一款「工具與能力」類 DSH 插件,由 zimai233 維護,許可證 MIT,主要語言 JavaScript。倉庫 package.json 中的版本號是 0.1.0。2026-08-18 覈實時,目錄頁與 GitHub 均顯示 1 星;倉庫帶有 deepseek-harnessdsh-plugin 兩個 topic。

一句話定位:在 DeepSeek Harness 對話裏,按 URL 判斷是否像可下載的視頻/音頻,並把媒體直鏈流式寫到磁盤。站點識別按 hostname 覆蓋 Bilibili、YouTube、抖音、小紅書,短鏈域名 youtu.beiesdouyin.comxhslink.com 也會歸到對應站點,其餘記爲 other

它解決的不是「給一個播放頁就自動解析並扒片」那種完整下載器。video_analyzevideo_quality_parse 只看 URL 字符串,不會去抓頁面;video_download 接收的是 mp4 / m3u8 / mpd / m4s 這類直鏈。README 寫明:插件不繞過 DRM、登錄牆或平臺付費內容,使用時需遵守各平臺服務條款與著作權法。

核心功能

插件通過 @deepseek-ai/dsh-toolsdefineTool 註冊三個工具。純函數核心(isMediagetQualitygetExtdetectSite)也會導出,方便測試和二次開發。

video_analyze:只分析、不下載

傳入一個 url,返回 JSON:

{ "isMedia": true, "site": "bilibili", "quality": "1080P", "ext": "m4s", "mimeHint": "video/iso.segment" }

判定規則來自源碼裏的啓發式:

  • 是不是媒體:看擴展名(mp4、m3u8、webm、m4s、mp3 等)、URL 片段(如 bilivideo.comgooglevideo.com.m3u8),以及可選的 Content-Type。
  • 屬於哪個站點:解析 hostname,映射到 bilibili / youtube / douyin / xiaohongshu / other
  • 清晰度:從 1920x1080height / quality 查詢參數、碼率閾值,或 URL 裏的 1080720 等關鍵字儘量猜;猜不到就按容器標成 HLS / DASH / M4S / FLV
  • 擴展名與 MIME 提示:例如 .m3u8application/x-mpegURL,缺省擴展名時源碼會落到 mp4

工具描述寫得很明確:分析過程不會去請求這個 URL。把 B 站播放頁丟進來,通常只能識別出 sitebilibiliisMedia 未必爲真——因爲它看的是鏈接長什麼樣,不是頁面裏藏了什麼。

video_download:把直鏈流式寫到磁盤

這是真正會發網絡請求的工具。參數與返回如下:

參數 說明
url 必填,媒體直鏈
outPath 可選,絕對路徑或相對當前工作目錄;不填則寫到 ./downloads/
headers 可選對象,合併到默認的瀏覽器請求頭之上

返回 JSON:{ savedTo, bytes, quality, ext, elapsedMs }

下載行爲在 README 和源碼裏是對齊的:

  • 請求頭帶 Chrome 風格 User-Agent,並按 URL 的 origin 自動加 Referer
  • fs.createWriteStream 流式寫入,目錄不存在會創建。
  • 手動跟隨重定向,最多 5 次。
  • 超時 60 秒;執行被取消時會 abort。

默認文件名從 URL 路徑最後一段清洗得到;路徑裏的非法字符會被替換成下劃線。

video_quality_parse:純正則、無網絡

只返回 { quality, ext },不判斷站點,也不下載。適合已經拿到直鏈、只想從 URL 裏摳清晰度和容器的情況。清晰度同樣是 best-effort:先看寬高和查詢參數,再看碼率閾值和關鍵字,最後纔回落到容器類型。

源碼裏還有、但沒註冊成工具的部分

src/index.js 另外導出了 parseBilibiliJsonparseYoutubeStreamingextractMediaUrls:分別用來解析 B 站 playurl JSON、YouTube streamingData,以及從頁面文本里抽出 mp4 / m3u8 鏈接。它們是純函數,沒有掛到 agent 工具表上。如果只通過對話調用插件,智能體用不了這三套解析器;要二次開發或自己喂 JSON 文本,才用得上。

實現上還有兩點和安裝有關:包是純 ESM,main 指向 src/index.js,沒有構建步驟;cordis.patch.yml 以 id video-downloader、name dsh-video-downloader 插入插件行。

安裝與啓用

社區目錄頁給出的安裝命令如下,在 DeepSeek Harness 終端中運行即可:

dsh plugin add github:zimai233/dsh-video-downloader

需要可復現安裝時,按目錄頁說明把 commit 哈希釘上:

dsh plugin add github:zimai233/dsh-video-downloader#<commit>

<commit> 換成倉庫裏實際的 commit SHA。官方文檔裏也常見帶 profile 的寫法,例如 dsh plugin --profile demo add github:zimai233/dsh-video-downloader

倉庫 README 還寫了按 npm 包名安裝:dsh plugin --profile myprofile add dsh-video-downloader。截至 2026-08-18,npm registry 上查不到同名包,不要把這條當成可用安裝方式。當前應以目錄頁的 GitHub 命令爲準。

本插件是純 JavaScript,發佈包即運行時代碼,一般不需要爲 prepare 構建腳本額外授權。即便如此,目錄頁的安全提示仍然適用:插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。裝之前請自己看源碼和許可證。裝完可用 dsh plugins list 確認是否出現在列表裏;有的插件需要重啓 Harness 後才生效。

典型用法

README 建議用自然語言讓 agent 調工具,例如:

分析這個頁面裏的媒體:https://www.bilibili.com/video/BV1xx411c7mD

把這幾個鏈接的 1080P 視頻下載到 ./downloads 目錄

對應到工具參數,倉庫給出的示例是:

{ "url": "https://bilivideo.com/xxx.m4s" }

上面這一條給 video_analyze。下載時補上輸出路徑:

{ "url": "https://bilivideo.com/xxx.m4s", "outPath": "./downloads/clip.mp4" }

只解析清晰度和擴展名:

{ "url": "https://example.com/video.mp4?height=720" }

推薦順序是:先 video_analyzeisMediasite,確認是直鏈後再 video_download。播放頁 URL 過不了「像媒體」這一關時,需要先通過別的手段拿到直鏈(例如自己打開開發者工具、或配合瀏覽器自動化插件抓到媒體請求),再交給本插件保存。不要指望對播放頁執行一次 video_download 就能得到完整成片。

video_downloadheaders 可以覆蓋或補充默認請求頭。平臺對 Referer、Cookie 有額外要求時,可以把需要的頭放進這個對象;插件本身不會幫你登錄,也不會去讀瀏覽器 Cookie 庫。

適用場景與注意事項

比較適合這些情況:

  • 已經拿到媒體直鏈,希望智能體在對話裏完成分類、選清晰度線索、保存到本地。
  • 本地歸檔公開可下載的 mp4 / m3u8 等文件,默認落到當前工作目錄的 downloads/
  • 二次開發時複用導出的純函數,而不是從零抄一套 URL 啓發式。

使用前建議把下面幾條當作硬限制,而不是「以後可能會好」:

  1. 權限與供應鏈。插件以當前 dsh 進程權限運行,能讀寫真機目錄、能髮網絡請求。安裝前檢查 https://github.com/zimai233/dsh-video-downloader 源碼和 MIT 許可證;需要可復現環境時固定 commit。
  2. 版權與平臺條款。README 原文要求:只下載你有權獲取的內容。它只做識別和流式保存,不繞過 DRM、登錄牆或付費牆。
  3. 直鏈,不是播放頁video_analyze 不抓頁面;video_download 按 HTTP 把給定 URL 寫成文件。B 站 DASH 常見音視頻分離的 .m4s,本插件不會幫你合併。
  4. 60 秒超時。單次下載超過 60 秒會被 abort。大文件、慢網絡或長 playlist 可能失敗。
  5. 重定向上限爲 5。超過會報錯。
  6. 清晰度是猜的。標籤來自 URL 形態和 B 站 quality id 對照表,不是解碼後的真實分辨率。
  7. 項目很新。倉庫創建於 2026-08-14,版本 0.1.0,星標很少。把它當社區小工具使用,而不是生產級下載套件。

小結

dsh-video-downloader 給 DeepSeek Harness 補上了一塊很窄、但確實缺過的能力:讓智能體先看鏈接像不像媒體,再把直鏈流式存到本地。三個工具分工清楚——分析不聯網、下載帶超時和重定向、質量解析是純正則。它不是 yt-dlp 的替代品,也不是播放頁一鍵下載器;邊界寫在 README 和源碼裏,用的時候按直鏈來、按版權來,會比較穩。

  • 目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-video-downloader/
  • GitHub:https://github.com/zimai233/dsh-video-downloader
  • DeepSeek Harness:https://github.com/deepseek-ai/deepseek-harness
羽毛球分组比赛记分
小程序二维码

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

小夜