最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python通過(guò)m3u8文件下載合并ts視頻的操作

 更新時(shí)間:2021年04月15日 16:05:17   作者:SpiderLiH  
這篇文章主要介紹了Python通過(guò)m3u8文件下載合并ts視頻的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

前段時(shí)間,接到一個(gè)需求,要求下載某一個(gè)網(wǎng)站的視頻,然后自己從網(wǎng)上查閱了相關(guān)的資料,在這里做一個(gè)總結(jié)。

1. m3u8文件

m3u8是蘋(píng)果公司推出一種視頻播放標(biāo)準(zhǔn),是一種文件檢索格式,將視頻切割成一小段一小段的ts格式的視頻文件,然后存在服務(wù)器中(現(xiàn)在為了減少I/o訪問(wèn)次數(shù),一般存在服務(wù)器的內(nèi)存中),通過(guò)m3u8解析出來(lái)路徑,然后去請(qǐng)求,是現(xiàn)在比較流行的一種加載方式。目前,很多新聞視頻網(wǎng)站都是采用這種模式去加載視頻。

M3U8文件是指UTF-8編碼格式的M3U文件。M3U文件是記錄了一個(gè)索引純文本文件,打開(kāi)它時(shí)播放軟件并不是播放它,而是根據(jù)它的索引找到對(duì)應(yīng)的音視頻文件的網(wǎng)絡(luò)地址進(jìn)行在線播放。原視頻數(shù)據(jù)分割為很多個(gè)TS流,每個(gè)TS流的地址記錄在m3u8文件列表中。

下面就是m3u8文件的格式。

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:15
#EXTINF:6.916667,
out000.ts
#EXTINF:10.416667,
out001.ts
#EXTINF:10.416667,
out002.ts
#EXTINF:1.375000,
out003.ts
#EXTINF:1.541667,
out004.ts
#EXTINF:7.666667,
out005.ts
#EXTINF:10.416667,

2. ts文件處理

只有m3u8文件,需要下載ts文件

ts文件能正常播放,但太多而小,需要合并 有ts文件

但因?yàn)楸患用軣o(wú)法播放,需要解碼

在這里我只記錄下前兩個(gè)步驟,因?yàn)?,我目前研究的比較少,還沒(méi)有遇到ts被加密的情況。

3. 分析舉例

那么下面,我就正式舉一個(gè)網(wǎng)站,第一財(cái)經(jīng)網(wǎng)(直接點(diǎn)擊)跟大家正式的講解下。

這是該網(wǎng)站的視頻。如下圖:

在這里插入圖片描述

點(diǎn)擊第一個(gè)視頻,這就是我們這次要爬取的視頻。

在這里插入圖片描述

然后鼠標(biāo)右鍵點(diǎn)擊,選擇"檢查" 或者按F12鍵,進(jìn)入開(kāi)發(fā)者模式,查看網(wǎng)頁(yè)代碼。

然后,點(diǎn)擊Network ,再點(diǎn)擊other,尋找請(qǐng)求地址中帶有m3u8和ts標(biāo)記的請(qǐng)求地址。

不懂,請(qǐng)看下圖。有一點(diǎn),很重要。網(wǎng)站通過(guò)切割后ts加載視頻,并不是沒(méi)有規(guī)律的,而是通過(guò)m3u8文件附帶的。也就說(shuō),網(wǎng)站一定是先加載m3u8文件,然后根據(jù)m3u8文件,去請(qǐng)求ts文件。所以,如果你找不到m3u8文件的話,你可以先找第一個(gè)ts文件,然后往上面翻,一定能找到m3u8文件。

在這里插入圖片描述

再點(diǎn)擊這個(gè)m3u8文件,右側(cè)對(duì)應(yīng)的就是它的請(qǐng)求地址。

在這里插入圖片描述

請(qǐng)求地址如下:

https://ycalvod.yicai.com/record/live/cbn/ca233887-1443-4bdf-b762-3b4b3a217085_LD.m3u8?auth_key=1575703722-0-0-6f09e9a156491f027a035e31c238c48c&ycfrom=yicaiwww

