国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python批量下載ts視頻文件,并用ffmpeg合并

這篇具有很好參考價(jià)值的文章主要介紹了Python批量下載ts視頻文件,并用ffmpeg合并。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

一、ts文件的由來(lái)

二、下載ts文件

1.下載index.m3u8,并做相應(yīng)處理

2.下載ts文件

三、ffmpeg合并ts文件


一、ts文件的由來(lái)

ts文件,ts即"Transport Stream"的縮寫,特點(diǎn)就是要求從視頻流的任一片段開始都是可以獨(dú)立解碼的,非常適合網(wǎng)絡(luò)視頻播放。

打開網(wǎng)址:https://www.kan35.com/play/210314-3-1.html,要怎么才能把這個(gè)視頻下載到電腦上呢?

按F12發(fā)現(xiàn),這些視頻被切割成無(wú)數(shù)個(gè)細(xì)小的片斷,如圖:

ts文件下載,python,python

上圖中,用紅框圈出來(lái)的部分很重要,.ts的文件就是被切割的視頻文件。但是這些視頻文件名字全是亂的,沒有規(guī)律。它們的順序是通過(guò)index.m3u8實(shí)現(xiàn)的,上圖中有兩個(gè)index.m3u8文件,一般是尺寸更大的那個(gè)才是存放視頻播放順序的文件。可以在瀏覽器中打開看下:

ts文件下載,python,python

?可以看出,這個(gè)文件里面確實(shí)保存了ts文件播放順序,當(dāng)然一些其它的網(wǎng)站提供的index.m3u8文件格式會(huì)有些不一樣,這些都可以后期處理。

二、下載ts文件

1.下載index.m3u8,并做相應(yīng)處理

這個(gè)index.m3u8很重要,直接右鍵“Open in new tab”就可以下載下來(lái),但是該怎么處理呢?

首先,了解下什么是m3u8:

????????m3u8是蘋果公司推出的視頻播放標(biāo)準(zhǔn),是m3u的一種,只是編碼格式采用的是UTF-8。

????????m3u8準(zhǔn)確來(lái)說(shuō)是一種索引文件,使用m3u8文件實(shí)際上是通過(guò)它來(lái)解析對(duì)應(yīng)的放在服務(wù)器上的視頻網(wǎng)絡(luò)地址,從而實(shí)現(xiàn)在線播放。使用m3u8格式文件主要因?yàn)榭梢詫?shí)現(xiàn)多碼率視頻的適配,視頻網(wǎng)站可以根據(jù)用戶的網(wǎng)絡(luò)帶寬情況,自動(dòng)為客戶端匹配一個(gè)合適的碼率文件進(jìn)行播放,從而保證視頻的流暢度。

其次,怎么解析這個(gè)文件?

最簡(jiǎn)單的方式是復(fù)制里面的內(nèi)容,然后在excel中篩選包含“https”的字符串。

當(dāng)然,我們可以用更專業(yè)的方法,在python中用“pip install m3u8”安裝這個(gè)模塊,然后就可以用代碼解析了。

import m3u8
data = m3u8.load("index0.m3u8").data
data

顯示內(nèi)容大概如下:

