m3u8 downloader v26.03.28
2026年3月29日 21:58
基于 ffmpeg 的 m3u8 / 归档页解析下载工具,支持单链接、批量 CSV/文本、自定义输出目录与 ffmpeg 路径。
| 参数 | 说明 |
|---|---|
-i |
输入:直链 m3u8、含 archives 的归档详情页、或带 cms_player 的播放页;也支持 .mp4 / .avi / .mov / .mpeg 直链(走 HTTP 分段下载,非 ffmpeg) |
-o |
输出文件名(自动补 .mp4);对部分模式用于覆盖默认标题名 |
-p |
输出目录;可为本机路径或 UNC(如 \\服务器\共享\目录) |
-f |
批量输入文件:.csv 或纯文本(每行一个链接) |
-m |
指定 ffmpeg 可执行文件路径 |
注意: 必须提供 -i 或 -f 之一。
python m3u8_downloader.py -i "https://example.com/video.m3u8?token=xxx" -o myvideo -p D:\Videos
- 编码建议 UTF-8(含 BOM 亦可),表头需包含列
link;可选列name(用于在部分逻辑里拼接输出名后缀,空单元格按空字符串处理,不会出现nan文件名)。 - 会跳过空的
link或内容为link的占位行。 - 按行 顺序执行:上一任务结束(含 ffmpeg)后才会处理下一行。
python m3u8_downloader.py -f list.csv -p "\\192.168.1.12\media\Videos"
每行一个 URL,行为与逐次 -i 类似;可通过 -o 传入统一输出名(视链接类型而定)。
.m3u8直链
使用 ffmpeg 拉流并 remux 为.mp4(-c copy)。- URL 中含
archives(归档站 / bl05 类页面)
请求页面,解析多个div.dplayer的data-config,得到多路 m3u8;按路依次下载,文件名一般为 页面标题 + 序号,并经safe_mp4_filename净化。 - 其它播放页(非 archives)
解析var cms_player = {...}的 JSON,取url作为 m3u8,再走 ffmpeg。 .mp4等直链
使用requests分段下载(file_download.download_from_url),带 tqdm 进度条,不经过 ffmpeg。
抓取 HTML 时依次尝试 UTF-8 → UTF-8-sig → gb18030,减轻标题乱码。
- 去除 Windows 非法字符,过长截断并可带 crc 后缀兜底。
- 对「UTF-8 被误当成 latin-1」类乱码标题做启发式纠正(日志中可能出现
[F] 标题疑似 UTF-8/latin-1 乱码,已尝试纠正)。
- 若目标
.mp4已存在(os.path.isfile),跳过该次下载。 - 调用 ffmpeg 时带
-n:不在终端交互询问覆盖;若因路径编码等导致检测不一致,ffmpeg 侧也会拒绝覆盖而非静默覆盖。
-f 指向 .m3u8 / .m3u 时,当前代码分支为占位(pass),尚未实现。
| 路径(相对程序目录) | 用途 |
|---|---|
bin/ffmpeg.exe |
Windows 打包/放置 ffmpeg 的常见位置 |
download/m3u8_files |
内部与 make_dir 相关的子目录逻辑 |
download/mp4 |
未指定 -p 时的默认输出目录 |
下载地址: