N_m3u8DL-RE 流媒体下载完整指南:m3u8 与 DASH 加密内容怎么下
【免费下载链接】N_m3u8DL-RECross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文.项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE
在线课程只能在网页里看,直播一结束画面就没了——这是很多人绕不开的两个麻烦。N_m3u8DL-RE 流媒体下载工具解决的就是这类问题:把 DASH(.mpd)、HLS(.m3u8)、MSS(.ism)三种协议的点播和直播内容完整落到本地,加密流也能处理。本文按你实际要办的事来讲,不堆功能清单。
它是什么
N_m3u8DL-RE 是一个跨平台(Windows / Linux / macOS)的开源命令行下载器,MIT 协议,界面支持简体中文、繁體中文和英文。和普通"看到直链就保存"的下载工具不同,它先解析播放列表或 manifest,再按你的条件挑选视频、音频、字幕轨道,然后拉取分片、解密、合并、混流,全程在终端里完成。对需要归档课程、录制赛事直播、保存加密流的场景,这套流水线正好够用。
3 分钟完成首次下载
假设机器上已有 .NET SDK,最短路径是克隆仓库并构建:
git clone https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE cd N_m3u8DL-RE dotnet build src/N_m3u8DL-RE.sln -c Release dotnet publish src/N_m3u8DL-RE/N_m3u8DL-RE.csproj -c Release -o ./bin然后一条最简命令跑通第一个任务:
./bin/N_m3u8DL-RE "https://example.com/video.m3u8" --save-dir "./downloads"拿到 .m3u8 或 .mpd 地址,工具就会自己识别协议、拉取分片并合并输出,不用指定画质。如果这一步顺利,后面的内容都是在这个基础上加参数。
按需求使用:离线、直播、加密
离线视频下载(DASH / HLS 点播)
想精确控制取哪条轨道时,用--select-video、--select-audio这类正则筛选参数:
N_m3u8DL-RE "https://example.com/video.mpd" \ --select-video best \ --select-audio "lang=zh:for=best" \ --select-subtitle "name=中文:for=all" \ --mux-after-done format=mp4 \ --save-dir "./courses"--select-video best表示在所有视频流里选码率最高的一条,也可以写成res="1920x"这类正则挑特定分辨率;--select-audio同理,lang=zh匹配中文音轨。--mux-after-done format=mp4(或 mkv)会在下载完成后把分离的音视频混成单个文件,混流器默认用 ffmpeg。多轨道同时下载时,加--save-pattern "<SaveName>_<Resolution>"可以让文件名带上分辨率等变量,避免互相覆盖。
直播流录制
把直播地址作为输入,工具识别出是直播后就会持续拉取分片,直到你手动停止:
N_m3u8DL-RE "https://example.com/live/index.m3u8" \ --select-video best --select-audio best \ --live-real-time-merge \ --live-record-limit 02:00:00 \ --save-dir "./live"--live-real-time-merge开启边下边合并,录完直接得到完整文件;--live-record-limit 02:00:00限定录制两小时后自动收尾;分片默认会保留(--live-keep-segments默认开启),需要留分片重剪时正合适,想省空间就设成 false。另外--live-wait-time可以手动设定直播列表的刷新间隔,--live-take-count控制开头一次性回拉多少分片(默认 16)。
加密 m3u8 / mpd 怎么下
拿到密钥后,用--key以 KID:KEY 的形式传入,多个密钥对可以重复写:
N_m3u8DL-RE "https://example.com/enc.mpd" \ --key "KID1:KEY1" --key "KID2:KEY2" \ --decryption-engine FFMPEG \ --save-dir "./dec"工具默认用 mp4decrypt 做解密(--decryption-engine可切到 FFMPEG 或 SHAKA_PACKAGER)。第三方工具不在 PATH 里时,用--decryption-binary-path指定可执行文件的完整路径。HLS 场景下密钥写在播放列表里的情况一般能自动处理;遇到特殊加密方式,还可以用--custom-hls-method、--custom-hls-key、--custom-hls-iv手动指定算法与密钥。
高频参数速查
| 参数 | 用途 | 示例 |
|---|---|---|
--thread-count | 分片下载线程数,默认取本机 CPU 线程数 | --thread-count 16 |
--auto-select | 不写筛选条件时自动选各类最佳轨道 | --auto-select |
-sv/--select-video | 正则选视频流 | --select-video "res=1920x" |
-sa/--select-audio | 正则选音频流 | --select-audio "lang=en" |
-ss/--select-subtitle | 正则选字幕流 | --select-subtitle all |
-M/--mux-after-done | 完成后混流并指定容器 | --mux-after-done format=mkv |
--key | 传入 KID:KEY 解密密钥 | --key KID:KEY |
--decryption-engine | 解密引擎,默认 MP4DECRYPT | --decryption-engine FFMPEG |
-H/--header | 附加请求头,如 Cookie | -H "Cookie: xxx" |
踩坑自查
- 下载速度上不去:可能原因——线程数不合适或服务端限制了并发。处理:先用
--thread-count调到 8 左右试试;如果分片频繁失败,把--download-retry-count调大、--http-request-timeout(默认 100 秒)适当放大。 - 目标站点需要代理或请求头:可能原因——直连被拦截,或接口校验 Cookie。处理:
--custom-proxy http://127.0.0.1:8888走指定代理(默认跟随系统代理),必要时配合-H "Cookie: ..."带上请求头。 - 直播录制中途断掉或文件不完整:可能原因——列表刷新太频繁导致请求过快。处理:用
--live-wait-time放慢刷新间隔;开启--check-segments-count(默认开启)会在结束前校验实际与预期分片数量是否一致,不匹配会直接提示。 - 字幕时间轴或格式不对:可能原因——VTT 起始时间偏差。处理:
--auto-subtitle-fix默认开启,可配合--sub-format SRT|VTT指定输出格式;只想拿字幕就加--sub-only。
下一步可以做什么
- 先用
--custom-range 0-10只试下前 10 个分片,确认链路通不通,再跑完整任务; - 任务结束后翻一下输出目录里的 meta json(
--write-meta-json默认开启),里面的轨道信息可以直接喂给--select-*参数做二次筛选; - 想看播放列表是怎么变成下载任务的,读两个目录:src/N_m3u8DL-RE.Parser/(HLS、DASH、MSS 的解析实现)和 src/N_m3u8DL-RE/CommandLine/(全部命令行参数的定义与默认值)。
【免费下载链接】N_m3u8DL-RECross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文.项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考