Python合并ts文件至mp4格式及解密教程詳解
m3u8是什么格式?m3u8是蘋(píng)果公司推出的視頻播放標(biāo)準(zhǔn),是m3u的一種,只是編碼格式采用的是UTF-8。
使用m3u8格式文件主要因?yàn)榭梢詫?shí)現(xiàn)多碼率視頻的適配,視頻網(wǎng)站可以根據(jù)用戶(hù)的網(wǎng)絡(luò)帶寬情況,自動(dòng)為客戶(hù)端匹配一個(gè)合適的碼率文件進(jìn)行播放,從而保證視頻的流暢度。

m3u8準(zhǔn)確來(lái)說(shuō)是一種索引文件,使用m3u8文件實(shí)際上是通過(guò)它來(lái)解析對(duì)應(yīng)的放在服務(wù)器上的視頻網(wǎng)絡(luò)地址,從而實(shí)現(xiàn)在線(xiàn)播放。
它將視頻切割成一小段一小段的ts格式的視頻文件,然后存在服務(wù)器中(現(xiàn)在為了減少I(mǎi)/o訪(fǎng)問(wèn)次數(shù),一般存在服務(wù)器的內(nèi)存中),通過(guò)m3u8解析出來(lái)路徑,然后去請(qǐng)求。
合并 ts 文件其實(shí)有很多種方法,有一些教程直接使用 cmd 的 copy 命令直接合并 ts 文件:
copy /b movie*.ts movie_new.ts
這個(gè)方法雖然可以合并,但是無(wú)法轉(zhuǎn)化為 mp4 格式,而且也有可能出現(xiàn)視頻缺損的情況。因此本文將講解如何使用 ffmpeg 合并 ts 文件為mp4格式,使用 ffmpeg 也能有效防止視頻出現(xiàn)缺損的問(wèn)題。
1.準(zhǔn)備
開(kāi)始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上
如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda
安裝ffmpeg
Mac (打開(kāi)終端(Terminal), 用 homebrew 安裝):
brew install ffmpeg --with-libvorbis --with-sdl2 --with-theora
Linux:
apt-get install ffmpeg libavcodec-extra
Windows:
1. 進(jìn)入 http://ffmpeg.org/download.html#build-windows,點(diǎn)擊 windows 對(duì)應(yīng)的圖標(biāo),進(jìn)入下載界面點(diǎn)擊 download 下載按鈕,
2. 解壓下載好的zip文件到指定目錄
3. 將解壓后的文件目錄中 bin 目錄(包含 ffmpeg.exe )添加進(jìn) path 環(huán)境變量中
4. DOS 命令行輸入 ffmpeg -version, 出現(xiàn)以下界面說(shuō)明安裝完成:

2.簡(jiǎn)單合并ts文件
使用 ffmpeg 合并一些 ts 文件非常簡(jiǎn)單,你只需要在終端輸入一行命令即可:
ffmpeg -f concat -i file_list.txt -c copy output.mp4
其中 file_list.txt 為如下格式文本文件:
file 'input1.ts'
file 'input2.ts'
file 'input3.ts'
我們可以用 Python 腳本生成這個(gè) file_list.txt:
import os
filePath = "你的ts視頻存放路徑"
file_list = sorted(os.listdir(filePath))
with open("你的ts視頻存放路徑/file_list.txt","w+") as f:
for file in file_list:
f.write("file '{}'\n".format(file))
注意,這個(gè) file_list.txt 需要和你的 ts 視頻存放在同一個(gè)目錄下,然后 cd 進(jìn)入此目錄,并執(zhí)行上面提到過(guò)的 ffmpeg 合并轉(zhuǎn)換命令:
ffmpeg -f concat -i file_list.txt -c copy output.mp4
3.解密處理
上面我們講的是沒(méi)有經(jīng)過(guò)加密的 ts 文件,這些文件下載后直接可以播放,但經(jīng)過(guò)AES-128加密后的文件下載后會(huì)無(wú)法播放,所以還需要進(jìn)行解密。
如何判斷是否需要加密?觀察視頻網(wǎng)站是否有m3u8的文件傳輸,下載下來(lái)并打開(kāi):
#EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:13 #EXT-X-MEDIA-SEQUENCE:0 //這里是注釋?zhuān)鎸?shí)文件里不會(huì)有的, //看看你的m3u8文件里有沒(méi)有這一行,如果有的話(huà),這個(gè)m3u8文件是加密的,請(qǐng)繼續(xù)往下看 //如果沒(méi)有這行的話(huà),特別是沒(méi)有這個(gè)#EXT-X-KEY,那么恭喜你,這個(gè)m3u8沒(méi)有加密,你直接按本文教程第二點(diǎn)合并即可 #EXT-X-KEY:METHOD=AES-128,URI="http://www.example.com/20180125/key.key" #EXTINF:12.5, //下面的這個(gè)其實(shí)才是視頻真正的地址,你放在瀏覽器地址欄上直接回車(chē)是可以直接下載的 //不過(guò)這樣的鏈接在m3u8文件里會(huì)有很多,建議使用工具下載(迅雷)、ffmpeg、vlc等 //這里還可能出現(xiàn)GBDYO3576000.ts這種情況,其實(shí)是把前面的路徑省略了,可根據(jù)m3u8文件的路徑自行加上 http://www.example.com/20180125/GBDYO3576000.ts #EXTINF:12.5, http://www.example.com/20180125/GBDYO3576001.ts #EXTINF:12.5, http://www.example.com/20180125/GBDYO3576002.ts
如果你的文件是加密的,那么你還需要一個(gè)key文件,Key文件下載的方法和m3u8文件類(lèi)似,如下所示 key.key 就是我們需要下載的 key 文件,并注意這里 m3u8 有2個(gè),需要使用的是像上面一樣存在 ts 文件超鏈接的 m3u8 文件:
下載所有 ts 文件,將下載好的所有的 ts 文件、m3u8、key.key 放到一個(gè)文件夾中,將 m3u8 文件改名為 index.m3u8,將 key.key 改名為 key.m3u8 。更改 index.m3u8 里的 URL,變?yōu)槟惚镜芈窂降?key 文件,將所有 ts 也改為你本地的路徑,如下所示:
#EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:13 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-KEY:METHOD=AES-128,URI="e:/20180125/key.m3u8" #EXTINF:12.5, e:/20180125/GBDYO3576000.ts #EXTINF:12.5, e:/20180125/GBDYO3576001.ts #EXTINF:12.5, e:/20180125/GBDYO3576002.ts
然后用ffmpeg進(jìn)行合并:
ffmpeg -allowed_extensions ALL -i index.m3u8 -c copy new.mp4
這樣就大功告成了!我們成功解密并使用 ffmpeg 合并了這些 ts 視頻片段,實(shí)際應(yīng)用場(chǎng)景可能和這不一樣,希望我們這篇文章能起到拋磚引玉的作用。
到此這篇關(guān)于Python合并ts文件至mp4格式及解密教程的文章就介紹到這了,更多相關(guān)Python合并ts文件至mp4內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python 實(shí)現(xiàn)圖片旋轉(zhuǎn) 上下左右 180度旋轉(zhuǎn)的示例
今天小編就為大家分享一篇python 實(shí)現(xiàn)圖片旋轉(zhuǎn) 上下左右 180度旋轉(zhuǎn)的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
python grpc實(shí)現(xiàn)異步調(diào)用(不用grpc異步接口)
grpc同步調(diào)用更簡(jiǎn)單,但是在處理復(fù)雜任務(wù)時(shí),會(huì)導(dǎo)致請(qǐng)求阻塞,影響吞吐,本文主要介紹了python grpc實(shí)現(xiàn)異步調(diào)用,不用grpc異步接口,具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04
Python matplotlib 繪制雙Y軸曲線(xiàn)圖的示例代碼
Matplotlib是非常強(qiáng)大的python畫(huà)圖工具,這篇文章主要介紹了Python matplotlib 繪制雙Y軸曲線(xiàn)圖,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06
Python利用lxml模塊爬取豆瓣讀書(shū)排行榜的方法與分析
這篇文章主要給大家介紹了關(guān)于Python爬蟲(chóng)利用lxml模塊爬取豆瓣讀書(shū)排行榜的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
python進(jìn)行數(shù)據(jù)合并concat/merge
這篇文章主要介紹了python進(jìn)行數(shù)據(jù)合并concat/merge,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-09-09
python中count函數(shù)簡(jiǎn)單的實(shí)例講解
在本篇文章里小編給大家整理了關(guān)于python中count函數(shù)簡(jiǎn)單的實(shí)例講解,有興趣的朋友們可以參考下。2020-02-02
Python基于pygame實(shí)現(xiàn)單機(jī)版五子棋對(duì)戰(zhàn)
這篇文章主要為大家詳細(xì)介紹了Python基于pygame實(shí)現(xiàn)單機(jī)版五子棋對(duì)戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12
Python實(shí)現(xiàn)向PPT中插入表格與圖片的方法詳解
這篇文章將帶大家學(xué)習(xí)一下如何在PPT中插入表格與圖片以及在表格中插入內(nèi)容,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-05-05