{'media_sequence': 0,
 'is_variant': False,
 'is_endlist': True,
 'is_i_frames_only': False,
 'is_independent_segments': False,
 'playlist_type': 'vod',
 'playlists': [],
 'segments': [
{'duration': 2.667,
   'title': '',
   'uri':        'https://hey06.cjkypo.com/20211214/lIC8S3qZ1/1000kb/hls/MQJ9iKoM.ts',
   'cue_in': False,
   'cue_out': False,
   'cue_out_start': False,
   'scte35': None,
   'oatcls_scte35': None,
   'scte35_duration': None,
   'scte35_elapsedtime': None,
   'asset_metadata': None,
   'discontinuity': False,
   'dateranges': None,
   'gap_tag': None},
  {'duration': 1.667,
   'title': '',
   'uri': 'https://hey06.cjkypo.com/20211214/lIC83SqZ1/1000kb/hls/8LeDe7Wu.ts',
   'cue_in': False,
   'cue_out': False,
   'cue_out_start': False,
   'scte35': None,
   'oatcls_scte35': None,
   'scte35_duration': None,
   'scte35_elapsedtime': None,
   'asset_metadata': None,
   'discontinuity': False,
   'dateranges': None,
   'gap_tag': None},

........................

可以看出,顯示的內(nèi)容很多,但是實(shí)際上只有“https://”那個(gè)字符串有用。

我們現(xiàn)在要做的是先提取每一個(gè)帶“https”的字符串,然后還要提取出每個(gè)https字符串中的ts文件名。代碼如下:

order_ts = []
#將所有的帶https的url存入order_ts
for i in data["segments"]:
    order_ts.append(i["uri"])

#返回一個(gè)dict,將文件名作為key,將url作為value
def read_name_url():
    name_url = {}
    for url in order_ts:
        name = url.split("/")[-1]
        name_url[name] = url
    return name_url

這個(gè)dict內(nèi)容大概如下:

ts文件下載,python,python

按理說(shuō),這個(gè)結(jié)果已經(jīng)非常好了,但是我們還要進(jìn)一步處理下,為我們最后一步的合并ts文件作準(zhǔn)備。

list_name= read_name_url().keys()
file = open("order.m3u8", 'w')
for name in list_name:
    #file.write("file 'D:\\ProgramData\\study\\mov\\tsfiles\\" + name + "'")
    file.write(fr"file 'D:\ProgramData\study\mov\tsfiles\{name}'")
    file.write("\n")
file.close()

注意,python中字符串不能以 \ 結(jié)尾,因?yàn)楫?dāng)一行代碼太長(zhǎng)寫不下時(shí),可以反斜杠是用來(lái)連接多行代碼,所以不能用下面這種方法:

file.write(r"file 'D:\ProgramData\study\mov\tsfiles\" + name + "'")

上面的代碼會(huì)報(bào)錯(cuò)“EOL while scanning string literal”,可以用“fr”做為前綴的方式(見上面代碼,f代表format,r代碼不轉(zhuǎn)義)。

這個(gè)order.m3u8文件的內(nèi)容大概如下:

file 'D:\ProgramData\study\mov\tsfiles\MQJ9iKoM.ts'
file 'D:\ProgramData\study\mov\tsfiles\8LeDe7Wu.ts'
file 'D:\ProgramData\study\mov\tsfiles\WS72cnXO.ts'
file 'D:\ProgramData\study\mov\tsfiles\LXld1AUz.ts'
file 'D:\ProgramData\study\mov\tsfiles\Jc2FmbSf.ts'

...........

2.下載ts文件

ts文件很小,只有幾百k,所以一個(gè)完整的視頻會(huì)被分成幾千個(gè)ts文件,我們可以采用多線程的方式來(lái)下載:

import urllib
from concurrent.futures import ThreadPoolExecutor

def download(url,name):
    #下載ts文件到D:\ProgramData\study\mov\tsfiles文件夾
    urllib.request.urlretrieve(url,'D://ProgramData//study//mov//tsfiles//'+name)

def download_tsfile():
    #記錄創(chuàng)立的線程
    task_list = []
    dict_name_url = read_name_url()
    #線程池的創(chuàng)立 
    pool = ThreadPoolExecutor(max_workers=50)
    for name in dict_name_url:
        # 啟動(dòng)多個(gè)線程下載文件,download是函數(shù)名,后面兩個(gè)是參數(shù)值
        task_list.append(pool.submit(download, dict_name_url[name],name))
    # 判斷所有下載線程是否全部結(jié)束
    while (True):
        if len(task_list) == 0:
            break
        for i in task_list:
            if i.done():
                task_list.remove(i)
                print("剩下任務(wù)數(shù):{0}".format(len(task_list)))
    print("所有任務(wù)下載完成!")

下載完成后,就可以在tsfiles文件夾找到這些細(xì)小的文件:

ts文件下載,python,python

三、ffmpeg合并ts文件

有了前面兩步的鋪墊,現(xiàn)在要進(jìn)行最重要的一個(gè)步驟了,那就是按order.m3u8里面的順序,依次把這些ts文件合并起來(lái)。該怎么合并呢?

我們需要借助ffmpeg這個(gè)工具,這個(gè)工具非常強(qiáng)大,專門用來(lái)處理音頻、視頻切割、合并、編輯等,當(dāng)然也非常復(fù)雜。安裝這個(gè)軟件,可以點(diǎn)擊后面參考文章中的第二篇文章,這里不細(xì)說(shuō)。下面來(lái)說(shuō)說(shuō)怎么合并這些ts文件。

代碼非常簡(jiǎn)單:

import os

def mixTss(name):
    #string前面加上‘r’,是為了告訴編譯器這個(gè)string是個(gè)raw string,不要轉(zhuǎn)義 backslash '\' 。
    com = r'D:\\ffmpeg\\bin\\ffmpeg.exe -f concat -safe 0 -i D:\\ProgramData\\study\\mov\\order.m3u8 -c copy D:\\ProgramData\\study\\mov\\{}.mp4'.format(name)
    os.system(com)
    
mixTss("hello")
print("合并完成!")

可以看出上面的代碼中,最重要的就是執(zhí)行了一命令:

D:\ffmpeg\bin\ffmpeg.exe -f concat -safe 0 -i D:\ProgramData\study\mov\order.m3u8 -c copy D:\ProgramData\\study\\mov\\hello.mp4

ffmpeg很強(qiáng)大,但是也比較復(fù)雜,我也不是很懂這個(gè),大概解釋如下。

ffmpeg使用語(yǔ)法:

命令格式: ffmpeg -i [輸入文件名] [參數(shù)選項(xiàng)] -f [格式] [輸出文件] ffmpeg [[options][`-i' input_file]]... {[options] output_file}...?

具體一點(diǎn)來(lái)說(shuō):

1. -f concat,-f 一般設(shè)置輸出文件的格式,如-f psp(輸出psp專用格式),但是如果跟concat,則表示采用concat協(xié)議,對(duì)文件進(jìn)行連接合并。

2. -safe 0,用于忽略一些文件名錯(cuò)誤,如長(zhǎng)路徑、空格、非ANSIC字符

3. -i?D:\ProgramData\study\mov\order.m3u8,-i后面加輸入文件名,當(dāng)然也可以加輸入文件名組成的文件名,即order.m3u8,但是要滿足文件格式,即類似于下面這種:

file 'D:\ProgramData\study\mov\tsfiles\MQJ9iKoM.ts'
file 'D:\ProgramData\study\mov\tsfiles\8LeDe7Wu.ts'

4. -c copy D:\ProgramData\\study\\mov\\hello.mp4,-c表示輸出文件采用的編碼器,后面跟copy,表示直接復(fù)制,不重新編碼。

參考文章:

ts視頻下載 準(zhǔn)備下載視頻的你確定不進(jìn)來(lái)看看嗎_小王不頭禿的博客-CSDN博客_ts視頻下載

ffmpeg安裝教程_小王不頭禿的博客-CSDN博客_ffmpeg怎么安裝文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-808473.html

到了這里,關(guān)于Python批量下載ts視頻文件,并用ffmpeg合并的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 視頻防盜鏈下載,ffmpeg轉(zhuǎn)m3u8,ts實(shí)現(xiàn)視頻切片

    視頻防盜鏈下載,ffmpeg轉(zhuǎn)m3u8,ts實(shí)現(xiàn)視頻切片

    最近公司有個(gè)需求,要求付費(fèi)的大視頻防止下載,不卡頓功能。 優(yōu)先使用的是阿里的視頻點(diǎn)播,自己琢磨沒事干,網(wǎng)上很多電影視頻網(wǎng)站是如何做到的呢,然后就是各種搜,得到了一下結(jié)果 這個(gè)video標(biāo)簽的src地址是下載不了的,這下和電影網(wǎng)站的一樣了

    2023年04月26日
    瀏覽(13)
  • python合并ts視頻(三種方法)

    python合并ts視頻(三種方法)

    相關(guān)python代碼: 目前在使用該方法時(shí)還沒發(fā)現(xiàn)ts文件數(shù)量限制 該方法的缺陷: 文件夾下的所有ts文件都會(huì)被合并 文件夾下的ts文件的命名必須按照字母順序排列, 否則合并文件后視頻片段會(huì)產(chǎn)生混亂.(注意:名為‘10.ts’的文件的順序會(huì)排在名為\\\'9.ts\\\'文件的前面,也就是說(shuō),

    2024年02月05日
    瀏覽(16)
  • 通過(guò)FFmpeg 來(lái)篩選合并視頻文件的項(xiàng)目記錄

    項(xiàng)目需求 平臺(tái)通過(guò)http下發(fā)json格式的消息 程序收到消息后 根據(jù)日期時(shí)間戳去對(duì)應(yīng)的目錄檢索是否符合要求的文件 比如某個(gè)時(shí)間段 檢索到之后 將視頻片段拼接成一個(gè)完整的視頻文件? 沒有的話 根據(jù)時(shí)間戳判斷是否需要等待或者 返回沒有檢索到? 頭文件 cpp文件 Http服務(wù)用cp

    2024年02月15日
    瀏覽(11)
  • 爬蟲|Python|ts格式的加密視頻合并方法

    爬蟲|Python|ts格式的加密視頻合并方法

    對(duì)于爬蟲來(lái)說(shuō),沒有道德(比如,某些爬蟲上w的并發(fā),那么,一些小站可能就會(huì)崩潰,其實(shí)爬蟲也是可以作為網(wǎng)絡(luò)攻擊的,假設(shè)有需要攻擊的網(wǎng)站,上w甚至上百萬(wàn)的并發(fā)爬蟲持續(xù)攻擊,這個(gè)網(wǎng)站可能開不了),沒有知識(shí)產(chǎn)權(quán)(爬蟲行為本來(lái)就是無(wú)視知識(shí)產(chǎn)權(quán)的,例如,爬取

    2024年02月08日
    瀏覽(23)
  • 視頻爬蟲:解析m3u8文件 python m3u8庫(kù),m3u8文件中.ts視頻流的解密下載

    視頻爬蟲:解析m3u8文件 python m3u8庫(kù),m3u8文件中.ts視頻流的解密下載

    這里需要引用的庫(kù)是: from Crypto.Cipher import AES 有坑哈, python3.0 之后直接安裝crypto你會(huì)發(fā)現(xiàn)不管怎么著都會(huì)報(bào)錯(cuò)。 經(jīng)過(guò)查找資料找到了原因,原來(lái)是20年之后crypto已經(jīng)被pycryptohome替換掉啦, 如果之前安裝過(guò)crypyo 活pycrypto需要先卸載 然后再安裝 pycryptohome 就可以啦 首先我們需

    2024年02月14日
    瀏覽(30)
  • python使用ffmpeg合并多張圖片成視頻

    注意: 需要在本地有ffmpeg,并且配置環(huán)境變量 下載鏈接如下:https://download.csdn.net/download/qq_30273575/87898080 # FFmpeg 將多張圖片合成視頻 # 可以使用 FFmpeg 庫(kù)來(lái)將多張圖片合成視頻,下面是一個(gè)簡(jiǎn)單的示例: # 在代碼中,需要提供存儲(chǔ)圖片的文件夾路徑 images_path 和最終生成的視頻

    2024年02月11日
    瀏覽(31)
  • 一個(gè)小腳本,python調(diào)用ffmpeg 批量快速旋轉(zhuǎn)視頻

    輸入的旋轉(zhuǎn)角度為逆時(shí)針角度,如果要順時(shí)針旋轉(zhuǎn)90度,輸入270即可 路徑為存放視頻的根目錄,會(huì)自動(dòng)遍歷并旋轉(zhuǎn),生成后綴+01的新文件 目錄內(nèi)盡量不要存在非視頻文件,非視頻文件處理后可能會(huì)損壞.

    2024年02月16日
    瀏覽(33)
  • 深入解析,python合并多張圖片成視頻,可用于批量制作短視頻

    深入解析,python合并多張圖片成視頻,可用于批量制作短視頻

    隨著短視頻的興起,越來(lái)越多的人開始用各種形式進(jìn)行視頻制作,本篇博客從程序員的角度為大家解析一下如何通過(guò) Python 合并多個(gè)圖片為一個(gè)視頻 除了使用 OpenCV 合并多張圖片成視頻外,還可以使用其他工具和庫(kù),例如: moviepy : 這是一個(gè)基于 Python 的視頻編輯庫(kù),可以幫助

    2024年01月20日
    瀏覽(23)
  • 網(wǎng)絡(luò)視頻ts格式文件下載及將其合成單一視頻文件

    一些網(wǎng)站會(huì)將視頻分割成n個(gè)ts文件。 用貓抓chrome插件,抓取index.m3u8,可得到眾多ts文件下載地址。 可用迅雷打包下載ts文件以及index.m3u8文件,但有時(shí)會(huì)出現(xiàn)下載不了的情況,懷疑是請(qǐng)求報(bào)頭的問(wèn)題上。 若迅雷下載不了,則嘗試改用命令curl下載。 用以下Python腳本批量生成c

    2024年02月16日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包