N_m3u8DL-RE 上手指南:3 条命令跑通下载、解密与直播录制
【免费下载链接】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)链接丢给它就能取回内容,点播、直播、CENC/AES-128 加密流解密都覆盖。它写给习惯命令行但没用过它的你,读完 10 分钟内装好并跑通第一条下载,另外还会做解密和限时直播录制。
环境准备与首条下载:从装上 ffmpeg 到拿到 mp4
运行环境只需要 .NET 10 运行时。机器上有它的话,去项目 Releases 页拿对应平台的预编译包,解压即用。想自己编译则需要 .NET 10 SDK:
git clone https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE dotnet build src/N_m3u8DL-RE.sln合并、混流几乎都依赖系统里的 ffmpeg,另外可选装 mkvmerge 和 mp4decrypt。装好之后先跑两条自检:
N_m3u8DL-RE --version N_m3u8DL-RE doctor第一条会打印版本号,第二条把 ffmpeg、mkvmerge、mp4decrypt 等外部工具的可用情况逐项列出,缺哪一项一目了然。后面环境出问题时,先回来查这里。
依赖齐了,跑第一条下载。链接取自仓库的 TestStreams.md,是一条明文 DASH 测试流:
N_m3u8DL-RE "https://media.axprod.net/TestVectors/v7-Clear/Manifest_1080p.mpd" --auto-select --save-name demo终端里会先列出流里全部的视频、音频、字幕轨道,接着自动选中的最佳轨道并行下载,分片合并完成后,输出目录里会多出demo.mp4和一份meta.json(解析信息,默认开启)。有一处要注意:ffmpeg 没装时,任务会在合并阶段以“未找到 ffmpeg”中断。提前装进 PATH,或用--ffmpeg-binary-path指到完整路径。
只下指定清晰度和语言:-sv 与 -sa 怎么选流
手头是点播链接,只想拿某一档配置:1080p 的视频加英语音轨。选流命令用“键=值”的正则串起来:
N_m3u8DL-RE "https://media.axprod.net/TestVectors/v7-Clear/Manifest_1080p.mpd" -sv res="^1920x":for=best -sa lang=en:for=best --save-name 我的视频-sv res="^1920x":for=best:res按分辨率匹配,for=best在匹配结果里只留码率最高的一条;-sa lang=en:for=best同理,按语言代码挑最佳音频。- 一次下多条轨道又怕重名,加上
--save-pattern "<SaveName>_<Resolution>_<Language>",模板里的变量会被程序自动替换。 - 不想费心筛选、直接拿“最好的一套”,把选流部分换成
--auto-select即可。
避坑:res="1920"会连 1920x1200 一起匹配进来,前面加^限定“开头是”。写正则前先不加筛选跑一次,对着列出的轨道看真实分辨率值,再回来改。
解密加密流:把 KID 和 KEY 喂给 --key
CENC 是 DASH 与 MP4 里最常见的加密方式,加密流只下载不解密是放不出画面的,密钥要自己提供。配对格式是KID:KEY,两者都支持 16 字节的 HEX 或 Base64。下面这条流和密钥都来自仓库的测试流清单,可以直接跑:
N_m3u8DL-RE "https://media.axprod.net/TestVectors/v7-MultiDRM-SingleKey/Manifest_1080p_ClearKey.mpd" --key 9eb4050de44b4802932e27d75083e266:166634c675823c235a4a9446fad52e4d --auto-select --save-name 解密示例- 各轨道共用同一把密钥时,直接传 KEY 即可,不必写 KID;KID 有多个就每个加一条
--key。 - 密钥数量多时,把 KID-KEY 映射写成文件,用
--key-text-file指向它。 - 解密引擎默认 MP4DECRYPT(即调用 mp4decrypt),可换成
--decryption-engine FFMPEG或SHAKA_PACKAGER。 - 遇到自定义的 HLS AES-128,用
--custom-hls-key/--custom-hls-iv分别指定密钥和 IV,同样支持 HEX、Base64 或文件三种写法。
避坑:解密跑完但产物仍然放不出来 → KID 和 KEY 配错了 → 重新核对配对;仍不行就换--decryption-engine FFMPEG再试一次。
直播录制:限时停手与回看起点
持续开播的直播流,录到限定时长自动停手:
N_m3u8DL-RE "https://cmafref.akamaized.net/cmaf/live-ull/2006350/akambr/out.mpd" --live-record-limit 01:00:00 --live-real-time-merge--live-record-limit:按HH:mm:ss写,示例是录满 1 小时。--live-real-time-merge:边录边合并分片,省掉事后的二次合并。--live-take-count:首次取多少个分片,默认 16。- 想从历史时间点开始录,
--live-catchup可传回看时长或具体日期时间,它会覆盖--live-take-count。 --live-pipe-mux把分片经 ffmpeg 管道实时混出 TS,网络不稳时容易丢数据,非必要不加。
避坑:录制文件结尾缺分片 → 开了--live-pipe-mux,管道在网络抖动时丢帧 → 关掉它,改用--live-real-time-merge的普通实时合并。
参数速查与高频异常
| 参数 | 作用 | 示例 |
|---|---|---|
--save-name | 输出文件名 | --save-name 电影名 |
--save-dir | 输出目录 | --save-dir "D:\Videos" |
--thread-count | 下载线程数,默认 10 | --thread-count 8 |
--auto-select | 自动选最佳视频/音频/字幕 | --auto-select |
-sv/-sa/-ss | 正则选视频/音频/字幕 | -sv res="^1920x":for=best |
--key | 解密密钥,KID:KEY 或纯 KEY | --key KID1:KEY1 |
-R | 限速,单位 Mbps 或 Kbps | -R 15M |
-M | 完成后混流分离的音视频 | -M format=mp4 |
--live-record-limit | 直播录制时长上限 | --live-record-limit 01:00:00 |
-H | 设置请求头 | -H "User-Agent: iOS" |
常见异常:
- 报“未找到 ffmpeg”直接退出 → ffmpeg 不在系统 PATH → 安装它,或用
--ffmpeg-binary-path指定。 - 403 或分片拉取失败 → 平台校验请求头,或分片需要携带原链接参数 → 用
-H传入所需头,必要时加--append-url-params把链接参数带到分片。 - 解密失败、产物无法播放 → KID 与密钥不匹配,或引擎不兼容 → 核对
--key配对,再试--decryption-engine FFMPEG。 - 直播录制丢数据 →
--live-pipe-mux管道在网络不稳时丢帧 → 关闭它,改用--live-real-time-merge。 - 终端进度条、颜色显示错乱 → 旧版 Windows 终端不支持 ANSI → 换 cmder 等第三方终端,或加
--no-ansi-color去色。
源码往深处读
src/N_m3u8DL-RE.Parser/ 负责清单解析,src/N_m3u8DL-RE/DownloadManager/ 管下载与录制调度,src/N_m3u8DL-RE/Crypto/ 是解密实现,src/N_m3u8DL-RE/Util/MergeUtil.cs 处理分片合并。完整选项看 README.md 与--help输出,新版本和反馈去项目 Releases/Issues。请只下载自己有权访问的内容,并遵守所在地区法规。
【免费下载链接】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),仅供参考