文件按m3u8顺序合并_在线视频下载之m3u8篇
生活随笔
收集整理的這篇文章主要介紹了
文件按m3u8顺序合并_在线视频下载之m3u8篇
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這個暑假的培訓真的多,好多在線視頻讓大家應接不暇。那么問題來了,如果暫時沒時間看,收藏了地址又擔心它將來失效了,所以下載下來存起來是有它的現實意義的。
在線視頻的下載,多數情況下不需要我們親自操刀。比如優酷、騰訊、愛奇藝、B站這些主流網站,直接用You-get命令行下載。
You-get是個Python庫,但是裝完可以在cmd直接運行,具體來說,給個傳送門吧。(點擊跳轉到You-get歷史文章)
但是非主流的在線視頻網站(非直播),可能得自己動手下一下。下面以這個網站為例說明:1、瀏覽器F12抓包:找到一個m3u8地址,復制保存m3u8文件。
2、編程下載:遍歷文件,把ts鏈接提取出來,下載每個文件。
其實下載還挺快的,主要現在網速普遍比較快。注意代碼中前面補0的部分zfill(4),補齊四位,不然合并會順序錯亂。3、合并ts文件,我們在1960個ts文件,所在的文件夾,執行copy命令。
我已經合并完一遍了,所以會有以上提示。4、改進程序:利用多線程池加快下載速度。
import requestsimport threadpool#從m3u8里過濾出所有的ts片段地址tss=[]with open("yx.m3u8",'r') as f: ls=f.readlines() for l in ls: if "#" not in l: tss.append("http://v.live.yanxiu.com"+l.strip())seq=1#單個ts下載函數,注意數字命名前面補0,方便以后合并def partDown(url,seq): res=requests.get(url) with open("dd\\{}.ts".format(str(seq).zfill(4)),"wb+") as f: f.write(res.content)#構造參數列表myArgs=[] for ts in tss: myArgs.append(([ts,seq],None))# seq+=1pool = threadpool.ThreadPool(8) # 線程池設置,最多同時跑8個線程tasks = threadpool.makeRequests(partDown,myArgs)# makeRequests構造線程task請求, 第一個參數是線程函數, 第二個是參數列表[pool.putRequest(task) for task in tasks]# 列表推導式, putRequest向線程池里加task, 讓pool自己去調度taskpool.wait() # 等所有任務結束threadpool是一個比較老的線程池庫,最多支持8個線程同時運行。當有線程完成工作,自動開啟新的下載。說白了,用了線程池就是不用我們自己寫多線程去控制細節了。雖然官方說法是這個庫“過時”了,推薦用“multiprocessing”代替,但是對我們來說,能用就好。5、測試播放:把下下來合并好的視頻打開播放,沒有問題。
說明:不是所有的ts視頻片段都能找到m3u8文件,有的可能要根據時間戳等其它規律找到所有下載鏈接,后續有機會繼續分享其它在線視頻下載案例。如果你覺得有用,可以點個在看↓ 與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的文件按m3u8顺序合并_在线视频下载之m3u8篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python matlabplot an
- 下一篇: 获取族_批量添加族参数(上)