我想下載串流媒體影片。當我轉到 Chrome DevTools -> Network 而不是 mp4 影片的連結時,我發現許多類似...hd4b.mp4/fragment-1-v1.m4s
音訊...a1.m4s
的連結。還有一個首字母...hd4b.mp4/init-v1.mp4
和...init-a1.mp4
。碎片太多,無法手動複製。
所以我需要知道如何過濾我想要的.mp4檔案的所有.m4s片段連結。有一個在這裡回答這為我提供了網絡中的所有鏈接,執行後我可以將鏈接粘貼到文件中,但它獲得的鏈接也不屬於我想要的 .mp4 的一部分。這並不重要,但最好只獲取...hd4b.mp4
.
如何取得一個檔案中的視訊連結和另一個檔案中的音訊連結?
我應該如何處理init
連結?將它們添加到列表中?
現在我認為,獲取鏈接的方法是轉到視頻末尾並獲取最後一個數字並生成鏈接,將數字從一修改到最後。我將如何產生連結?回答。
然後當我有連結時就是這樣下載它們,但如何合併影片部分?
當我有了音訊和視訊後,如何將它們組合到最終的 mp4 中?
答案1
youtube-dl
嘗試使用最新版本下載影片。如果您無法按照步驟操作。
首先獲取鏈接
在 Chrome 中,前往 DevTools -> Networks 並找到第一個和最後一個片段連結。如果連結是連續的,則產生如下連結:
seq -f "...hd4b.mp4/fragment-%g-v1.m4s" 10 > video-links.txt
從1 到 10 的位置%g
。video-links.txt
如果連結不是連續的,請像這樣複製它們:
- 將 devtools 切換到分離視窗(點擊 devtools 設定圖標,點擊“dock side”取消停靠圖標)。下次您只需按Ctrl- Shift-即可D。
- 按Ctrl- Shift-呼叫 devtools-for-devtoolsi
- 執行此程式碼將所有/已過濾請求的 URL 複製到剪貼簿:
copy(UI.panels.network._networkLogView._dataGrid._rootNode._flatNodes.map(n => n._request._url).join('\n'))
您可以將程式碼儲存為「來源」面板中的程式碼片段,然後透過右鍵單擊或 Ctrl-Enter 來運行它:
var URLs = UI.panels.network._networkLogView._dataGrid._rootNode._flatNodes.map(n => n._request._url);
copy(URLs.join('\n'));
URLs; // displays it in the console as an expandable array
執行腳本後,連結位於剪貼簿中,因此請將它們貼到文件中。
下載視頻和音頻
wget -i "video-links.txt" -O "video.mp4" -B "...hd4b.mp4/"
將 -B 選項與 URL 的基礎一起使用。
按照與影片相同的步驟下載音訊。
合併視訊和音訊
ffmpeg -i video.mp4 -i audio.wav \
-c:v copy -c:a aac -strict experimental output.mp4