Skip to content

常見影片下載問題 Q&A:403 錯誤、M3U8 擷取、加密串流

下載影片聽起來很簡單 — 找到連結,下載。但實際上:403 錯誤、CORS 阻擋、加密串流、防盜連、M3U8 擷取失敗...本指南涵蓋 12 個最常見的影片下載問題,從原理層面解說並提供解決方案。

重要: 本內容僅供技術學習、處理合法擁有的影片檔案、串流技術研究。請遵守當地著作權法。本站所有工具僅處理合法擁有的影片檔案。

問題 1:下載出現 403 Forbidden

原因: 伺服器主動拒絕請求。403 是 HTTP 狀態碼,表示「理解但拒絕」。影片下載三個常見原因:

原因 1.1:Referer 防盜連

伺服器檢查 Referer 標頭 — 必須來自原始網站。直接下載器沒有這個標頭,被拒絕。

解決方案: 在下載工具中設定 Referer。本站 M3U8 to MP4 工具支援自訂 Referer。

bash
# FFmpeg 帶 Referer 標頭
ffmpeg -headers "Referer: https://example.com/" -i "https://example.com/stream.m3u8" -c copy output.mp4

# curl 帶 Referer
curl -H "Referer: https://example.com/" -o video.ts "https://example.com/segment.ts"

原因 1.2:權杖過期

許多 M3U8 連結有 ?token=abc123&expires=1700000000 這樣的權杖參數。權杖有時效性(通常幾小時),過期→403。

解決方案: 重新擷取最新的 M3U8 連結。

原因 1.3:IP 限制

部分影片有地區限制(如 BBC 僅英國)或存取頻率限制(同一 IP 請求過多被擋)。

解決方案: 更換 IP(VPN/代理)或增加請求間隔。

問題 2:怎麼從網頁擷取 M3U8 連結

M3U8 擷取是 HLS 下載的第一步。三種方法:

方法 1:Chrome DevTools(推薦)

  1. 在 Chrome 開啟影片頁面
  2. F12 開啟 DevTools
  3. 切換到 Network 面板
  4. 在篩選框輸入 m3u8
  5. 播放影片
  6. 找到 M3U8 請求,右鍵 → CopyCopy link address

方法 2:瀏覽器擴充功能

  • Video DownloadHelper:自動偵測影片串流
  • HLS Downloader:HLS 專用偵測
  • Stream Recorder:HLS 偵測和下載

方法 3:檢視原始碼

部分網站直接在 HTML/JS 中嵌入 M3U8 URL。右鍵 → 檢視頁面原始碼 → 搜尋 m3u8m3u8url

注意 master vs media playlist: master playlist 包含多個畫質選項:

text
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=800000,RESOLUTION=640x360
360p/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2000000,RESOLUTION=1280x720
720p/index.m3u8

要下載特定畫質,輸入子 M3U8(如 720p/index.m3u8)— 那才是實際的媒體播放清單。

M3U8 結構詳見 M3U8 檔案完全指南

問題 3:CORS 跨網域錯誤

症狀: 瀏覽器 Console 顯示 Access-Control-Allow-Origin 錯誤,請求被阻擋。

原因: 瀏覽器同源政策 — 跨網域請求需要伺服器 CORS 標頭。影片伺服器沒設定 CORS,瀏覽器 JS 無法直接請求。

解決方案:

  1. 桌面工具不受 CORS 限制:FFmpeg、VLC、yt-dlp 不受瀏覽器同源政策約束
  2. 本站 M3U8 to MP4 工具:瀏覽器擴充模式繞過 CORS
  3. 代理伺服器:自建代理

問題 4:AES-128 加密 M3U8 怎麼下載

偵測加密: M3U8 檔案包含 #EXT-X-KEY 標籤:

text
#EXT-X-KEY:METHOD=AES-128,URI="https://example.com/key",IV=0x1234567890abcdef1234567890abcdef
  • METHOD=AES-128:加密演算法
  • URI:金鑰地址
  • IV:初始化向量

下載流程:

  1. 取得 M3U8 檔案,找到 #EXT-X-KEY 標籤
  2. 請求金鑰 URL,取得 16 位元組金鑰
  3. 依序下載所有 TS 片段
  4. 用金鑰和 IV 對每個片段 AES-128 解密
  5. 合併解密後的片段成 MP4

