网站开发打不开子网页,长春seo排名扣费,高级营销网站建设只需1200元,没网站怎么做二维码扫描连接在这个数字时代#xff0c;我们经常在网页上遇到各种精彩的视频#xff0c;但往往只能观看而无法下载。今天#xff0c;我将向大家介绍如何使用 Python 自动下载网页中的 M3U8 链接#xff0c;并将其转换为 MP4 格式#xff0c;让你轻松保存喜欢的视频#xff01;
一、准…在这个数字时代我们经常在网页上遇到各种精彩的视频但往往只能观看而无法下载。今天我将向大家介绍如何使用 Python 自动下载网页中的 M3U8 链接并将其转换为 MP4 格式让你轻松保存喜欢的视频
一、准备工作
首先确保你已经安装了 ffmpeg。如果还没有安装可以通过以参考这里安装https://wizops.net/archives/202404/323.html
二、代码流程
下载 M3U8 文件保存到临时目录。下载 key 文件保存到临时目录。生成本地 M3U8 文件内容保存到临时目录。下载 ts 文件保存到临时目录下的index目录。 使用ffmpeg将m3u8转换成mp4文件
三、代码实现
import os
import urllib3
import requests
import subprocess
from m3u8 import M3U8
from tenacity import retry, wait_random, stop_after_attempt
from gevent.pool import Pool
urllib3.disable_warnings()pool Pool(10)retry(stopstop_after_attempt(3), waitwait_random(2, 5))
def request(url):发送请求try:res requests.get(url, verifyFalse, timeout5)return resexcept Exception as e:print(url, e)raise edef download_segment(url, path):下载ts文件filename url.split(/)[-1]file os.path.join(path, filename)if os.path.exists(file):return res request(url)with open(file, wb)as f:f.write(res.content)def convert_mp4(path, output):# 使用FFmpeg将local.m3u8转换为一个MP4文件 ffmpeg -allowed_extensions ALL -i index.m3u8 -c copy xxx.mp4# m3u8文件中有key需要带参数-allowed_extensions ALLsubprocess.call([ffmpeg, -allowed_extensions, ALL, -i, local.m3u8, -c, copy, output], cwdpath)def download_m3u8(url, path, output):下载单个m3u8主程序url: m3u8链接urlpath: 单个m3u8目录output: 转换输出文件路径名base_url url.rsplit(/, 1)[0]# 创建目录segment_dir os.path.join(path, index)if not os.path.exists(segment_dir):os.makedirs(segment_dir)# 下载M3U8文件m3u8_file_name os.path.join(path, index.m3u8)res request(url)with open(m3u8_file_name, w, encodingutf-8)as f:f.write(res.text)# 解析M3U8文件m3u8_obj M3U8(res.text)print(m3u8_obj.keys)# 下载key文件 for item in m3u8_obj.keys:if item:key_url item.uri if item.uri.startwith(http) else f{base_url}/{item.uri}key_file_name os.path.join(path, item.uri)res request(key_url)with open(key_file_name, w, encodingutf-8)as f:f.write(res.text)segments []# 生成新的本地M3U8文件内容for segment in m3u8_obj.segments:segments.append(segment.uri)segment.uri index/ segment.uri.split(/)[-1]# 保存M3U8文件local_file_name os.path.join(path, local.m3u8)with open(local_file_name, w) as f:f.write(m3u8_obj.dumps())# 下载ts文件for url in segments:pool.spawn(download_segment, url, segment_dir)pool.join()# ts文件下载完成, 转换成mp4文件if len(segments) len(os.listdir(segment_dir)):convert_mp4(path, output)if __name__ __main__:url https://v3.mstopq.com/202302/26/E92zcVVNkT1/video/1000k_0X720_64k_25/hls/index.m3u8cur_path os.path.abspath(os.path.dirname(__file__))path os.path.join(cur_path, 终结者创世纪_tmp)output os.path.join(cur_path, 终结者创世纪.mp4)download_m3u8(url, path, output)
三、注意事项
确保已经安装了 ffmpeg并且在系统路径中可以访问到。输出路径必须存在否则可能会出现错误。根据实际情况可能需要根据 M3U8 文件的具体内容调整 ffmpeg 命令的参数。
通过这个简单的示例你可以使用 Python 自动下载网页中的 M3U8 链接并将其转换为 MP4 格式。现在你可以轻松保存喜欢的视频随时随地观看啦希望这个技巧对你有所帮助。如果有任何问题或建议欢迎在评论中留言