N_m3u8DL-RE 速览:3 条命令搞定 DASH/HLS/MSS 流媒体下载
【免费下载链接】N_m3u8DL-RECross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文.项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE
把浏览器里的 .mpd 链接丢进终端,拿回能播放的 mp4,就是 N_m3u8DL-RE 干的活。这是一个跨平台的流媒体下载工具,通吃 DASH、HLS、MSS 三大协议(.mpd / .m3u8 / .ism),点播和直播都支持。
工具速写:它到底能做什么
一句话定位:输入链接、输出成片文件的 .NET 流媒体下载器,解析、下载、解密、合并一条龙。src/ 下的四个工程分别负责协议解析、下载管理和命令行入口。
- 🎬 支持 DASH/HLS/MSS 点播与直播两种形态,自动解析清单并选轨
- 🔓 用
--key KID:KEY传入解密密钥,可选 MP4DECRYPT、FFMPEG、SHAKA_PACKAGER 三种解密引擎 - 🎯 视频/音频/字幕轨道用正则表达式筛选,
-sv、-sa、-ss配合for=best自动挑最佳轨 - 📡 直播录制支持时长限制、实时合并、按点播方式整段下载
- 📐
--custom-range按分片序号或时间区间只截取要的那部分 - 🌐 跨平台运行,
--ui-language可在 en-US / zh-CN / zh-TW 间切换
三分钟上手:编译项目并跑通第一条 DASH 下载命令
编译需要 .NET 10 运行时。Arch Linux 用户可以跳过编译,直接用yay -Syu n-m3u8dl-re-bin安装。
git clone https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE cd N_m3u8DL-RE dotnet build src/N_m3u8DL-RE.sln -c Release # 编译产物在 bin 目录,下面示例统一简写为 N_m3u8DL-RE src/N_m3u8DL-RE/bin/Release/net10.0/N_m3u8DL-RE "https://example.com/Manifest.mpd" -sv best -sa best -M format=mp4这一条命令里,-sv best选最佳视频轨,-sa best选最佳音频轨,-M format=mp4表示收尾时把分离的音视频混流进 mp4。跑完工具会解析清单、下载分片、混流出成片;临时文件默认自动删除(--del-after-done默认 True),解析结果还会输出一份 json(--write-meta-json默认 True)。想直接试完整能力,TestStreams.md 里列好的测试流地址可以直接拿来用。
核心能力:四个高频痛点对应四条命令
加密 DASH 流:传 --key 解开
场景:拿到的是 CENC 加密的 .mpd,下完分片是一堆放不了的二进制。
N_m3u8DL-RE "https://example.com/secure.mpd" --key "KID:KEY" -sv best -M format=mp4结果:解密后得到可直接播放的文件。默认解密引擎是 MP4DECRYPT,--decryption-engine可切换到 FFMPEG 或 SHAKA_PACKAGER;有多个 KID 就逐个传--key KID1:KEY1 --key KID2:KEY2,密钥不在清单里时可用--key-text-file提供密钥文件按 KID 查找。解密逻辑集中在 src/Crypto/,排查问题时可以先看那里。
直播录制:用 --live-record-limit 掐时长
场景:会议、比赛直播,只想录两个小时的窗口期,还要求成片连贯。
N_m3u8DL-RE "https://live.example.com/live.m3u8" -mt --live-record-limit 02:00:00 --live-real-time-merge -M format=mp4结果:录满 2 小时自动停止,分片边录边合并,不用事后手动处理。如果是完整直播想整段拿走,改用--live-perform-as-vod按点播方式下载。
字幕与音轨提取:--sub-only 只拿 SRT
场景:一门课只需要字幕做笔记,视频本体不必下载。
最短写法是-ss all --sub-only --sub-format srt,结果是每条字幕轨道各产出一个 .srt 文件,且默认走自动修正(--auto-subtitle-fix默认 True)。只想要英语音轨时,-sa lang=en:for=best一行就够,想同时保留多轨字幕可用-ss name="中文":for=all这种正则圈定。
按时间截取:--custom-range 精确到分钟
场景:十小时的课程,只需要第 5 到 20 分钟那一段。
用--custom-range 05:00-20:00直接给时间区间,结果只下载落在区间内的分片,省时间也省流量。同样参数还支持分片序号:0-10下载前 11 个分片,10-从第 10 个开始下到底。
进阶玩法:什么时候该用它
链接有几十条时:套一层循环
手里有一份链接清单时,把单条命令放进循环,用--save-name和--save-dir固定命名与输出位置,跑完就是一个整整齐齐的本地库。
# 逐行下载 urls.txt 里的链接 while read -r url; do N_m3u8DL-RE "$url" -sv best -sa best -M format=mp4 done < urls.txt网络不稳或站点特殊时:把重试和请求头调起来
分片频繁失败时,调大--download-retry-count(默认 3),按需调整--http-request-timeout(默认 100 秒),带宽有限就配合-R限速。站点要求登录态或特定 UA 时,用-H "Cookie: ..."直接附加请求头;个别网站(比如 kakao.com)要求把原始链接的参数带到每个分片上,--append-url-params就是为这种场景准备的。需要走代理访问时,--custom-proxy http://127.0.0.1:8888指定代理地址,或者保持默认走系统代理(--use-system-proxy默认 True)。
文件乱了或出问题时:留痕与定位
多轨同名容易撞车,--save-pattern "<SaveName>_<Resolution>_<Codecs>"生成带分辨率和编码信息的文件名。排查问题用--log-level DEBUG加--log-file-path把日志写进文件;只想要解析结果不下载时用--skip-download,分片已下好只想换合并方式时用--skip-merge。想给某个私有站点写专门的链接处理逻辑,src/Processor/ 里的示例实现可以直接抄结构。
避坑速查:现象 → 处理
| 现象 | 处理 |
|---|---|
| 分片下全了,文件放不了 | 加密流:用--key KID:KEY传密钥,仍不行就换--decryption-engine试其他引擎 |
| 直播录制中途断掉、丢分片 | 别开--live-pipe-mux(README 明确提示管道模式在不稳网络下易丢数据),保持--live-keep-segments存分片以便重试 |
| 选到了广告分片或低清轨 | 用-sv/-sa的正则收窄选择条件,--ad-keyword按 URL 关键字过滤广告分片 |
| Windows 终端显示异常或乱码 | 换 cmder 这类现代终端运行,或用--force-ansi-console/--no-ansi-color调整输出 |
| 合并时报找不到 ffmpeg | 用--ffmpeg-binary-path指定可执行文件全路径 |
| 密钥不在清单里、在外部 | 用--key-text-file指定密钥文件,程序按 KID 查找 |
结尾
解析、下载、解密、混流,过去要串起好几个工具的事,现在一条命令行收掉,完整参数清单在 README.md 里都有。现在就去 TestStreams.md 挑一个流地址,跑通你的第一条下载命令。
【免费下载链接】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),仅供参考