什么是m3u8格式? Python合并ts文件至mp4格式及解密教程
m3u8是什么格式?m3u8是蘋果公司推出的視頻播放標準,是m3u的一種,只是編碼格式采用的是UTF-8。
使用m3u8格式文件主要因為可以實現(xiàn)多碼率視頻的適配,視頻網(wǎng)站可以根據(jù)用戶的網(wǎng)絡(luò)帶寬情況,自動為客戶端匹配一個合適的碼率文件進行播放,從而保證視頻的流暢度。
m3u8準確來說是一種索引文件,使用m3u8文件實際上是通過它來解析對應的放在服務器上的視頻網(wǎng)絡(luò)地址,從而實現(xiàn)在線播放。
它將視頻切割成一小段一小段的ts格式的視頻文件,然后存在服務器中(現(xiàn)在為了減少I/o訪問次數(shù),一般存在服務器的內(nèi)存中),通過m3u8解析出來路徑,然后去請求。
合并 ts 文件其實有很多種方法,有一些教程直接使用 cmd 的 copy 命令直接合并 ts 文件:
這個方法雖然可以合并,但是無法轉(zhuǎn)化為 mp4 格式,而且也有可能出現(xiàn)視頻缺損的情況。因此本文將講解如何使用 ffmpeg 合并 ts 文件為mp4格式,使用 ffmpeg 也能有效防止視頻出現(xiàn)缺損的問題。
1.準備
開始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒有,可以訪問這篇文章:超詳細Python安裝指南 進行安裝。
(可選1) 如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda:Python數(shù)據(jù)分析與挖掘好幫手—Anaconda,它內(nèi)置了Python和pip.
(可選2) 此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點:Python 編程的最好搭檔—VSCode 詳細指南。
安裝ffmpeg
Mac (打開終端(Terminal), 用 homebrew 安裝):
Linux:
Windows:
1. 進入 http://ffmpeg.org/download.html#build-windows,點擊 windows 對應的圖標,進入下載界面點擊 download 下載按鈕,
2. 解壓下載好的zip文件到指定目錄
3.將解壓后的文件目錄中 bin 目錄(包含 ffmpeg.exe )添加進 path 環(huán)境變量中
4. DOS 命令行輸入 ffmpeg -version, 出現(xiàn)以下界面說明安裝完成:
2.簡單合并ts文件
使用 ffmpeg 合并一些 ts 文件非常簡單,你只需要在終端輸入一行命令即可:
其中 file_list.txt 為如下格式文本文件:
我們可以用 Python 腳本生成這個 file_list.txt:
注意,這個 file_list.txt 需要和你的 ts 視頻存放在同一個目錄下,然后 cd 進入此目錄,并執(zhí)行上面提到過的 ffmpeg 合并轉(zhuǎn)換命令:
3.解密處理
上面我們講的是沒有經(jīng)過加密的 ts 文件,這些文件下載后直接可以播放,但經(jīng)過AES-128加密后的文件下載后會無法播放,所以還需要進行解密。
如何判斷是否需要加密?觀察視頻網(wǎng)站是否有m3u8的文件傳輸,下載下來并打開:
如果你的文件是加密的,那么你還需要一個key文件,Key文件下載的方法和m3u8文件類似,如下所示 key.key 就是我們需要下載的 key 文件,并注意這里 m3u8 有2個,需要使用的是像上面一樣存在 ts 文件超鏈接的 m3u8 文件:
下載所有 ts 文件,將下載好的所有的 ts 文件、m3u8、key.key 放到一個文件夾中,將 m3u8 文件改名為 index.m3u8,將 key.key 改名為 key.m3u8 。更改 index.m3u8 里的 URL,變?yōu)槟惚镜芈窂降?key 文件,將所有 ts 也改為你本地的路徑,如下所示:
然后用ffmpeg進行合并:
這樣就大功告成了!我們成功解密并使用 ffmpeg 合并了這些 ts 視頻片段,實際應用場景可能和這不一樣,希望我們這篇文章能起到拋磚引玉的作用。