← 返回部落格

如何在 Chrome 中下載 Blob 影片(2026 年方法)

右鍵另存新檔為什麼在 blob: 網址上失效,以及三個有效下載 blob 方式提供的影片的方法。

你打開了 Network 標籤想要找影片網址,卻看到了類似 blob:https://example.com/abc-def-1234 這樣的東西。你點了它,期待看到影片檔案。結果什麼都沒有。右鍵 → 另存新檔試著要保存一個 0 byte 的檔案。本指南會解釋 blob 網址實際上是什麼、為什麼傳統下載方法都不行、以及三個可靠的方式來取得底層影片。

Blob 網址實際上是什麼

blob: 網址不是網路位址。它是 JavaScript 建立的參考,指向存活在瀏覽器記憶體中的資料。格式是這樣的:

blob:https://example.com/{uuid}

{uuid} 是由 URL.createObjectURL() 產生的,指向一個頁面的 JavaScript 傳給瀏覽器的二進位資料塊。當頁面設定 <video src="blob:..."> 時,播放器就從那個記憶體中的 buffer 播放。

兩個關鍵特性:

  1. 僅限本機:Blob 網址只存在於建立它的標籤中。複製貼上到另一個標籤會無法使用——那個其他標籤沒有來源資料的參考。
  2. 短暫的:當標籤關閉或頁面呼叫 URL.revokeObjectURL() 時,Blob 會被垃圾回收。重新整理頁面會使該頁面上的每個 blob 網址都失效。

右鍵 → 另存新檔失效是因為 Chrome 嘗試向 blob 網址發送網路請求,但沒有伺服器可回應——資料在 JavaScript 記憶體中,而不是在任何 HTTP 端點上。

為什麼頁面用 blob 網址來提供影片

三個原因說明現代播放器為什麼使用 blob 網址:

1. Media Source Extensions (MSE)

MSE 是瀏覽器 API,讓 JavaScript 能從分別取得的區段構建影片串流(這是在沒有原生 HLS 支援的瀏覽器中 HLS 和 DASH 播放器的工作方式)。MSE 管道會產生一個 MediaSource 物件,它透過 URL.createObjectURL(mediaSource) 被包裝在 blob 網址中。影片元素從該 blob 網址播放,同時 JavaScript 持續地將新區段送入 MSE buffer。

大多數現代 HLS/DASH 播放器(hls.js、dash.js、Shaka Player、Video.js)都使用這個模式。當你在播放 HLS 的頁面上看到 blob 網址時,這就是原因。

2. 解密的 DRM 串流

Widevine、FairPlay 和 PlayReady DRM 系統在一個閉鎖的系統中解密影片串流,然後把解密的位元組交給 MSE。結果是一個看起來像其他任何網址但包含使用者不被允許以純文字形式儲存的解密內容的 blob 網址。DRM 保護的 blob 網址在法律上不能下載,我們不涵蓋繞過它們的技術。

3. 隱私 / 直接連結防止

有些網站特別使用 blob 網址來防止右鍵保存。影片資料透過 JavaScript 以區段方式取得並組合成一個 blob,沒有使用者可以貼到另一個瀏覽器的直接 MP4 網址。這是一種軟防下載措施——不是真正的安全邊界。

方法 1:處理 MSE 提供的 blob 的瀏覽器擴充功能

瀏覽器擴充功能在與影片播放器相同的標籤中執行時可以:

  • 監看播放器進行的 HLS/DASH 清單取得
  • 使用相同的已驗證工作階段重新取得相同的區段
  • 透過 FFmpeg.wasm 將它們多工輸出為 MP4

這正是為 HLS/DASH 構建的擴充功能所做的。Blob 網址不相關——擴充功能會更深入一層,到餵給 blob 的清單網址。

Video Downloader One-for-All 透過完全忽略 blob 網址來處理 blob 提供的影片:

  1. 打開包含 blob 影片的頁面
  2. 等待播放開始
  3. 點擊擴充功能圖示——當檢測到清單時工具列徽章變成藍色(無論播放器是否將它們包裝在 blob 中)
  4. 選擇品質,點擊下載

你會看到解析度和品質下拉式選單被填充,即使影片元素本身顯示的是 blob 網址——擴充功能在讀取底層清單,而不是 blob。

方法 2:DevTools Network 標籤 + 清單網址提取

如果你想確切了解發生了什麼,手動通過它:

  1. 打開包含 blob 影片的頁面
  2. 打開 DevTools(F12)
  3. 點擊 Network 標籤
  4. 在篩選框中,輸入 m3u8mpd(HLS 或 DASH)
  5. 重新載入頁面
  6. 播放影片
  7. 你會看到播放器發出一個 .m3u8.mpd 清單的請求,然後是一系列 .ts/.m4s/.mp4 區段檔案的請求

一旦你有了清單網址,你可以使用 FFmpeg 或 yt-dlp 來下載:

ffmpeg -i "https://example.com/master.m3u8" -c copy output.mp4

