ts视频下载 准备下载视频的你确定不进来看看吗
ts視頻下載
- 前言
- 開發工具
- 解決思路
- 代碼實現
- 解析m3u8文件,獲取ts下載列表
- 多線程下載ts文件,以及ts文件順序的存儲
- 總代碼
- ts文件順序存儲到本地文件中
- 多線程下載ts文件
- ts文件合成mp4
- 成果
- ts文件
- mp4文件
- 總結
前言
之前一直爬取的內容都是完整的文件,例如一整個mp3或則mp4,但是目前很多視頻網站都開始采用ts流媒體視頻的方式進行視頻的展示,不知道你有沒有這樣的體驗,興致勃勃的打開一個電影網站,準備開始施展爬蟲大法
查看xhr請求之后,本以為可以找到一個返回mp4的接口,沒想到返回的是這一堆ts文件
今天我們就來聊一聊怎么下載這些ts文件并將他們拼接為一個mp4
開發工具
ffmpeg,pycharm
解決思路
首先打開谷歌瀏覽器,F12,查看xhr請求,這一步相信兄弟們已經輕車熟路了。如下圖
有兩個詭異的m3u8,木錯,這就是今天我們的突破口,一般第一個m3u8中存儲的都是第二個m3u8文件的url,第二個m3u8文件則是存儲的ts文件的urll。因為我們這次主要是講怎么下載ts文件,所以直接用解析第二個m3u8文件,即可。
雙擊這個請求,就可以查看詳情,其中Request URL就是調用的接口或則遠程文件,直接調用則會下載該m3u8文件,然后解析一下,拿到ts的url列表就可以進行下載了。
先看一下這個m3u8文件的內容
很明顯文件中存儲的不是ts文件的完整地址,需要我們根據實際情況進行拼接就可以,查看的方式就是點擊ts文件xhr請求進行查看如下圖,很明顯,紅框圈中的就是我們要拼接在文件名之前的。這就拿到了真實的ts文件地址。
那么開整代碼吧
代碼實現
解析m3u8文件,獲取ts下載列表
要使用到m3u8這個庫來解析m3u8文件
import m3u8 tss = [] order = []#realurl就是存儲ts文件地址的m3u8文件的url ,這樣返回的數據是json格式的,方便讀取數據 data = m3u8.load(realurl).data# appendurl就是要拼接在前面的那個地址 這樣存入tss的ts文件地址都是真實地址 # order的作用是在將多個ts文件合成一個mp4時,由這個order提供各ts文件拼接的順序 for i in data["segments"]:tss.append(appendurl + "/" + i["uri"])order.append(i["uri"])到現在為止,ts文件拼接的順序以及ts文件的真實地址就全部拿到了
多線程下載ts文件,以及ts文件順序的存儲
有一說一,這些ts文件不僅多,而且小,如果我們只是一個線程下載文件,未免太浪費時間了,而且效率太低了,這次我們采用多線程的方式進行大量ts文件的下載
總代碼
def download(url, name):#記錄創立的線程task_list = []# 獲取ts的真實地址和順序tss, order = getTss(url)# 這里將ts文件順序存儲在m3u8,至于為啥這么做,因為ts文件數量太多了file = open("E://file//order.m3u8", 'w')# 這里將下載ts文件的本地路徑輸入到order.m3u8之中for i in order:file.write(f"file 'E:\\file\\ts\\" + i + "'");file.write("\n")#線程池的創立 pool = ThreadPoolExecutor(max_workers=50)for i in range(0, len(order)):# 啟動多個線程下載文件task_list.append(pool.submit(FileDownload.downloadFile, 'E://file//ts//' + order[i], tss[i]))# 判斷所有下載線程是否全部結束while (True):if len(task_list) == 0:breakfor i in task_list:if i.done():task_list.remove(i)# 進行多個ts文件的合并VideoUtil.mixTss(name)# 合并結束之后把ts文件都刪了,不然太占空間了for u in order:turl = f"E:\\file\\ts\\" + uos.remove(turl)ts文件順序存儲到本地文件中
主要代碼
# 這里將下載ts文件的本地路徑輸入到order.m3u8之中for i in order:file.write(f"file 'E:\\file\\ts\\" + i + "'");file.write("\n")最終文件中存儲的內容
最好按照這種格式存入,之前在網上找的其他格式都會報錯,但這個是ok的
多線程下載ts文件
yysy,多線程真的強,尤其是下載這些小文件,多線程真的是絕了
本文采用線程池的方式,為什么采用線程池呢,因為線程池可以幫我們保留一段時間空閑線程,可以減少線程創建和銷毀所耗費的時間,大大提高多線程的效率,同時可以幫助我們限制線程的數量
主要代碼
ts文件合成mp4
主要思路就是利用剛剛生成的那個ts順序文件(order.m3u8),按照文件中的順序進行ts文件的拼接。
這里拼接ts文件時還是要使用ffmpeg,沒有的兄弟們可以看下這個安裝一下
ffmpeg安裝教程
主要代碼
這里解釋一下
D:\tool\ffmpeg\bin\ffmpeg.exe : 本地ffmpeg的位置,設置了環境變量直接ffmpeg即可
E:\file\order.m3u8:剛剛生成的存儲ts文件的順序的文件路徑
E:\file\video2\{}.mp4:視頻最終合成之后存放的位置
至此,ts視頻的下載以及合成一個mp4就實現了
成果
ts文件
這是下載過程中截的圖,有一說一,看著這些文件爆炸式增加,還挺爽
mp4文件
具體就不給你們康了,你們猜猜是啥
總結
總之沒有想象的這么難,做之前以為很復雜,其實還好,最后歡迎各位大佬指點。
總結
以上是生活随笔為你收集整理的ts视频下载 准备下载视频的你确定不进来看看吗的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (1)基于zigbee协议栈开发——串口
- 下一篇: mysql序列号生成软件_mysql 序