本站工具使用: M3U8 to MP4 工具自動處理上述所有步驟,支援 AES-128 解密。

FFmpeg 使用:

bash
# FFmpeg 自動取得金鑰並解密
ffmpeg -i "https://example.com/stream.m3u8" -c copy output.mp4

# 金鑰 URL 需要 Referer
ffmpeg -headers "Referer: https://example.com/" -i "https://example.com/stream.m3u8" -c copy output.mp4

金鑰 URL 需要 Cookie:

bash
ffmpeg -headers "Cookie: session=abc123\r\nReferer: https://example.com/" -i "https://example.com/stream.m3u8" -c copy output.mp4

問題 5:DRM 保護影片可以下載嗎?

結論:不能。

DRM(Digital Rights Management)保護影片的解密金鑰儲存在瀏覽器安全區域(CDM,Content Decryption Module),外部程式無法存取。Netflix、Disney+、Apple TV+、HBO Max 都使用 DRM。

三大 DRM 系統:

DRM廠商瀏覽器支援
WidevineGoogleChrome、Firefox、Edge、Android
PlayReadyMicrosoftEdge、IE、Xbox
FairPlayAppleSafari、iOS

無法繞過的原因:

  • 瀏覽器安全區域解密
  • JS 無法存取明文金鑰或原始影片資料
  • 宣稱「可以下載 DRM 影片」的工具要麼無效要麼違法

唯一例外: 螢幕錄影。但錄影會降低畫質(重新編碼),且有浮水印等防錄影措施。技術上可能但法律風險高。

問題 6:下載的檔案只有幾 KB

原因: 你下載了 M3U8 索引檔案本身,而不是影片。

M3U8 是記錄影片片段 URL 的純文字播放清單,不包含影片資料。所以檔案只有幾 KB。瀏覽器「另存新檔」或一般下載器只能取得 M3U8 索引。

解決方案: 用專用 M3U8 下載工具(如本站 M3U8 to MP4 工具):

  1. 讀取 M3U8 檔案
  2. 依序下載所有 TS 片段
  3. 合併片段成 MP4

問題 7:下載到一半失敗

原因:

  • 網路中斷:下載過程中網路斷線
  • 伺服器速率限制:速率超過限制,伺服器關閉連線
  • 片段 URL 過期:部分片段 URL 的權杖過期

解決方案:

  1. 支援斷點續傳的工具:本站工具和 FFmpeg 支援續傳
  2. 多執行緒下載:本站工具支援並行下載,提升速度和可靠性
  3. 重試機制:失敗時自動重試
bash
# FFmpeg 重試參數
ffmpeg -reconnect 1 -reconnect_streamed 1 -reconnect_at_eof 1 -reconnect_delay_max 5 -i "https://example.com/stream.m3u8" -c copy output.mp4

問題 8:下載的影片沒聲音

原因:

  • 特殊音訊編碼器:AC-3、E-AC-3(杜比數位)— 部分播放器/容器不支援
  • 多音軌處理失敗:M3U8 含多個音訊串流,工具只下載視訊
  • 獨立音訊 URL:部分 HLS 串流音訊和視訊分開 M3U8

解決方案:

bash
# FFmpeg 分別下載視訊和音訊串流再合併
ffmpeg -i "video.m3u8" -i "audio.m3u8" -c copy output.mp4

# 音訊轉碼為 AAC(最高相容性)
ffmpeg -i "stream.m3u8" -c:v copy -c:a aac output.mp4

問題 9:下載的影片有浮水印

原因: 影片本身有浮水印,內容創作者加的,不是下載工具的問題。

解決方案:

  • 移除浮水印涉及著作權問題,不建議
  • 畫面裁切:浮水印在邊緣時,裁切
  • 浮水印遮蓋:用其他元素覆蓋
bash
# FFmpeg 裁切邊緣浮水印(上下各 20px)
ffmpeg -i input.mp4 -vf "crop=iw:ih-40:0:20" output.mp4

問題 10:直播串流無法下載

原因: 直播串流 M3U8 動態更新 — 舊片段刪除,新片段加入。一般下載器無法持續追蹤更新。

解決方案:

