網絡視頻m3u8解密及ts文件合並
參考了兩篇博客:
https://blog.csdn.net/weixin_41624645/article/details/95939510
https://blog.csdn.net/u014484783/article/details/79350392
再加上了自己的辦法寫的更詳細了一點:
直接用ffmpeg下載是排隊逐個下載,嫌慢就寫了個腳本多線程下載能快一些,,然后用ffmpeg合並ts文件。
進入chrome開發者模式,然后Network選項卡,如果文件已經加載就刷新下頁面,可以看到以下文件列表:
需要下載兩個文件:.m3u8 文件和 .key 文件(一般名稱為:index.m3u8 和 key.key )
注:.ts文件就是視頻文件。
上面所示,index.m3u8有兩個同名文件,都下載下來看看哪個文件有下面的信息就用那個,文件名稱改為 index.m3u8。
#EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:13 #EXT-X-MEDIA-SEQUENCE:0 //這里是注釋,真實文件里不會有的, //看看你的m3u8文件里有沒有這一行,如果有的話,那么恭喜你這個m3u8文件是加密的,請繼續往下看 //如果沒有這行的話,特別是沒有這個#EXT-X-KEY,那么同樣恭喜你,這個m3u8沒有加密,你直接百度vlc下載合並就行,也可根據本文章進行合並 #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文件。將下載好的所有的ts文件、index.m3u8、key.key放到一個文件夾中。
將URI改為你本地路徑的key文件(同目錄下直接填寫key.key),將所有ts也改為你本地的路徑(同目錄下ts直接文件名,省略目錄名)。
#EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:13 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-KEY:METHOD=AES-128,URI="/home/user/xxx/key.key" #EXTINF:12.5, /home/user/movie/GBDYO3576000.ts #EXTINF:12.5, /home/user/movie/GBDYO3576001.ts #EXTINF:12.5, /home/user/movie/GBDYO3576002.ts
接下來還需要下載一款工具ffmpeg,下載Static的那個版本就可以,安裝完成之后重啟。
重啟之后打開你index.m3u8所在的文件執行
ffmpeg -allowed_extensions ALL -i index.m3u8 -c copy out.mp4
如果報錯了執行
ffmpeg -allowed_extensions ALL -protocol_whitelist "file,http,crypto,tcp" -i index.m3u8 -c copy out.mp4
如果這里報錯了,那么打開你的index.m3u8文件,修改URI的路徑為網絡路徑(你下載時的路徑),然后執行
ffmpeg -protocol_whitelist "file,http,crypto,tcp" -i index.m3u8 -c copy out.ts
【ffmpeg網絡下載】
注意:下面就是直接用ffmpeg 從網絡下載合並,不過單線程排隊下載太慢,不知道有沒有並行下載命令沒研究過
ffmpeg -i "http://www.example.com/index.m3u8" -c copy out.ts
【我的方法】
是一般腳本執行把所有ts文件下載到本地目錄。
將 index.m3u8 和 key.key 文件放到 ts 文件所在目錄下,用下面命令解密合並:
ffmpeg -allowed_extensions ALL -protocol_whitelist "file,http,crypto,tcp" -i index.m3u8 -c copy out.mp4