小鴨影音網站影片下載器


現在流行用 AI 寫程式,於是也來 vibe coding 一下,挑戰用自己沒用過的程式語言和 tech stack 做出一個小程式。

本文適合也想了解影片下載工具的技術概述,喜歡自己動手、使用 Windows 電腦的小夥伴。
如果是想要找手機上可以輕鬆下載網路影片的工具,本文沒有提供。

起源1:YT上的連續劇真是罄竹難書

最近迷上看連續劇,起初只是在 YouTube 上刷到一些連續劇片段,這些 YT 頻道各有特色:

  • 會把配角的故事單獨剪出來,事後一查發現他們只是配角。
  • 只保留男女主角主線劇情作流水帳解說,其他配角通通刪掉,因為少了很多劇情跟人物鋪墊,看起來容易覺得怪怪的,想要去找原片來看。
  • 挑出一些片段,取一些很聳動的影片標題名稱,影片封面用誇張的 AI 圖,但實際劇情根本不是那樣,而且這種都是沒頭沒尾的,有的更差的甚至還會亂拚亂湊。
  • 影片標題雖然打 Full,影片長度 1 個多小時,標題也是改成一些比較吸睛的,而不是只有 SE1EP1 之類的,但其實內容也是被剪過的,跟實際連續劇片段不同,時間順序常常跑掉,或是重要劇情被剪掉。
  • 可能為了規避 YT 平台審查,有音樂的地方都會消音,或是台詞被消音、片段被剪,看起來很難過,有的甚至是左右翻轉的。
  • YT 頻道內的播放清單只有放兩三集,其他都是「影片未允許在您的國家/地區播放」,要嘛就全鎖嘛! 這麼吊人胃口。
  • 有些影片來源好像是從其他線上平台側錄螢幕n訊號的,畫質是不錯,但總會跑出新聞快報的東西,還有把疑似是電視台 logo 位置會打馬賽克,所以 YT 影片永遠有一塊模糊的地方,有些為了把角落 logo 藏起來,甚至直接裁切影片畫面…。
  • 有時候把 YT 影片存著,想說改天再回來看,結果 YT 頻道被封掉了…。

在 YT 上看連續劇的體驗不太滿意,如果想要去找完整的連續劇原片來看,常常都找不到。
要嘛台灣根本沒有代理商引進(可能沒有中文字幕,或是正版串流平台上沒播),要嘛有些是中國連續劇,需要訂閱對岸的一些影視服務。

起源2:為什麼想要下載影片到自己的裝置上

大部分的連續劇可以在小鴨影音之類的盜版網站上看到,雖然影片中常常會有奇怪的廣告,但至少比上述那些 YT 連續劇頻道的問題好多了。

但是用小鴨影音這些平台看連續劇,又產生新的問題:

  • 網站的對外網路不穩,常常播放到一半卡住不動。網頁重新整理後,播放進度又跑掉。
  • 網頁的播放器體驗不佳,沒有跳過 10 秒或加速播放的功能,想要使用熟悉的播放器來看影片。
  • 影片很好看,怕以後看不到,想要在本地收藏影片。
  • 網路可能有流量限制,沒有吃到飽,想要把手機存到平板或電腦中再看。
  • 不想用一些奇怪的 Android 電視盒,親朋好友看到可能會有異樣的眼光。
  • 不想安裝一些奇怪的影片 APP,讓手機跑出一堆廣告、中毒。

尤其第一點網速不足是一大痛點,看到正精彩的時候就 lag,於是決定做個工具,將小鴨影音的影片下載到電腦或 NAS 中…

影片下載工具的現實難題

根據對相關知識的基礎認識,這個需求有兩大難題:

1.下載串流連續劇網站,跟下載社群影片不一樣

網路上有很多社群網站影片下載器,其實也就是 yt-dlp 或一些開源程式套個殼,重新設計一個操作介面而已。讓使用者不用在黑黑的命令列視窗中輸入影片尺寸等各種參數。

小鴨影音可能不像 Netf**x 有非常多的防禦機制,但是這類盜版影視網站會常常更換域名,一般「社群網站影片下載器」依照網址域名來決定處理方式的邏輯,在小鴨影音根本無法使用。

所以我們必須先想辦法撈出頁面上的影片檔播放清單 m3u8 檔案路徑,再根據 m3u8 清單中的線上檔案路徑規則,把串流影片的分片檔下載回來,合併成一個完整的影片檔。

2.為什麼我不直接做個下載網站給大家用?

