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

Python解析m3u8拼接下載mp4視頻文件的示例代碼

 更新時間:2021年03月03日 17:06:31   作者:404NooFound  
這篇文章主要介紹了Python解析m3u8拼接下載mp4視頻文件的示例代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、關(guān)于m3u8:

m3u8是蘋果公司推出一種視頻播放標(biāo)準(zhǔn),是m3u的一種,不過編碼方式是utf-8,是一種文件檢索格式,將視頻切割成一小段一小段的ts格式的視頻文件,然后存在服務(wù)器中(現(xiàn)在為了減少I/o訪問次數(shù),一般存在服務(wù)器的內(nèi)存中),通過m3u8解析出來路徑,然后去請求。

示例:

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXTINF:9,
http://data.video.iqiyi.com/videos/vts/20210301/69/b8/73ad4ef04fde4586ef2799ecd67241ce.ts?qypid=2645242154145600_04000000001000000000_96&start=496696&end=779448&contentlength=282752&sd=20200&qdv=1&qd_uid=0&qd_tvid=2645242154145600&qd_vip=0&qd_src=02029022240000000000&qd_tm=1614590393988&qd_ip=0&qd_p=0&qd_k=4eb685f1966cbd08e6a9648fe0b8c007&ve=&sgti=&dfp=&qd_sc=f9a4f133a622871b6739734615ef178d
#EXTINF:9,
http://data.video.iqiyi.com/videos/vts/20210301/69/b8/73ad4ef04fde4586ef2799ecd67241ce.ts?qypid=2645242154145600_04000000001000000000_96&start=779448&end=1008432&contentlength=228984&sd=29200&qdv=1&qd_uid=0&qd_tvid=2645242154145600&qd_vip=0&qd_src=02029022240000000000&qd_tm=1614590393988&qd_ip=0&qd_p=0&qd_k=4eb685f1966cbd08e6a9648fe0b8c007&ve=&sgti=&dfp=&qd_sc=f9a4f133a622871b6739734615ef178d
#EXTINF:9,
http://data.video.iqiyi.com/videos/vts/20210301/69/b8/73ad4ef04fde4586ef2799ecd67241ce.ts?qypid=2645242154145600_04000000001000000000_96&start=5934408&end=6141020&contentlength=206612&sd=198733&qdv=1&qd_uid=0&qd_tvid=2645242154145600&qd_vip=0&qd_src=02029022240000000000&qd_tm=1614590393988&qd_ip=0&qd_p=0&qd_k=4eb685f1966cbd08e6a9648fe0b8c007&ve=&sgti=&dfp=&qd_sc=f9a4f133a622871b6739734615ef178d
#EXT-X-ENDLIST

預(yù)覽器打開會出現(xiàn)下載ts文件

在這里插入圖片描述

我們想要的mp4文件就是一個個ts文件按照順序拼接成的,廢話不多說直接上代碼。

# -*- coding:utf-8 -*- 
"""
Author:SPIDERMAN
Time: 2021/3/1 
Software: PyCharm
"""
import logging
import os
from glob import iglob
import requests
import m3u8
from urllib.parse import urljoin
from concurrent.futures import ThreadPoolExecutor
from natsort import natsorted

class M3u8Download:
 def __init__(self,m3u8_url):
  self.m3u8_url = m3u8_url
  self.headers = {
   'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
  }
  self.threadpool = ThreadPoolExecutor(max_workers=10)
  self.file_name = 'weibo.mp4'
  logging.basicConfig(format='[%(asctime)s][*%(levelname)s]:%(message)s',
       level=logging.INFO)
 def get_ts_url(self,m3u8_url):
  """
  解析ts_url
  :param m3u8_url:
  :return:
  """
  m3u8_obj = m3u8.load(m3u8_url)
  base_uri = m3u8_obj.base_uri
  logging.info('[*]get_base_uri'+base_uri)
  for seg in m3u8_obj.segments:
   yield urljoin(base_uri, seg.uri)

 def download__ts(self, urlinfo):
  """
  下載ts文件
  :param urlinfo:
  :return:
  """
  url, ts_name = urlinfo
  res = requests.get(url, headers=self.headers)
  with open(ts_name, 'wb') as fp:
   fp.write(res.content)
  logging.info('[*download]'+ts_name)


 def download_all_ts(self):
  """
  下載所有函數(shù)
  :return:
  """
  ts_urls = self.get_ts_url(self.m3u8_url)
  logging.info('[*download]download:'+self.m3u8_url)
  for index, ts_url in enumerate(ts_urls):
   print(ts_url)
   self.threadpool.submit(self.download__ts, [ts_url, f'{index}.ts'])
  self.threadpool.shutdown()

 def remove_ts(self,ts_path):
  """
  刪除ts文件
  :param ts_path:
  :return:
  """
  for ts in iglob(ts_path):
   os.remove(ts)
  logging.info('[*remove]remove all *.ts')

 def run(self):
  self.download_all_ts()
  ts_path = '*.ts'
  all_ts = iglob(ts_path)
  with open(self.file_name, 'wb') as fn:
   #根據(jù)ts排序
   for ts in natsorted(all_ts):
    #讀ts寫mp4
    with open(ts, 'rb') as ft:
     scline = ft.read()
     fn.write(scline)
  self.remove_ts(ts_path)