你可以把上面那個(gè)地址,輸入瀏覽器地址框內(nèi),下載下來(lái)。也可以通過(guò)查看源碼,找到該功能的對(duì)應(yīng)的html代碼。

這是下載下來(lái)的m3u8文件。

在這里插入圖片描述

在這里插入圖片描述

從圖片可以看出來(lái),每一個(gè)ts文件都是相對(duì)的地址,所以下面我們就需要找到絕對(duì)地址。

在這里插入圖片描述

ts文件地址如下:

https://ycalvod.yicai.com/record/live/cbn_yld/1575111614_3446078.ts

上面,我們已經(jīng)把這個(gè)網(wǎng)站的視頻加載模式分析的很透徹,下面就開(kāi)始擼代碼了。

4. 獲取ts文件

def getTsUrl():
    ts_url_list = []
    baseUrl = "https://ycalvod.yicai.com/record/live"
    with open("ca233887-1443-4bdf-b762-3b4b3a217085_LD.m3u8", "r", encoding="utf-8") as f:
        m3u8Contents = f.readlines()
        for content in m3u8Contents:
            if content.endswith("ts\n"):
                ts_Url = baseUrl + content.replace("\n", "").replace("..", "")
                ts_url_list.append(ts_Url)
                print(ts_Url)
    return ts_url_list

5. 下載ts文件