如果我們要將這個下載連續劇的程式佈署在雲端伺服器上

  • 耗費機房的網路「頻寬」,把影片下載到我們的伺服器上
  • 準備大量的「儲存」空間來存放這些下載的影片
  • 把串流影片的分片檔「轉檔」成一個完整的 mp4 檔案,或是一般手機平板都能播放的檔案
  • 耗費機房的網路「頻寬」,讓使用者把影片下載到他們的手機電腦平板上

這每一項都成本都非常高,光是讓一天十個人下載一部 30 幾集的連續劇,然後傳輸速度、轉檔處理速度在一般人可以接受的範圍,這不是台幣幾百塊幾萬塊就能幹到的事。

雖然現在網頁前端有 WebAssembly 技術,上述有些事情可以搬到使用者的瀏覽器上,但是改寫重新設計整個程式流程的工程量,還有解決市面上各種網頁瀏覽器的前端程式相容性問題,實在令人卻步。

所以這類工具很多會做成電腦應用程式,或是手機 APP,讓使用者用自己的電腦/手機/平板下載檔案,直接在裝置上轉檔。

既然軟體有開發和維護成本,這類「影片下載軟體」理所當然的就是要付錢購買,但對使用者來說,看小鴨影音不就是為了免費、省錢? 有時候甚至搞得買軟體&設定操作學習的時間成本,比直接訂閱線上影音平台還貴。

也是有免費的影片下載軟體,但常常有很多廣告,還有用起來令人不安,擔心有病毒,後面偷偷挖礦、傳輸隱私資料之類的。

開始製作

如果我們知道這些事情的大部分原理,可以指揮 AI 寫程式,做一個安心的影片下載工具。

取得 m3u8 網址,以小鴨看看為例,可以使用瀏覽器擴充套件 Live Stream Downloader,從單集影片頁面上取得 m3u8 播放清單檔案,名稱叫 “mixed” 的那個檔案。

Live Stream Downloader找出頁面上的影片檔路徑

如果沒有 mixed 這個檔案,找清單中最大的檔案,通常會有 30KB~100KB 以上。其他只有 100B、5KB、連大小都沒顯示的檔案通常不是我們要的。

ps.套件本身也可以直接下載 ts 分片檔,但不會自動合併成一個影片檔,ts 格式也不是一般 iPad 裝置能直接播放的。

可以檢查 ts 檔案下載路徑,例如 m3u8 路徑為 https://****打馬賽克******.com/20220706/1752_a0a313a0/1000k/hls/mixed.m3u8,然後檔案裡面會有類似這樣的字串:

dd208c9948946301239b9b65bcdb02c6.ts
#EXTINF:4.000000,
f671e908407ab1f5e4b3f1ebf6251cc8.ts
#EXTINF:4.400000,
edaa84e6eda6a42101f502edf1841804.ts
#EXTINF:4.640000,
e2599f6220462378f87548dd413b73a8.ts

把尾巴的 mixed.m3u8 刪掉換成上面的 e2599f6220462378f87548dd413b73a8.ts,例如 https://****打馬賽克******.com/20220706/1752_a0a313a0/1000k/hls/e2599f6220462378f87548dd413b73a8.ts 即是每個 ts 檔案下載路徑。

成品1:命令列問答版本

線上串流影片下載

下載:m3u8-download-and-convert-mp4-cli.zip

前置作業:
因為 ffmpeg 有 80 幾 MB,所以沒有包在壓縮檔案內,需要自己下載。

  • 下載 ffmpeg_build.zip,然後把 ffmpeg.exe 解壓縮跟上面的 python 程式放在一起,或是將 ffmpeg 設定在系統變數。
  • 下載並安裝 Python

使用方式:

  1. 執行 rub.bat,或是自己在 cmd 中輸入 python download-cli.py
  2. 輸入 m3u8 URL,還有要存檔的本地資料夾路徑。
  3. 下載完成後,會自動合併並轉檔成 mp4。

成品2:UI版本

線上串流影片下載

下載:m3u8-download-and-convert-mp4-ui.zip

前置作業:
這是使用 electron 製作的 UI 版本,因為程式有好幾十 MB,所以沒有包在壓縮檔案內,需要下載原始碼後自行建置。

  • 下載 ffmpeg_build.zip,然後把 ffmpeg.exe 解壓縮跟上面的 python 程式放在一起,或是將 ffmpeg 設定在系統變數。
  • 下載並安裝 Python
  • 下載並安裝 Node.js
  • 使用 npm install 指令自動安裝必要程式,然後再用 npm build,如果成功建置的話會在 dist 資料夾內看到一個 「M3U8 Downloader 1.0.0.exe」。

