python將下載到本地m3u8視頻合成MP4的代碼詳解
代碼如下所示:
import os
import requests
import datetime
from Crypto.Cipher import AES
def decode_key_file(key_file_name):
with open(key_file_name,"r") as f:
data=f.read()
return data
def decode_m_file(m_file_name):
with open(m_file_name,"r") as f:
data=f.read()
return data.split("\n")[6::2]
def decode_video(filename):
data_list=[[],[],[]]
file_list=os.listdir(filename)
for one_file_name in file_list:
if "m3u8" in one_file_name:
data_list[0].append(filename+"/"+one_file_name)
elif "key" in one_file_name:
data_list[1].append(filename + "/" + one_file_name)
else:
data_list[2].append(filename + "/" + one_file_name)
key=decode_key_file(data_list[1][0])
name_list=decode_m_file(data_list[0][0])
for one_name in name_list:
for path_name in data_list[2]:
if one_name in path_name:
with open(path_name,"rb") as f:
data_name=f.read()
if len(key): # AES 解密
cryptor = AES.new(key, AES.MODE_CBC, key)
with open(key + ".mp4", 'ab') as f:
f.write(cryptor.decrypt(data_name))
if __name__ == '__main__':
decode_video("./data")
視頻下載下來(lái)如下圖所示

https://ngmov.me/?channelCode=ngdl50
這個(gè)應(yīng)用下載下來(lái)的視頻就是這樣的解法

改進(jìn)版本
def decode_key_file(key_file_name):
with open(key_file_name, "r") as f:
data = f.read()
return data
def decode_m_file(m_file_name):
with open(m_file_name, "r") as f:
data = f.read()
return data.split("\n")[6::2]
def decode_video(filename):
data_list = [[], [], []]
file_list = os.listdir(filename)
for one_file_name in file_list:
if "m3u8" in one_file_name:
data_list[0].append(filename + "/" + one_file_name)
elif "key" in one_file_name:
data_list[1].append(filename + "/" + one_file_name)
else:
data_list[2].append(filename + "/" + one_file_name)
try:
key = decode_key_file(data_list[1][0])
except:
key = one_file_name
name_list = decode_m_file(data_list[0][0])
for one_name in name_list:
for path_name in data_list[2]:
if one_name in path_name:
with open(path_name, "rb") as f:
data_name = f.read()
if len(key): # AES 解密
cryptor = AES.new(key, AES.MODE_CBC, key)
with open(key + ".mp4", 'ab') as f:
f.write(cryptor.decrypt(data_name))
else:
with open(key + ".mp4", 'ab') as f:
f.write(data_name)
f.flush()
if __name__ == '__main__':
data_list = os.listdir("/home/dfy/Videos/Download")
index=0
for path_one in data_list:
index+=1
if index<18:
continue
decode_video("/home/dfy/Videos/Download" + "/" + path_one)
到此這篇關(guān)于python將下載到本地m3u8視頻合成MP4的代碼詳解的文章就介紹到這了,更多相關(guān)python把m3u8視頻合成MP4內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python實(shí)現(xiàn)m3u8格式轉(zhuǎn)換為mp4視頻格式
- python3.6根據(jù)m3u8下載mp4視頻
- python爬取m3u8連接的視頻
- python 實(shí)現(xiàn)多線程下載m3u8格式視頻并使用fmmpeg合并
- python爬取基于m3u8協(xié)議的ts文件并合并
- 利用python爬取m3u8格式視頻的具體實(shí)現(xiàn)
- Python通過(guò)m3u8文件下載合并ts視頻的操作
- Python解析m3u8拼接下載mp4視頻文件的示例代碼
- Python爬蟲(chóng)之m3u8文件里提取小視頻的正確姿勢(shì)
- python基于?Web?實(shí)現(xiàn)?m3u8?視頻播放的實(shí)例
相關(guān)文章
Python操作word常見(jiàn)方法示例【win32com與docx模塊】
這篇文章主要介紹了Python操作word常見(jiàn)方法,結(jié)合實(shí)例形式分析了Python使用win32com模塊與docx模塊操作word的相關(guān)實(shí)現(xiàn)技巧及相關(guān)注意事項(xiàng),需要的朋友可以參考下2018-07-07
Django多數(shù)據(jù)庫(kù)聯(lián)用實(shí)現(xiàn)方法解析
這篇文章主要介紹了Django多數(shù)據(jù)庫(kù)聯(lián)用實(shí)現(xiàn)方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
python實(shí)現(xiàn)比較兩段文本不同之處的方法
這篇文章主要介紹了python實(shí)現(xiàn)比較兩段文本不同之處的方法,涉及Python針對(duì)文本與字符串的相關(guān)操作技巧,需要的朋友可以參考下2015-05-05
pytorch + visdom CNN處理自建圖片數(shù)據(jù)集的方法
這篇文章主要介紹了pytorch + visdom CNN處理自建圖片數(shù)據(jù)集的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-06-06

