스토리
如何從直接影片 URL 下載影片
說明什麼是直接影片 URL、如何在瀏覽器中儲存 MP4 或 WebM,以及 CORS、HLS 或 DASH 為何會阻擋下載。
有一個影片 URL,並不等於有一個影片檔。有的位址指向 MP4 或 WebM 資源。有的開啟的是只包含播放器的 HTML 頁面。有的載入由許多小片段組成的串流播放清單。
所以有的連結很快就能儲存,有的連結能播放卻無法下載。本文說明如何區分這些情況,以及只有在 URL 確實是影片資源時如何儲存檔案。
什麼是直接影片 URL?
直接影片 URL 是指 HTTP 回應本身就是媒體資源,而不是包在外面的網頁。最簡單的例子如下:
https://example.com/video.mp4
瀏覽器請求該 URL 時,伺服器可以回傳影片檔位元組,Content-Type 常常是 video/mp4 或 video/webm。中間沒有 HTML 文件。這個 URL 就是檔案。
副檔名只是提示,不是規則。路徑裡沒有 .mp4 也可能是影片資源:
https://example.com/media?id=123
如果伺服器回傳 Content-Type: video/mp4(或其他 video 類型)以及真正的媒體資料,那仍然是直接影片 URL。反過來,以 .mp4 結尾也可能是重新導向或 HTML 錯誤頁。應以 HTTP 回應為準,而不是位址末尾的字母。
直接影片 URL 與影片網頁
比較這兩個位址:
- 直接檔案:
https://example.com/files/movie.mp4 - 網頁:
https://example.com/watch/movie
前者可以是單一個影片物件。後者通常是 HTML 文件。該頁面可能嵌入 <video>、載入播放器指令碼,再從網址列看不到的另一個 URL 取得媒體。
把網頁位址貼進下載工具,並不會把頁面裡的檔案「挖」出來。瀏覽器請求的是 HTML。面向可公開存取的直接影片 URL 的工具需要的是媒體位址本身。
NEXNARA 的網頁影片下載器針對的就是這種公開檔案 URL,而不是觀看頁。它不會從網站擷取影片、不會登入帳號、也不會組裝播放器裡的串流。
如何從直接 URL 下載影片
如果你已經有候選連結:
- 取得直接 URL。 使用檔案、物件或媒體 URL,而不是觀看頁。
- 確認它是影片資源。 新分頁應顯示瀏覽器內建播放(或下載提示),而不是版面中間嵌著播放器的頁面。
- 先用瀏覽器試試。 許多瀏覽器可透過影片的捷徑選單儲存,或在伺服器傳送檔案處置標頭時開始下載。
- 想先預覽時使用瀏覽器工具。 把同一 URL 貼進去,查看格式、時長或大小後再儲存。
網頁影片下載器就是最後一步。你貼上直接影片 URL,瀏覽器向該主機發出請求。若資源可播放,會出現預覽。影片伺服器允許跨來源讀取時可以下載;不允許時,只要預覽可用仍可開啟該 URL。NEXNARA 不會把檔案上傳到自己的伺服器。
可以下載哪些影片格式?
在瀏覽器裡,「能否下載」接近於「這個瀏覽器能否解碼這個檔案?」單檔 URL 常見的容器有:
- MP4 — 常常是 ISO BMFF 容器中的 H.264 或 HEVC
- WebM — 通常是 VP8、VP9 或 AV1
- Ogg Video — 較少見,編解碼器支援因瀏覽器而異
容器和編解碼器不是同一件事。.mp4 並不能保證在所有瀏覽器與裝置上播放。HEVC 與 AV1 取決於作業系統、硬體與瀏覽器版本。使用 HTML5 video 的工具只預覽目前瀏覽器能解碼的內容。它不會轉換或重新封裝檔案。
若瀏覽器提示格式不受支援,檔案在別處仍可能播得了,也可能是標錯的物件,或根本不是單一檔案而是播放清單。
為什麼能播放卻不能下載?
播放與儲存使用不同的瀏覽器 API。
<video> 元素可以請求資源(常常帶 HTTP range)並繪製影格。即使另一來源上的 JavaScript 不被允許讀取這些位元組並做成使用者可保存的檔案,播放仍可能成功。
預覽正常但下載失敗的常見原因:
- CORS。 影片主機未允許本站指令碼讀取回應。見下一節。
- 跨來源憑證。 原站上有效的 Cookie,除非雙方都同意,否則不會隨簡單的跨站
fetch傳送。 Content-Disposition。attachment或檔名影響的是頂層導覽如何儲存,而不是另一來源的指令碼能否讀正文。- 伺服器設定。 缺少 CORS 標頭或攔截
HEAD/GET組合,會讓先檢查資源的工具停住。 - 身分驗證。 在主機上已登入才有效的 URL,從另一網站可能回傳 401/403。
- 過期或簽章 URL。 物件儲存常帶有時限查詢字串。過期後同一連結會失敗。
這些並不表示「這不是影片」,只表示目前瀏覽器情境沒有複製權限。
什麼是 CORS?
CORS(跨來源資源共用)是瀏覽器規則:一個來源上的 JavaScript 何時可以讀取另一來源的回應。它不是專門的「防下載技術」。目的是讓 https://a.example 在未經 b.example 允許時,不能悄悄讀取 https://b.example 上的郵件或檔案。
video 標籤仍可以向使用者顯示跨來源檔案。CORS 常常阻擋的是另一網站用 fetch() 把原始位元組做成 Blob 再跳出儲存對話框。若影片伺服器未傳送包含該工具來源的 Access-Control-Allow-Origin(或簡單公開檔案的 *),這次讀取會被拒絕。
能播放並不等於允許另一網站的指令碼儲存副本。NEXNARA 不會為了略過該檢查而代理檔案。若下載被擋,退路是在影片主機上開啟 URL——且僅在你有權儲存時。
HLS 和 DASH 呢?
許多播放器並不載入一個 MP4。它們先載入清單,再載入許多分段。
- HLS 常用以
.m3u8結尾的 URL。該檔案是文字播放清單,不是一個完整影片物件。 - DASH 常用
.mpd,即指向表示與分段的 XML 清單。
直接 MP4/WebM URL 與 HLS/DASH 播放清單是不同資源。儲存「那個 .m3u8」只會得到小文字檔,不是電影。把分段合成一個檔案需要解析播放清單、下載分段,通常還要重新封裝。網頁影片下載器 不會組裝 HLS 或 DASH 串流。若工具提示這是串流播放清單,這是預期行為。
受 DRM 保護的影片
商業播放器可能用 Widevine、FairPlay、PlayReady 等 DRM 包裝媒體。樣本被加密且需要授權。那不是你可以擷取並保存的公開 video/mp4 物件。NEXNARA 不會解密或規避 DRM。
如何辨識直接影片 URL
依證明力大致排序:
- 路徑以
.mp4、.webm、.ogv等媒體副檔名結尾。有用,但不充分。 - 在新分頁開啟後只看到影片(或下載),而不是整站介面。
- 發布方將其說明為檔案或物件連結(CDN、儲存桶、「直接下載」)。
- 回應標頭包含
Content-Type: video/*(例如video/mp4)。
瀏覽器開發人員工具的網路面板可以顯示你作為一般使用者已經發出的請求類型與 Content-Type。這有助於理解取回了什麼。這不是擷取隱藏串流或規避登入的指南。若網站不提供公開檔案 URL,此流程不適用。
副檔名與內容類型都可能作假。.mp4 URL 可能重新導向到 HTML。video/mp4 仍可能是很小的錯誤正文。分頁裡能播放才是實際確認。
常見問題
URL 開啟的是網頁。
不是直接影片 URL。你需要媒體資源位址,而不是觀看頁。
能播放但下載沒用。
主機很可能禁止跨來源讀取(CORS),或檔案對瀏覽器內儲存來說太大。預覽可用時用開啟,或在有權限時於影片主機的頂層分頁儲存。
以前能用的連結現在失敗。
簽章或限時 URL 會到期。請從原來取得連結的地方再要一條新的。
URL 以 .m3u8 或 .mpd 結尾。
這是串流播放清單,不是單一個 MP4/WebM 檔。此下載器不會把這些分段拼起來。
瀏覽器說格式不受支援。
該瀏覽器/作業系統可能沒有對應容器或編解碼器。換瀏覽器,或確認它確實是影片物件。
瀏覽器無法存取該 URL。
檢查 https://、網路連線,以及主機是否允許公開存取。在 HTTPS 工具頁上請求 HTTP 檔也可能因混合內容失敗。
隱私
對本工具,NEXNARA 不會把影片檔上傳到 NEXNARA 伺服器。這並不等於聲稱「URL 從不離開你的瀏覽器」。
貼上位址後,你的瀏覽器會直接向該外部影片主機發請求。 主機能看到一次普通的媒體請求。NEXNARA 並不在中間儲存檔案。位元組來自對方的 URL,因此影片營運方仍會收到流量。
負責任的使用
只下載你擁有或有權下載的影片。公開 URL 不是重製授權。
FAQ
什麼是直接影片 URL?
回應本身就是影片資源(例如 MP4 或 WebM 物件)的連結,而不是內嵌播放器的 HTML 觀看頁。
能從 URL 下載 MP4 嗎?
可以,當 URL 是公開的 MP4(或類似)檔且瀏覽器能解碼時。若位址是網頁或播放清單,儲存該位址得不到影片檔。
為什麼能播放卻不能下載?
播放器即使不允許另一網站的 JavaScript 讀取位元組,仍可顯示媒體。常見原因是 CORS、身分驗證與伺服器政策。
能下載 m3u8 URL 嗎?
用本工具不能得到完整的單一影片。.m3u8 是 HLS 播放清單。NEXNARA 不會組裝 HLS 或 DASH 串流。
NEXNARA 會上傳我的影片嗎?
不會。檔案不會上傳到 NEXNARA。瀏覽器與你輸入的影片 URL 通訊,因此外部主機仍會看到該請求。
為什麼影片連結過期了?
許多主機給物件 URL 附上簽章與過期時間。過時後同一字串不再被授權。請申請新連結;改舊連結無法續期。