使用方式:

  1. 執行 dist 資料夾中的 M3U8 Downloader 1.0.0.exe
  2. 貼上 m3u8 URL,還有要存檔的本地資料夾路徑。
  3. 在 task 下載任務清單中輸入合併後的 mp4 影片檔名
  4. 按下 Start 開始下載
  5. 如果不要下載了就按 Remove,如果下次碰到同一個 m3u8 URL 和相同的下載資料夾路徑,會從下載到一半的地方繼續下載。
  6. 下載完成後,會自動合併並轉檔成 mp4。

其他製作中碰到的地雷

本文只是一個簡易的試作,功能還滿陽春,但至少不用擔心要付費或是程式有病毒。

如果自己也想要做一個類似的小程式,希望以下踩坑經驗對大家有幫助。

1.多線下載問題

一開始做出來是單線程下載,一個檔案下載完成才會繼續下載下一個,等全部下載+轉檔成 mp4 的時間,差不多都快播完了,所以記得製作成可以多線下載的版本。

本文的程式有做成可以多個檔案同時下載,可以視網路情況自行修改 python 程式碼。

網路上還有其他 m3u8 downloader,有些設計成用於特殊的用本途。可以多去試試。

2.轉檔問題

本來不想使用程式來轉檔,直接使用 VLC player 的轉檔功能把 output.ts 轉成 mp4 也非常簡單。

但是只要播到廣告一出現,後面的片段就會出現消音或聲音畫面不同步的問題,影響觀看體驗。

用 ffmpeg 轉檔成 mp4 就沒問題。

3.中文路徑問題

UI 版本的,electron 一直建置失敗,node_modules 資料夾和 package.json 被 AI 刪刪改改老半天,最後自己發現是專案放在中文資料夾內,移到整串路徑都是英文的目錄就成功建置了。

(X) C:\Users\小明\Downloads
(X) D:\影片下載工具
(O) D:\download-tool

檔案下載可以設定存在中文目錄,這沒什麼問題。

4.影片中有廣告的問題

本文製作的程式是下載+合併+轉檔一次做完,但如果檢查下載回來的分片 ts 檔案,裡面會看到一些廣告片段,理論上可以先刪除,播放時就不會被插廣告了。

至於影片上方的跑馬燈文字,要刪除就更麻煩了,本文暫且不論。

5.想要全自動下載完整部劇?

一部連續劇如果有 30 集,就要每一集點進去找 m3u8 路徑,有點辛苦。如果想要優化這些步驟的人,網路上有一些抓出網址內 m3u8 路徑的開源專案,可以參考看看。

如果想要全自動爬網頁之類的,很容易碰到線上影音網站有防爬蟲的機制。

就算真的成功爬到網頁內容,然後要如何自動知道頁面上一堆 m3u8 檔案,哪一個檔案是正確的(有些 m3u8 是頁面影片廣告的播放清單)? 要用程式自動判斷檢查也會增加不少開發工作量,還有很大可能忙到後來還是一場空。

本文使用瀏覽器套件人工挑出 m3u8 URL 丟給程式下載,暫且不用煩惱這些事。

當然有些老司機可能有其他門路,在一些論壇或某些地方直接下載整部連續劇,就不需要辛苦巴巴去偷下載小鴨影音的影片了。

6.DRM 保護

本文這個找 m3u8 URL 然後下載 ts 檔案的方法,只適合下載小鴨影音這種盜版電影連續劇網站。

如果想要下載正版的線上影視串流平台的影片,通常沒會失敗,因為這種平台的影片通常有 DRM 保護或各種保護機制,上述方法無法正常使用。

有興趣的可以參考 那些年看過的土炮 HLS 保護方式,網路上的這種文章不一定會一步一步教人破解,而是讓人知道保護機制大概是如何做的,然後嘗試找一些平台沒做好的部分,偷偷繞過去。

💡 溫馨提醒:支持創作,從觀影選擇開始

雖然網路上有許多非官方授權的影片來源,但每部作品背後都是無數創作者的努力與心血。觀看正版內容不只是合法,更是對導演、演員、美術、剪輯師等整個團隊的尊重與支持。如果我們希望看到更多優質作品誕生,就讓每一次點擊都成為鼓勵創作的力量。