if __name__ == '__main__':
 m3u8Download = M3u8Download('https://cache.m.iqiyi.com/mus/1618469868576801/a34fec3fc63db2c1bb4c15f53cd513e1/afbe8fd3d73448c9/0/20210301/69/b8/670962cfd6b9166c87a21728808fe6a2.m3u8?qd_originate=tmts_py&tvid=2645242154145600&bossStatus=0&qd_vip=0&px=&src=02029022240000000000&prv=&previewType=&previewTime=&from=&qd_time=1614590979725&qd_p=0&qd_asc=636bb14ab52facec684335546d2d60ec&qypid=2645242154145600_04000000001000000000_96&qd_k=4eb685f1966cbd08e6a9648fe0b8c007&isdol=0&code=2&ff=f4v&iswb=1&vf=2198359907d7f173fed0b6eabca18b29&np_tag=nginx_part_tag&pt_sc=d855f47d523c5a4fab67f5b10be3c475&pt=180&pt_tag_tm=1614590979827')
 m3u8Download.run()

console.log("公眾號:Java技術(shù)迷")
console.log("wx:spiderskill")

到此這篇關(guān)于Python解析m3u8拼接下載mp4視頻文件的文章就介紹到這了,更多相關(guān)Python下載mp4視頻文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決python3 網(wǎng)絡(luò)請求路徑包含中文的問題

    解決python3 網(wǎng)絡(luò)請求路徑包含中文的問題

    今天小編就為大家分享一篇解決python3 網(wǎng)絡(luò)請求路徑包含中文的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Python2與Python3的區(qū)別實例總結(jié)

    Python2與Python3的區(qū)別實例總結(jié)

    這篇文章主要介紹了Python2與Python3的區(qū)別,結(jié)合實例形式總結(jié)分析了Python2與Python3打印輸出、編碼、數(shù)值運算、異常處理等使用區(qū)別,需要的朋友可以參考下
    2019-04-04
  • python中sys模塊是做什么用的

    python中sys模塊是做什么用的

    在本篇文章里小編給大家分享了一篇關(guān)于python中sys模塊的用法及相關(guān)基礎(chǔ)知識點,有興趣的朋友們可以參考下。
    2020-08-08
  • Python中虛擬環(huán)境依賴問題的解決方案詳解

    Python中虛擬環(huán)境依賴問題的解決方案詳解

    在Python開發(fā)中,虛擬環(huán)境和依賴管理是必不可少的工具,本文將以一個實際案例為基礎(chǔ),詳細(xì)分析如何解決Python虛擬環(huán)境中的依賴問題,希望對大家有所幫助
    2025-03-03
  • Django之 ArrayAgg與Admin技巧學(xué)習(xí)

    Django之 ArrayAgg與Admin技巧學(xué)習(xí)

    這篇文章主要為大家介紹了Django之ArrayAgg與Admin的技巧學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Python簡單格式化時間的方法【strftime函數(shù)】

    Python簡單格式化時間的方法【strftime函數(shù)】

    這篇文章主要介紹了Python簡單格式化時間的方法,結(jié)合實例形式分析了Python使用strftime函數(shù)進(jìn)行時間格式化的操作技巧,需要的朋友可以參考下
    2016-09-09
  • 探索Python數(shù)據(jù)可視化庫中Plotly Express的使用方法

    探索Python數(shù)據(jù)可視化庫中Plotly Express的使用方法

    在數(shù)據(jù)分析和可視化領(lǐng)域,數(shù)據(jù)的有效呈現(xiàn)是至關(guān)重要的,python作為一種強大的編程語言,提供了多種數(shù)據(jù)可視化工具和庫,本文將介紹Plotly Express的基本概念和使用方法,幫助讀者快速入門并掌握數(shù)據(jù)可視化的技巧
    2023-06-06
  • 使用 Python 玩轉(zhuǎn) GitHub 的貢獻(xiàn)板(推薦)

    使用 Python 玩轉(zhuǎn) GitHub 的貢獻(xiàn)板(推薦)

    這篇文章主要介紹了使用 Python 玩轉(zhuǎn) GitHub 的貢獻(xiàn)板的相關(guān)知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04
  • opencv形態(tài)學(xué)中的孔洞填充詳細(xì)圖解

    opencv形態(tài)學(xué)中的孔洞填充詳細(xì)圖解

    我們在進(jìn)行圖像分割后,分割結(jié)果有時會有一些小孔洞,如圖1所示,其中黑白兩色表示兩種不同的類別。一般情況下,這些孔洞屬于錯分情況,為了優(yōu)化結(jié)果,我們通常對這些孔洞進(jìn)行填充。今天我們就用python語言基于OpenCV實現(xiàn)孔洞填充
    2022-10-10
  • Python接口自動化淺析unittest單元測試原理

    Python接口自動化淺析unittest單元測試原理

    這篇文章主要介紹了Python接口自動化淺析unittest單元測試原理,文中描述了單元測試,unittest模塊特性、大致流程、源碼及實戰(zhàn)例子這幾個模塊,有需要的朋友可以借鑒參考下
    2021-08-08

最新評論

安国市| 喜德县| 武山县| 新乐市| 贡嘎县| 普安县| 古蔺县| 乐亭县| 大悟县| 溧阳市| 百色市| 昌都县| 安徽省| 德格县| 石河子市| 成都市| 永昌县| 乳源| 雅安市| 庆安县| 高平市| 吉水县| 宜都市| 马鞍山市| 宜兰县| 平罗县| 福泉市| 英超| 轮台县| 周至县| 永胜县| 信宜市| 安达市| 莎车县| 东城区| 汉阴县| 永州市| 泽库县| 新绛县| 钟山县| 吴堡县|