第一 找到m3u8文件的网址,教程: 超链接日后放上
第二 下载ffpmeg,下载教程: 链接日后放上
第三 上代码
import requests import os class Dingding(): ''' url: m3u8文件网址 请提前下载好ffmpeg应用 video_name: 视频名称 ''' def __init__(self,url,video_name): self.url = url # m3u8的网址 self.urls_name = 'Ding_m3u8_url.txt' # 存放网址的文件名 self.urls_path = Dingding.get_url(self) # 存放网址的文件名所在的路径 self.video_name = video_name # 最终视频的名字 # 获得m3u8,保存到当前文件夹下的网址.txt文件 def get_url(self): r = requests.get(self.url) with open(self.urls_name,'w') as f: # 保存到网址.txt f.write(r.text) path = os.getcwd() + f'\{self.urls_name}'# 路径 return path # 爬取每个网址的数据 def get_save_data(self): m = 1 # m表示第m个网址 with open(self.urls_path,'r') as f: # 读取网址文件 for line in f: # 遍历文件里的网址 if len(line) > 50: # 判断当网址为视频网址时 url = f'https://dtliving.alicdn.com/live_hp/{line.rstrip()}' # 注意用.rstrip()方法去掉\n这个字符,如果时打印出来时发现不了这个问题的 jindu = format(m/408,'.2%') # 百分比进度 print(f'正在下载第{m}个片段(进度{jindu})...') # 打印进度 r2 = requests.get(url) # 爬取数据 # r2.encoding = 'utf-8' # 如果数据乱码就解码 video_file_path = os.getcwd() + r'\video' if os.path.exists(video_file_path) == False: # 创建一个名叫video的文件夹用来存放一堆ts视频 os.mkdir(video_file_path) with open(fr'.\video\{m}.ts','wb', ) as f: # 保存到video文件夹里的ts文件,wb:覆盖写入 f.write(r2.content) # 写入数据 m += 1 Dingding.filelist(self) # 生成filelist Dingding.concat_video(self) # 合并为一个文件 # 生成ts路径,保存到filelist.txt ffmpeg合并视频时要用到 def filelist(self): files = os.listdir(os.getcwd() + r"\video") # 获取一堆.ts的文件名 files.sort(key=lambda x: int(x[:-3])) # 将文件名按数字大销排序 with open('filelist.txt', 'w') as f: # 创建filelist.txt文件 for file in files: ts_path = os.getcwd() + r"\video" + f'\{file}' data = f"file '{ts_path}'" # 写入的格式要符合规范 f.write(data) f.write('\n') # 再cmd端用ffmpeg执行ts合并为mp4命令 def concat_video(self): '''' video_file_name: 存放一堆ts视频的文件夹名称 ''' print('合并视频中...') # 一:进入video文件夹,二:合并文件夹里的ts视频,保存再video文件夹里 order = fr'cd video && ffmpeg -f concat -safe 0 -i ..\filelist.txt -c copy {self.video_name}.mp4' os.system(order) if __name__ == '__main__': url = 'https://dtliving.alicdn.com/live_hp/5218c5f5-aee1-495c-b213-ef7a48812936_merge.m3u8' dingding = Dingding(url,'回放') # url是m3u8的网址,'回放'是爬取视频的名称 dingding.get_save_data() # 爬取视频并保存再vedio文件夹里运行完代码会发现,视频就出现在当前路径的video文件夹里。