def download_ts_video(download_path, ts_url_list):
    download_path = r"C:\Users\Administrator\Desktop\AiShu\下載視頻\TS視頻"
    for i in range(len(ts_url_list)):
        ts_url = ts_url_list[i]
        try:
            response = requests.get(ts_url, stream=True, verify=False)
        except Exception as e:
            print("異常請(qǐng)求:%s" % e.args)
            return
        ts_path = download_path + "\{}.ts".format(i)
        with open(ts_path, "wb+") as file:
            for chunk in response.iter_content(chunk_size=1024):
                if chunk:
                    file.write(chunk)
    print("TS文件下載完畢?。?)

這就是我本地下載好的ts切割視頻

在這里插入圖片描述

6. 合并TS視頻

def heBingTsVideo(download_path,hebing_path):
    all_ts = os.listdir(download_path)
    with open(hebing_path, 'wb+') as f:
        for i in range(len(all_ts)):
            ts_video_path = os.path.join(download_path, all_ts[i])
            f.write(open(ts_video_path, 'rb').read())
    print("合并完成??!")

最后的結(jié)果如下:

在這里插入圖片描述

7. 完整的代碼

有興趣的小伙伴,可以研究下。

import requests,os
def getTsUrl():
    ts_url_list = []
    baseUrl = "https://ycalvod.yicai.com/record/live"
    with open("ca233887-1443-4bdf-b762-3b4b3a217085_LD.m3u8", "r", encoding="utf-8") as f:
        m3u8Contents = f.readlines()
        for content in m3u8Contents:
            if content.endswith("ts\n"):
                ts_Url = baseUrl + content.replace("\n", "").replace("..", "")
                ts_url_list.append(ts_Url)
                print(ts_Url)
    return ts_url_list
def download_ts_video(download_path, ts_url_list):
    download_path = r"C:\Users\Administrator\Desktop\AiShu\下載視頻\TS視頻"
    for i in range(len(ts_url_list)):
        ts_url = ts_url_list[i]
        try:
            response = requests.get(ts_url, stream=True, verify=False)
        except Exception as e:
            print("異常請(qǐng)求:%s" % e.args)
            return
        ts_path = download_path + "\{}.ts".format(i)
        with open(ts_path, "wb+") as file:
            for chunk in response.iter_content(chunk_size=1024):
                if chunk:
                    file.write(chunk)
    print("TS文件下載完畢??!")
def heBingTsVideo(download_path,hebing_path):
    all_ts = os.listdir(download_path)
    with open(hebing_path, 'wb+') as f:
        for i in range(len(all_ts)):
            ts_video_path = os.path.join(download_path, all_ts[i])
            f.write(open(ts_video_path, 'rb').read())
    print("合并完成?。?)
if __name__ == '__main__':
    download_path = r"C:\Users\Administrator\Desktop\AiShu\下載視頻\TS視頻"
    hebing_path = r"C:\Users\Administrator\Desktop\AiShu\下載視頻\合并TS視頻\第一財(cái)經(jīng).mp4"
    ts_url_list = getTsUrl()
    download_ts_video(download_path, ts_url_list)
    heBingTsVideo(download_path,hebing_path)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • python裝飾器深入學(xué)習(xí)

    python裝飾器深入學(xué)習(xí)

    這篇文章主要深入學(xué)習(xí)了python裝飾器的相關(guān)資料,什么是裝飾器?裝飾器遵循的原則等,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • python數(shù)據(jù)結(jié)構(gòu)之線性表的順序存儲(chǔ)結(jié)構(gòu)

    python數(shù)據(jù)結(jié)構(gòu)之線性表的順序存儲(chǔ)結(jié)構(gòu)

    這篇文章主要為大家詳細(xì)介紹了python數(shù)據(jù)結(jié)構(gòu)之線性表的順序存儲(chǔ)結(jié)構(gòu),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • 用Python創(chuàng)建聲明性迷你語(yǔ)言的教程

    用Python創(chuàng)建聲明性迷你語(yǔ)言的教程

    這篇文章主要介紹了用Python創(chuàng)建聲明性迷你語(yǔ)言的教程,本文來(lái)自于IBM官方網(wǎng)站技術(shù)文檔,需要的朋友可以參考下
    2015-04-04
  • Python+OpenCV圖像處理——實(shí)現(xiàn)直線檢測(cè)

    Python+OpenCV圖像處理——實(shí)現(xiàn)直線檢測(cè)

    這篇文章主要介紹了Python+OpenCV如何實(shí)現(xiàn)直線檢測(cè),幫助大家更好的利用python處理圖片,感興趣的朋友可以了解下
    2020-10-10
  • Python貪心算法實(shí)例小結(jié)

    Python貪心算法實(shí)例小結(jié)

    這篇文章主要介紹了Python貪心算法,結(jié)合三個(gè)常見(jiàn)實(shí)例分析了貪心算法的原理及解決具體問(wèn)題的相關(guān)使用技巧,需要的朋友可以參考下
    2018-04-04
  • Python request使用方法及問(wèn)題總結(jié)

    Python request使用方法及問(wèn)題總結(jié)

    這篇文章主要介紹了Python request使用方法及問(wèn)題總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 使用python連接Linux服務(wù)器發(fā)送指定命令的示例代碼

    使用python連接Linux服務(wù)器發(fā)送指定命令的示例代碼

    這篇文章主要介紹了使用python連接Linux服務(wù)器發(fā)送指定命令,首先安裝paramiko庫(kù),使用paramiko庫(kù)連接linux,使用paramiko庫(kù)上傳下載文件,結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • Django顯示可視化圖表的實(shí)踐

    Django顯示可視化圖表的實(shí)踐

    這篇文章主要介紹了Django顯示可視化圖表的實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • python for循環(huán)內(nèi)輸出和外輸出方式

    python for循環(huán)內(nèi)輸出和外輸出方式

    這篇文章主要介紹了python for循環(huán)內(nèi)輸出和外輸出方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • Python基礎(chǔ)教程之異常處理詳解

    Python基礎(chǔ)教程之異常處理詳解

    Python的異常處理能力是很強(qiáng)大的,它有很多內(nèi)置異常,可向用戶準(zhǔn)確反饋出錯(cuò)信息,下面這篇文章主要給大家介紹了關(guān)于Python基礎(chǔ)教程之異常處理的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04

最新評(píng)論

石城县| 高青县| 平湖市| 莱阳市| 宁蒗| 雅安市| 报价| 黎川县| 简阳市| 乌拉特中旗| 颍上县| 香港| 贞丰县| 滁州市| 蒲江县| 和顺县| 麻栗坡县| 得荣县| 车险| 舟山市| 财经| 陆丰市| 女性| 浦江县| 泸水县| 襄汾县| 承德市| 库伦旗| 余姚市| 偃师市| 庆云县| 日照市| 济南市| 新密市| 浦江县| 南乐县| 巴林左旗| 乌拉特中旗| 萍乡市| 满城县| 景东|