日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python合并ts视频_python爬取视频网站m3u8视频,下载.ts后缀文件,合并成整视频

發(fā)布時(shí)間:2025/3/15 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python合并ts视频_python爬取视频网站m3u8视频,下载.ts后缀文件,合并成整视频 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近發(fā)現(xiàn)一些網(wǎng)站,可以解析各大視頻網(wǎng)站的vip。仔細(xì)想了想,這也算是爬蟲(chóng)呀,爬的是視頻數(shù)據(jù)。

首先選取一個(gè)視頻網(wǎng)站,我選的是?影視大全?,然后選擇上映不久的電影 “一出好戲” 。

分析頁(yè)面

我用的是chrome瀏覽器,F12進(jìn)入查看。選擇NetWork的Doc,發(fā)現(xiàn)主體部分的數(shù)據(jù)是從這個(gè)網(wǎng)站獲取的。

在地址欄輸入這個(gè)鏈接,跳轉(zhuǎn)到了視頻來(lái)源的播放頁(yè)面。

當(dāng)然,在這個(gè)頁(yè)面就可以直接觀看視頻了,但是我們要把視頻下載下來(lái)。

尋找視頻文件

仍然是之前那個(gè)頁(yè)面,在Other中,我們發(fā)現(xiàn)了一些奇怪的東西。

查一下,m3u8是個(gè)啥東西。

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

這下就清楚了,這就是我們要找的東西。

點(diǎn)擊Response,查看這個(gè).m3u8的文件。觀察發(fā)現(xiàn),.ts后綴的文件地址是有規(guī)律的。我們只需要下載所有的.ts后綴文件,然后把它們整合成一個(gè)文件即可。

合并.ts文件

命令行:“copy /b ?F:\f\*.ts??E:\f\new.ts”。

執(zhí)行該命令后,F:\f目錄下的全部TS文件就被合并成一個(gè)new.ts文件了(你原來(lái)的那堆文件仍然存在)。

這里使用copy命令的文件合并功能進(jìn)行ts文件的合并,copy后面的?/b??參數(shù)表示把文件按二進(jìn)制格式來(lái)合并,如果不加這個(gè)參數(shù),則會(huì)把目標(biāo)當(dāng)成文本文件來(lái)合并,并在文件內(nèi)添加不必要的標(biāo)記,這會(huì)導(dǎo)致播放出錯(cuò),所以必須加?/b?參數(shù)。

編寫(xiě)腳本,下載.ts文件

from urllib importrequestimporturllibfrom time importsleepimportsocketclassCatchVideo(object):def __init__(self):

self.headers= "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36"self.url= ""

defset_url(self, i):if i < 1000:

self.url= "https://cdn.letv-cdn.com/20180811/YLDUgCD6/1000kb/hls/DtrOg2412%03d.ts" %ielse:

self.url= "https://cdn.letv-cdn.com/20180811/YLDUgCD6/1000kb/hls/DtrOg2412%04d.ts" %i#獲取并下載ts文件

defdl_ts(self, i):

rq=request.Request(self.url)

rq.add_header('User-Agent', self.headers)

response=request.urlopen(rq)

resread=response.read()

with open(str(i)+".ts", "wb") as f:

f.write(resread)

response.close()#關(guān)閉urlopen方法,防止被ban

defstart_work(self):for i in range(0, 1563+1):

self.set_url(i)try:

self.dl_ts(i)print(str(i) + ".ts success")

sleep(1)excepturllib.error.URLError as e:print(e.reason)break

exceptsocket.timeout as e2:print(e2.reason)

self.dl_ts(i)if __name__ == '__main__':

catch_video=CatchVideo()

socket.setdefaulttimeout(20)

catch_video.start_work()

運(yùn)行過(guò)程中,出現(xiàn)了兩次報(bào)錯(cuò),分別是:

urllib.error.URLError :[WinError 10054]? 遠(yuǎn)程主機(jī)強(qiáng)迫關(guān)閉了一個(gè)現(xiàn)有的連接

socket.timeout? ? ?read讀取超時(shí)

解決辦法:

1.增加response.close,關(guān)閉urlopen方法。

2.增加time.sleep,有一秒緩沖時(shí)間

3.設(shè)置socket.setdefaulttimeout,給socket預(yù)留緩沖時(shí)間

還存在問(wèn)題

實(shí)際運(yùn)行過(guò)程中,腳本執(zhí)行效率略低。之后會(huì)加入多線程,繼續(xù)改進(jìn),增加運(yùn)行效率。

參考博客:

更新代碼,加入多進(jìn)程

修改了start_work方法和主進(jìn)程:

defstart_work(self, i):

self.set_url(i)try:

self.dl_ts(i)print(str(i) + ".ts success")

sleep(1)excepturllib.error.URLError as e:print(e.reason)

self.dl_ts(i)exceptsocket.timeout as e2:print(e2.reason)

self.dl_ts(i)if __name__ == '__main__':

catch_video=CatchVideo()

socket.setdefaulttimeout(20)#設(shè)置socket層超時(shí)時(shí)間20秒

I =0while I < 1563+1:#5個(gè)進(jìn)程并發(fā)運(yùn)行

p_l = [Process(target=catch_video.start_work, args=(i,)) for i in range(I, I+5)]for p inp_l:

p.start()for p inp_l:

p.join()

I= I + 5

這里設(shè)置了5個(gè)進(jìn)程同時(shí)運(yùn)行,太多遠(yuǎn)程主機(jī)會(huì)拒絕請(qǐng)求。

OK,這樣就能很快下載了。隔了幾天終于想起來(lái)還有個(gè)電影沒(méi)看,哈哈 ^_^

總結(jié)

以上是生活随笔為你收集整理的python合并ts视频_python爬取视频网站m3u8视频,下载.ts后缀文件,合并成整视频的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。