bash
# FFmpeg 錄製直播串流(Ctrl+C 停止)
ffmpeg -i "https://example.com/live.m3u8" -c copy -f mp4 output.mp4

# 錄製特定時間(如 1 小時)
ffmpeg -i "https://example.com/live.m3u8" -c copy -t 01:00:00 -f mp4 output.mp4

注意: 直播串流錄製應遵守平台規則和個人使用範圍,不要分發或商用。

問題 11:CORS 錯誤的對處

症狀: 瀏覽器 Console 顯示:

Access to fetch at 'https://example.com/stream.m3u8' from origin 'https://yoursite.com' 
has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

原因: 瀏覽器同源政策 — 跨網域請求需要伺服器 CORS 標頭。影片伺服器沒設定 CORS,瀏覽器 JS 無法直接請求。

解決方案:

  1. 桌面工具:FFmpeg、VLC、yt-dlp 不受瀏覽器同源政策約束
  2. 本站工具:瀏覽器擴充或代理繞過 CORS
  3. 代理伺服器:自建,如 Nginx 反向代理:
nginx
location /proxy/ {
    proxy_pass https://example.com/;
    proxy_set_header Host example.com;
    add_header Access-Control-Allow-Origin *;
}

問題 12:YouTube/Bilibili 影片怎麼下載

注意: 商業平台影片下載涉及著作權問題。本節僅介紹技術原理,不提供具體下載方法。

技術原理: YouTube 和 Bilibili 部分內容使用 DRM。一般影片用動態生成簽章、權杖驗證、防盜連防止下載。

合法替代方案:

  • 平台官方下載:YouTube Premium、Bilibili APP 提供離線下載
  • 創用 CC 內容:YouTube 搜尋 CC 授權影片,可合法下載
  • 自己上傳的:從創作者後台下載

法律風險: 用第三方工具下載著作權影片可能違反平台 ToS 和當地著作權法。本站工具僅處理合法擁有的影片檔案,不提供平台影片下載功能。

影片下載問題快速參考

問題原因解決方案
403 ForbiddenReferer 防盜連/權杖過期/IP 限制設定 Referer/重新擷取連結/更換 IP
幾 KB 檔案取得 M3U8 索引,不是影片用 M3U8 to MP4 工具
CORS 跨網域瀏覽器同源政策桌面工具或代理
AES-128 加密M3U8 含 #EXT-X-KEYFFmpeg 或本站工具自動解密
DRM 保護Widevine/FairPlay/PlayReady無法下載
沒聲音AC-3 編碼器或多音軌問題轉碼為 AAC 或分別下載音訊
直播下載M3U8 動態更新FFmpeg 錄製
下載到一半失敗網路斷線/伺服器速率限制續傳或多執行緒

影片下載的法律邊界

允許:

  • 下載自己上傳的影片
  • 下載創用 CC 影片
  • 下載明確允許下載的教育內容
  • 下載合法購買的離線觀看權利影片
  • 個人學習/研究的暫時下載(視地區而定)

不允許:

  • 下載商業平台著作權影片(Netflix、YouTube Premium 等)
  • 下載後分發或商用
  • 繞過 DRM 保護
  • 大規模影片爬取

本站立場: 所有工具僅處理合法擁有的影片檔案。不提供平台影片爬取、解析、下載功能。使用者需確保對處理的影片有合法權利。

總結

影片下載問題看似多樣,但可歸類為幾個層面:

  • 協定層:403、CORS、權杖 — 需要正確標頭和參數
  • 加密:AES-128 可解密,DRM 無法繞過
  • 格式:M3U8 是索引不是影片,需要專用工具取得片段
  • 法律:著作權內容下載風險高,合法擁有的內容沒問題

日常合法擁有的 M3U8 串流使用,推薦本站 M3U8 to MP4 工具或命令列派的 FFmpeg。問題發生時先確認錯誤碼(403、CORS、加密類型),對應處置。

快速參考:

  • 403 錯誤:檢查 Referer、權杖、IP
  • 幾 KB 檔案:取得 M3U8 索引,需要專用工具取得片段
  • AES-128 加密:FFmpeg 或本站工具自動解密
  • DRM 保護:無法下載
  • 法律邊界:只處理合法擁有的內容

參考資料

Last updated: