Python合並ts文件至mp4格式及解密教程詳解
m3u8是什麼格式?m3u8是蘋果公司推出的視頻播放標準,是m3u的一種,隻是編碼格式采用的是UTF-8。
使用m3u8格式文件主要因為可以實現多碼率視頻的適配,視頻網站可以根據用戶的網絡帶寬情況,自動為客戶端匹配一個合適的碼率文件進行播放,從而保證視頻的流暢度。
m3u8準確來說是一種索引文件,使用m3u8文件實際上是通過它來解析對應的放在服務器上的視頻網絡地址,從而實現在線播放。
它將視頻切割成一小段一小段的ts格式的視頻文件,然後存在服務器中(現在為瞭減少I/o訪問次數,一般存在服務器的內存中),通過m3u8解析出來路徑,然後去請求。
合並 ts 文件其實有很多種方法,有一些教程直接使用 cmd 的 copy 命令直接合並 ts 文件:
copy /b movie*.ts movie_new.ts
這個方法雖然可以合並,但是無法轉化為 mp4 格式,而且也有可能出現視頻缺損的情況。因此本文將講解如何使用 ffmpeg 合並 ts 文件為mp4格式,使用 ffmpeg 也能有效防止視頻出現缺損的問題。
1.準備
開始之前,你要確保Python和pip已經成功安裝在電腦上
如果你用Python的目的是數據分析,可以直接安裝Anaconda
安裝ffmpeg
Mac (打開終端(Terminal), 用 homebrew 安裝):
brew install ffmpeg –with-libvorbis –with-sdl2 –with-theora
Linux:
apt-get install ffmpeg libavcodec-extra
Windows:
1. 進入 http://ffmpeg.org/download.html#build-windows,點擊 windows 對應的圖標,進入下載界面點擊 download 下載按鈕,
2. 解壓下載好的zip文件到指定目錄
3. 將解壓後的文件目錄中 bin 目錄(包含 ffmpeg.exe )添加進 path 環境變量中
4. DOS 命令行輸入 ffmpeg -version, 出現以下界面說明安裝完成:
2.簡單合並ts文件
使用 ffmpeg 合並一些 ts 文件非常簡單,你隻需要在終端輸入一行命令即可:
ffmpeg -f concat -i file_list.txt -c copy output.mp4
其中 file_list.txt 為如下格式文本文件:
file ‘input1.ts’
file ‘input2.ts’
file ‘input3.ts’
我們可以用 Python 腳本生成這個 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))
註意,這個 file_list.txt 需要和你的 ts 視頻存放在同一個目錄下,然後 cd 進入此目錄,並執行上面提到過的 ffmpeg 合並轉換命令:
ffmpeg -f concat -i file_list.txt -c copy output.mp4
3.解密處理
上面我們講的是沒有經過加密的 ts 文件,這些文件下載後直接可以播放,但經過AES-128加密後的文件下載後會無法播放,所以還需要進行解密。
如何判斷是否需要加密?觀察視頻網站是否有m3u8的文件傳輸,下載下來並打開:
#EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:13 #EXT-X-MEDIA-SEQUENCE:0 //這裡是註釋,真實文件裡不會有的, //看看你的m3u8文件裡有沒有這一行,如果有的話,這個m3u8文件是加密的,請繼續往下看 //如果沒有這行的話,特別是沒有這個#EXT-X-KEY,那麼恭喜你,這個m3u8沒有加密,你直接按本文教程第二點合並即可 #EXT-X-KEY:METHOD=AES-128,URI="http://www.example.com/20180125/key.key" #EXTINF:12.5, //下面的這個其實才是視頻真正的地址,你放在瀏覽器地址欄上直接回車是可以直接下載的 //不過這樣的鏈接在m3u8文件裡會有很多,建議使用工具下載(迅雷)、ffmpeg、vlc等 //這裡還可能出現GBDYO3576000.ts這種情況,其實是把前面的路徑省略瞭,可根據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
如果你的文件是加密的,那麼你還需要一個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,變為你本地路徑的 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進行合並:
ffmpeg -allowed_extensions ALL -i index.m3u8 -c copy new.mp4
這樣就大功告成瞭!我們成功解密並使用 ffmpeg 合並瞭這些 ts 視頻片段,實際應用場景可能和這不一樣,希望我們這篇文章能起到拋磚引玉的作用。
到此這篇關於Python合並ts文件至mp4格式及解密教程的文章就介紹到這瞭,更多相關Python合並ts文件至mp4內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- ffmpeg網頁視頻流m3u8 ts實現視頻下載
- Python爬蟲之m3u8文件裡提取小視頻的正確姿勢
- Python實戰之多種音樂格式批量轉換
- FFmpeg Principle學習open_output_file打開輸出文件
- Python 如何利用ffmpeg 處理視頻素材