(抓)如何抓"小白影音"的m3u8並轉成ts

 如何抓"小白影音"的m3u8並轉成ts

#研究用,不鼓勵盜取行為,請支持正版
參考 https://blog.csdn.net/human_soul/article/details/103263573
話說很多電影網上的影片都使用m3u8的串流,據我之前觀察,它是一部完整
視頻切成幾千個ts檔,我老愛上一些網課,也會有一個習慣就是同時錄製
但有時想要回播,有空再看,最快的方法就是寫一個能抓取視頻串流的程式
。找到一個電影網上的視頻,也是m3u8的串流結構,今天就用這個來練
手一下。

目標網址


安裝m3u8

pip install m3u8

step1—觀察網頁型態

網頁空處按滑鼠右鍵>檢查,或以我的筆電快捷是ctrl+shift+i



觀察結果可以發現,大概就是在結構的表面就會列出一系列
副檔名.ts的檔,找出index.m3u8,再按response,有一整列檔名
那就是全部影片的.ts清單。
再來看右邊*.ts最後個數字是多少,這樣做是因為等下要用迴圈
把它下一一下載
下來。
先確定一下最後的.ts是不是片子的結尾















step2—開始寫程式碼

1:藍色截取那段是主要網址,後面的檔案名等下利用m3u8庫來抓


 step3—寫主要抓取的網址

tsUrl='https://yiyi.55zuiday.com/20180216/hsMX5SId/800kb/hls/'
savepath=r'D:/暫存/test'
m3u8_url=r'https://yiyi.55zuiday.com/20180216/hsMX5SId/800kb/hls/index.m3u8'
m3u8_url等下在抓*.ts時會用到

m3u8_obj=m3u8.load(m3u8_url) #讀取index.m3u8裡文件
for seg in m3u8_obj.segments:
    dest_url=tsUrl+seg.uri
    print(dest_url)

------------------------------------------------------
顯示結果
...
https://yiyi.55zuiday.com/20180216/hsMX5SId/800kb/hls/fWwEd68882081.ts https://yiyi.55zuiday.com/20180216/hsMX5SId/800kb/hls/fWwEd68882082.ts https://yiyi.55zuiday.com/20180216/hsMX5SId/800kb/hls/fWwEd68882083.ts https://yiyi.55zuiday.com/20180216/hsMX5SId/800kb/hls/fWwEd68882084.ts https://yiyi.55zuiday.com/20180216/hsMX5SId/800kb/hls/fWwEd68882085.ts https://yiyi.55zuiday.com/20180216/hsMX5SId/800kb/hls/fWwEd68882086.ts https://yiyi.55zuiday.com/20180216/hsMX5SId/800kb/hls/fWwEd68882087.ts https://yiyi.55zuiday.com/20180216/hsMX5SId/800kb/hls/fWwEd68882088.ts https://yiyi.55zuiday.com/20180216/hsMX5SId/800kb/hls/fWwEd68882089.ts https://yiyi.55zuiday.com/20180216/hsMX5SId/800kb/hls/fWwEd68882090.ts https://yiyi.55zuiday.com/20180216/hsMX5SId/800kb/hls/fWwEd68882091.ts

step4—請求表頭和開始下載檔案

把剛剛step3抓取方法合在一起如下
tsUrl='https://yiyi.55zuiday.com/20180216/hsMX5SId/800kb/hls/'
savepath=r'D:/暫存/test'
m3u8_url=r'https://yiyi.55zuiday.com/20180216/hsMX5SId/800kb/hls/index.m3u8'
m3u8_obj=m3u8.load(m3u8_url)
for seg in m3u8_obj.segments:
    dest_url=tsUrl+seg.uri
    # print(dest_url)

    headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64)\
                AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101\
                Safari/537.36', }
    tsfiles=requests.get(dest_url, headers=headers)
    if tsfiles.status_code==200:
        print(tsfiles,dest_url)
————————————————————————————————————————————————————
結果回傳
PS D:\python> & C:/Python38/python.exe d:/python/shiaubeiFilmsDownlod.py <Response [200]> https://yiyi.55zuiday.com/20180216/hsMX5SId/800kb/hls/fWwEd6888000.ts <Response [200]> https://yiyi.55zuiday.com/20180216/hsMX5SId/800kb/hls/fWwEd6888001.ts <Response [200]> https://yiyi.55zuiday.com/20180216/hsMX5SId/800kb/hls/fWwEd6888002.ts <Response [200]> https://yiyi.55zuiday.com/20180216/hsMX5SId/800kb/hls/fWwEd6888003.ts <Response [200]> https://yiyi.55zuiday.com/20180216/hsMX5SId/800kb/hls/fWwEd6888004.ts <Response [200]> https://yiyi.55zuiday.com/20180216/hsMX5SId/800kb/hls/fWwEd6888005.ts

Response [200]表示請求成功

下載的函式如下:
def downloadTS(savepathseg):
    with open(os.path.join(savepath, seg.uri), 'wb'as d:
        d.write(tsfiles.content)
        RETURN="%s...下載完成"%seg.uri
        d.close()
    time.sleep(1)
    return RETURN

最後合併在一起的程式碼
import requests
import os, time
import m3u8

def downloadTS(savepathseg):
    with open(os.path.join(savepath, seg.uri), 'wb'as d:
        d.write(tsfiles.content)
        RETURN="%s...下載完成"%seg.uri
        d.close()
    time.sleep(1)
    return RETURN

tsUrl='https://yiyi.55zuiday.com/20180216/hsMX5SId/800kb/hls/'
savepath=r'D:/暫存/test'
m3u8_url=r'https://yiyi.55zuiday.com/20180216/hsMX5SId/800kb/hls/index.m3u8'
m3u8_obj=m3u8.load(m3u8_url)
for seg in m3u8_obj.segments:
    dest_url=tsUrl+seg.uri
    # print(dest_url)

    headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64)\
                AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101\
                Safari/537.36', }
    tsfiles=requests.get(dest_url, headers=headers)
    if tsfiles.status_code==200:
        print(tsfiles,dest_url)
    print(downloadTS(savepath, seg))

資料夾裡就會開始顯現抓下來的ts,等全抓好後,再利用CMD下個指令,讓
幾千個ts合成一個ts











copy /b *.ts aaa.ts
#aaa.ts自己設的檔名

首先打開CMD進入剛下載下來的ts的路徑,並打上
copy /b *.ts (想生成的檔名).ts































然後把ffmpeg這個程式和要合成的ts檔放在同一個資料夾裡
檔案在此下載


回到CMD底下的影片目錄裡並下ffmpeg的轉換mp4指令,如下

ffmpeg -i 檔名自取.ts -acodec copy -vcodec copy 檔名自取.mp4
















打開ts檔的目錄,就可以看到轉換後的mp4

留言

這個網誌中的熱門文章

(爬)微信公眾號上的圖片下載

(爬)康是美門市查詢並轉存csv