如何從影片直鏈下載 MP4 影片
如何從影片直鏈下載 MP4 影片
看到一個影片,按右鍵沒有「另存新檔」,瀏覽器網址列裡也沒有 .mp4。你八成遇到的是兩種情況之一:要嘛是 M3U8/MPD 這種分片串流,要嘛就是直鏈但被藏起來了。這篇文章只講後者:怎麼把藏起來的直鏈挖出來,怎麼判斷它是不是真的能下,以及下不動的時候到底卡在哪。
先搞清楚:什麼叫影片直鏈
直鏈就是那種「一個 URL 直接指向一個檔案」的下載。你拿到網址,丟進下載器,一個請求就把整個 MP4、WebM、MOV、MKV 拉下來。不像 HLS、DASH 那樣要先拼清單再逐片下載。
| 影片直鏈 | HLS / DASH 串流 | |
|---|---|---|
| 網址指向 | 單一檔案 | 清單 + 分片 |
| 下載方式 | 一個請求 | 先解析清單,再逐片下載合併 |
| 失敗表現 | 403 / 404 / 空檔案 | 花屏、無聲、合併失敗 |
下面這些內容都圍繞直鏈展開。如果你拿到的其實是 .m3u8 或 .mpd 網址,別在這篇裡耗——去看 如何下載 M3U8/HLS 串流媒體:完整入門指南 或是 如何下載有聲音的 DASH 影片,方向不對,方法全是白搭。
如何確認它是影片直鏈
只看 .mp4 副檔名不夠,很多網站會在 CDN 後面加一堆簽名參數,甚至把副檔名藏掉。判斷標準就一個:請求回傳的 Content-Type 是不是 video/*。
方法一:開發者工具看 Network
打開影片頁面,F12 進開發者工具,切到 Network 面板,篩選 mp4 或 webm,開始播放影片:
- 找到一個 URL 裡帶
.mp4/.webm的請求。 - 點開看回應標頭的
Content-Type。 - 是
video/mp4或video/webm,這就是直鏈。
方法二:curl 直接驗證
拿到疑似網址後,用 curl 看它到底回傳什麼(把網址換成你自己的):
curl -sI "https://cdn.example.com/course/lesson1.mp4" | head -n 10
重點看兩行:
HTTP/1.1 200 OK
Content-Type: video/mp4
Content-Length: 52428800
Content-Type 是 video/mp4 說明網址是對的。如果回傳的是 text/html,說明這根本不是影片,是一個網頁——你複製錯網址了。直鏈的偵測原理和格式支援範圍,見 影片偵測 — 支援的影片格式。
用 FlowPick 擴充功能下載
第 1 步,打開影片實際播放的頁面,播放幾秒,讓直鏈真的被請求一次。
第 2 步,打開 FlowPick 擴充功能,在資源清單裡篩選「影片」,挑出 video/mp4、video/webm 類型的項目,別選縮圖或封面圖。
第 3 步,確認右側預覽能正常播放,格式無誤後按下載。
第 4 步,下載完成後打開檔案,確認能播放再關掉原頁面。

擴充功能跑在來源頁面的環境裡,Referer、Cookie 自動帶上,大部分防盜鏈驗證直接過。這是擴充功能比線上工具強的地方,線上工具跑在自己網域下,帶不了目標站台的登入狀態。兩者差異見 線上工具 — 與擴充功能的區別。
如果你只是偶爾下一個、沒有防盜鏈驗證,也可以用 線上影片下載器,貼上直鏈網址就能下。
常見錯誤逐個拆
403 Forbidden:請求標頭不對
影片很少真的「沒權限」,更多是驗證沒過:
- Referer 驗證:要求請求來自特定頁面,空 Referer 直接拒絕。
- Cookie / 登入狀態:沒帶登入 Cookie,或已過期。
- 臨時權杖:URL 裡的
?token=過期了。
用 curl 重現一下,確認是不是 Referer 的問題:
# 不帶任何標頭,看裸請求回傳什麼
curl -s -o /dev/null -w "%{http_code}\n" "https://cdn.example.com/course/lesson1.mp4"
# 帶上頁面 Referer 再試
curl -s -o /dev/null -w "%{http_code}\n" \
-H "Referer: https://www.example.com/course/123" \
"https://cdn.example.com/course/lesson1.mp4"
帶 Referer 就好了,說明是防盜鏈。換擴充功能下,擴充功能在來源頁面裡跑,Referer 自動補齊,v1.1.1 之後還內建了防盜鏈代理,預覽和下載都會自動帶上正確請求標頭。線上工具做不到這點。代理細節見 FlowPick v1.1.1:防盜鏈資源預覽與下載。
404 Not Found:網址過期或拿錯了
直鏈最煩的就是「昨天還能下,今天 404」。常見三種:
- 臨時簽名 URL 過期:雲端儲存(OSS、COS 等)的直鏈帶有效期,過幾分鐘到幾小時就失效。
- 檔案被清理:上傳者刪了檔案,或 CDN 快取被清。
- 複製錯網址:你複製的是播放頁網址,不是檔案直鏈。
網址真失效就沒救——回到原影片頁面重新偵測一次,拿新的直鏈再下。
CORS 錯誤:線上工具特有的坑
如果你在用線上工具下載且報 CORS 錯誤,這不是你操作的問題,是工具本身的限制:線上工具跑在 flowpick.com 網域下,瀏覽器同源政策會攔跨網域讀取。換擴充功能,擴充功能有獨立權限,不受同源政策限制,偵測範圍和成功率都高一截。細節見 影片偵測 — 擴充功能與線上工具的偵測差異。
檔案不完整:伺服器不支援斷點續傳
下載能開始,但暫停後從 0 重來,或者下到一半失敗——這跟伺服器支不支援 HTTP Range 有關。Range 允許用戶端只請求檔案的一部分,斷點續傳全靠它。
測一下伺服器支不支援:
curl -s -o /dev/null -w "%{http_code}\n" \
-H "Range: bytes=0-1023" \
"https://cdn.example.com/course/lesson1.mp4"
# 206 = 支援 Range,可以斷點續傳
# 200 = 回傳完整檔案,表示不支援
回傳 206 沒問題;回傳 200(完整檔案)表示不支援 Range,那就別中途暫停,一次下完。這是伺服器能力問題,換工具也一樣。
下載下來打不開怎麼辦
檔案下下來了、體積也正常,但播放器報「格式不支援」或黑屏。這裡要分清兩個概念:容器和編碼。.mp4 是容器,裡面裝的可能是 H.264,也可能是 H.265/HEVC 或 AV1。容器支援不等於編碼支援,播放器得能解碼裡面那層編碼才能放出來。
遇到編碼不支援,用 格式轉換 轉成相容性更好的 H.264 MP4 就行。你的瀏覽器到底能播什麼格式,參考 瀏覽器相容性。
大檔案(幾百 MB)下載到一半頁面卡住,是瀏覽器把檔案暫存在記憶體裡的原因。FlowPick 優先走 File System Access API(選目錄後串流寫入,不佔記憶體),不支援時退回 Blob 模式,大檔案就可能卡。對策很簡單:優先選「選擇儲存目錄」,別用預設下載;實在不行就下低畫質版本。Blob 模式的硬限制見 已知限制。
分不清直鏈、M3U8、MPD 怎麼辦
拿到的網址副檔名帶 .m3u8 或 .mpd,那根本不是直鏈,是串流媒體清單。別硬下:
.m3u8→ M3U8 下載工具 或 HLS 入門教學.mpd→ DASH 下載工具 或 DASH 影片下載教學
小結
直鏈下載就四步:找到影片真正播放的頁面 → 從 Network 或 FlowPick 裡挖出 video/* 的網址 → 用 curl 驗證沒拿錯 → 下載完先測再走。遇到 403 換擴充功能、404 重新偵測、CORS 別用線上工具、檔案不完整先查 Range。剩下那些疑難雜症,影片直連下載失敗排查 裡按症狀全列出來了。請只下載你有權保存的影片。
相關文章
- 影片直連下載失敗:MP4、WebM 排查 —— 這篇部落格的完整排查版,帶 curl 診斷指令
- 如何下載 M3U8/HLS 串流媒體 —— 直鏈的隔壁親戚,分片串流下載入門
- 如何下載有聲音的 DASH 影片 —— 音訊分離的 MPD 串流怎麼下
- 影片偵測 — 直接影片檔案 —— 直鏈偵測原理和格式範圍
- FlowPick 是怎麼在瀏覽器裡把幾百個影片分片合成 MP4 的 —— 分片串流背後的合併原理
推薦閱讀
- 如何下載 Bilibili 影片到本機觀看 —— 一個站裡直鏈、DASH、HLS 三種格式全有
- FlowPick vs. yt-dlp —— 瀏覽器點幾下 vs 命令列敲半天
- 如何批次下載網頁上的圖片 —— 不只是影片,圖片也能一鍵批次抓
- 串流媒體下載到底合不合法? —— 動手之前先看看這條紅線