如果 .m3u8.mpd 都沒有出現在 network 標籤中,搜尋 .mp4(頁面可能在將原始 MP4 塊餵入 MSE):

Network tab filter: media

尋找對單個 .mp4 網址的順序範圍請求——那些是 MSE 驅動的漸進式下載。完整網址(?range=...?start=... 之前的部分)是你想要的檔案。

方法 3:MediaRecorder API(最後的手段)

如果 blob 網址包含沒有底層網路清單可以找到的解密內容——有時是用戶端處理的影片的情況,例如瀏覽器內編輯器——你可以使用 Chrome 的 MediaRecorder API 將影片元素的輸出捕捉為新的 MP4:

// 在頁面的 DevTools 主控台中執行
const video = document.querySelector('video');
const stream = video.captureStream();
const recorder = new MediaRecorder(stream, { mimeType: 'video/webm' });
const chunks = [];
recorder.ondataavailable = e => chunks.push(e.data);
recorder.onstop = () => {
  const blob = new Blob(chunks, { type: 'video/webm' });
  const url = URL.createObjectURL(blob);
  const a = document.createElement('a');
  a.href = url;
  a.download = 'video.webm';
  a.click();
};
recorder.start();
// ... 播放影片到完成 ...
recorder.stop();

這會產生一個 WebM 檔案(如果需要,你可以用 FFmpeg 轉換為 MP4)。問題是:MediaRecorder 以影片播放的速率捕捉**,所以一個 1 小時的影片需要 1 小時來錄製。而且它只在影片元素處於 captureStream() 合格狀態時才有效(大多數是;DRM 保護的不是)。

這種方法也有與螢幕錄製相同的限制:重新編碼損失(雖然很小,因為它直接捕捉解碼的影片幀),而且你必須保持標籤聚焦。

當 blob 影片沒有可找到的清單時

在罕見的情況下,頁面完全在 JavaScript 中產生影片資料——一個畫布型影片編輯器、一個瀏覽器內遊戲捕捉、一個自訂 WebGL 管道。Blob 網址包含從未從任何伺服器取得的資料。

對於這些情況,MediaRecorder 是唯一的路徑。沒有底層檔案可以找到,因為沒有底層檔案——影片正在被頁面的程式碼即時建立。

常見問題

為什麼 Chrome 將影片網址顯示為 blob:https://... 而不是實際檔案?

因為頁面使用 JavaScript 將區段餵入 Media Source Extensions buffer,而不是將影片元素指向單個檔案網址。這對於自適應串流是正常和有意的。

我可以只按 Ctrl+S 保存 blob 網址嗎?

不可以。Ctrl+S 保存 HTML 頁面,而不是影片。即使在頁面本身上,影片資料也存活在 JavaScript 記憶體中,而不是在任何永久檔案中。

右鍵 → “另存影片” 呈灰色。這是 DRM 嗎?

不一定。許多非 DRM blob 影片透過 JavaScript(oncontextmenu 處理程式)或播放器的構造方式來禁用右鍵保存。驗證 DRM 是否涉及的路徑:打開 DevTools → Application → 檢查 EME 相關事件。如果你在頁面的網路請求中看到 Widevine 或 FairPlay 消息交換,DRM 已參與並且下載在法律上不可用。

我從方法 2 下載的檔案沒有音訊。

你遇到了音訊/影片清單分離問題,涵蓋在 HLS Download Audio and Video Are Separate? Here’s How to Fix It。尋找一個單獨的 audio.m3u8 或 Network 標籤中僅音訊的 DASH 區段,並將兩者都傳遞到 FFmpeg。

擴充功能是否適用於每個 blob 影片?

它適用於由 HLS/DASH/MSE 提供的 MP4 支援的 blob 影片——這幾乎是 2026 年所有非 DRM blob 影片。對於 DRM 保護的 blob,答案是否定的,這不是可修復的限制。對於純 JavaScript 產生的影片(罕見),MediaRecorder 是唯一的路徑。

下載 blob 影片合法嗎?

與任何其他影片格式相同的答案:取決於內容的授權和你的司法管轄區。Blob 網址本身不會改變法律狀態——它只是資料傳遞到你瀏覽器的方式。

比較

情況最佳方法
HLS/DASH 支援的 blob(最常見)瀏覽器擴充功能
需要確認下面是什麼DevTools Network 標籤
瀏覽器內產生的內容(罕見)MediaRecorder API
DRM 保護的 blob在法律上不可下載

底線

Blob 網址不是影片。它是頁面在記憶體中組合的資料的參考,通常來自底層 HLS 或 DASH 清單。正確的策略是忽略 blob 網址並找到它是從其中構建的清單——這是瀏覽器擴充功能自動做的事情。

安裝 Video Downloader One-for-All,blob 抽象就變成隱形的:擴充功能會向你展示可用品質並下載它們,無論 blob 與否。關於底層 HLS 協議細節,請參閱 How to Download m3u8 / HLS Streams