N_m3u8DL-RE 保姆级使用指南:一条命令通吃 M3U8、MPD、ISM 加密流媒体下载
N_m3u8DL-RE 保姆级使用指南:一条命令通吃 M3U8、MPD、ISM 加密流媒体下载
【免费下载链接】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 是一款基于 C# 的跨平台流媒体下载工具,专门解决 M3U8 / MPD / ISM 这类分段加密视频的下载难题。这篇文章不灌水,直接带你从零跑通一条命令,再逐层拆开它背后的解析、解密、合并流水线,最后附上直播录制、轨道筛选等进阶玩法。
从一个"下不了"的周五晚上说起
周五晚上想缓存一门课的录播,网页里的播放器倒是能看,可浏览器缓存里翻半天全是几 KB 的小碎片;想去下载站碰碰运气,又怕来路不明。其实这些"看起来下不了"的视频,绝大多数只是用了HLS 或 DASH 分段传输:整段视频被切成了几百个小片段,还常常套着一层 AES 加密。普通下载工具根本不认识这种结构,自然无从下手。
N_m3u8DL-RE 干的事,就是替你把这件事完整走完:读播放列表 → 挑出想要的音视频轨 → 逐个下载分片 → 按需解密 → 合并成单个文件。而且它不挑系统,Windows、macOS、Linux 都能跑,终端里打一行命令即可。
先让工具跑起来:两条命令完成构建
项目源码托管在 gitcode,把它拉下来后,用 .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编译完成后,可执行文件会生成在src/N_m3u8DL-RE/bin/Release/下。日常调试也可以直接用dotnet run起一个开发副本:
dotnet run --project src/N_m3u8DL-RE/N_m3u8DL-RE.csproj -- --help看到一大屏参数说明就说明环境没问题了。项目还内置了--morehelp子命令,对某个参数拿不准时,可以单独问它,比如--morehelp mux-after-done会列出混流相关的全部细节。
第一次实战:拿公开测试流练手
与其对着教程干瞪眼,不如直接下载一个公开的测试流,感受一下完整的输出日志。TestStreams.md里列了不少官方测试资源,随便挑一个 DASH 清单:
N_m3u8DL-RE "https://media.axprod.net/TestVectors/v7-Clear/Manifest_1080p.mpd" --save-dir ./demo --save-name my-first-dash终端里会依次出现:解析清单、列出可用轨道、按块下载分片、最后自动合并出成品。--save-dir指定输出目录,--save-name指定文件名,这两项是最常用的"落盘"参数。想下 HLS 也一样,把链接换成.m3u8即可,工具会按内容自动识别协议。
幕布之后:一次下载任务的三层流水线
跑通之后,值得花三分钟看看它内部是怎么协作的,这能帮你后续定位问题。整个工作流对应源码里三个工程:
src/N_m3u8DL-RE.Parser/:负责"读懂清单"。StreamExtractor.cs是入口,根据内容分派给HLSExtractor.cs、DASHExtractor2.cs或MSSExtractor.cs,把播放列表解析成结构化的分片列表与加密信息,相关标签定义在Constants/目录。src/N_m3u8DL-RE/DownloadManager/:负责"取数据"。SimpleDownloadManager.cs调度多线程并发拉取分片,HTTPLiveRecordManager.cs处理直播流的持续录制与实时合并。src/N_m3u8DL-RE/Util/:负责"收尾"。MergeUtil.cs做分片合并,MP4DecryptUtil.cs负责解密,SubtitleUtil.cs处理字幕格式转换。
对大多数使用者来说,你只需要记住:解析出的分片数量对不对,看 Parser 日志;下载慢不慢,看 DownloadManager 的线程数;最后文件合不拢,十有八九在 Merge 环节。
遇到加密内容,别慌
不少流媒体在分片之上又套了一层 AES-128 或 CENC 加密。加密信息通常会写进播放列表里(比如#EXT-X-KEY),工具能自动读取。但有些情况密钥不会随清单下发,需要你手动提供:
N_m3u8DL-RE "https://example.com/encrypted.m3u8" \ --custom-hls-method AES_128 \ --custom-hls-key 0123456789abcdef0123456789abcdef \ --custom-hls-iv 00000000000000000000000000000000--custom-hls-key支持文件、HEX 或 Base64 三种形式,配合--custom-hls-method强制指定加密算法。对于 MPD 这类用 KID:KEY 格式的,用--key直接喂:
N_m3u8DL-RE "https://example.com/drm.mpd" --key 9eb4050de44b4802932e27d75083e266:166634c675823c235a4a9446fad52e4d解密引擎默认走 MP4DECRYPT,也可以用--decryption-engine FFMPEG或SHAKA_PACKAGER切换,具体看本机装了哪个工具。支持的解密算法清单可以在src/N_m3u8DL-RE.Common/Enum/EncryptMethod.cs里查到:从 AES_128、AES_128_ECB、SAMPLE_AES,到 CENC、CHACHA20 都有覆盖。
把视频"挑"着下:轨道筛选与自动命名
一部片子的流里往往混着多路清晰度、多条音轨和字幕。N_m3u8DL-RE 支持用正则精准筛选:
N_m3u8DL-RE "https://example.com/master.m3u8" \ -sv res="1920*":for=best \ -sa lang="zh|en":for=best \ -ss name="中文":for=all \ -M format=mkv-sv、-sa、-ss分别管视频、音频、字幕,for=best表示取最优,for=all表示全要。-M format=mkv表示下载完成后用 ffmpeg 混流成 MKV 容器。
如果一次下多路视频(比如 1080p 和 720p 同时要),文件名会撞车,这时用--save-pattern让命名带上关键元数据:
N_m3u8DL-RE "https://example.com/master.m3u8" -sv all -M format=mkv \ --save-name video --save-pattern "<SaveName>_<Resolution>_<Bandwidth>"输出会变成video_1920x1080_5000000.mp4这样直观的名字,模板变量(<Resolution>、<Codecs>、<Language>等)在 README 里有完整说明。
直播也能录:把"正在进行"变成"已经保存"
点播是下载现成文件,直播则是"边播边存"。工具针对直播流准备了一套参数:--live-real-time-merge开启边录边合并,--live-record-limit 02:00:00限制录制时长,防止半夜忘了关把硬盘录爆:
N_m3u8DL-RE "https://example.com/live.m3u8" \ --live-real-time-merge --live-record-limit 01:30:00 --save-name tonight-live网络不够稳的时候,建议给直播录制加一层保险:--download-retry-count提高分片重试次数,--tmp-dir把临时分片放到专门的目录,录完再统一清理。想省事还可以研究下--live-pipe-mux,它用管道把数据直接喂给 ffmpeg 实时混流,省去中间落盘。
提速与避坑的实用清单
这些参数不背下来没关系,用到时回来查就行:
--thread-count 16:调高并发线程数,宽带大户提速明显;反过来网络差就调低到 4。--tmp-dir /fast/disk/tmp:把临时分片挪到 SSD 或内存盘,I/O 快一截。--custom-range 05:00-20:00:只想下第 5 分钟到第 20 分钟的内容时,用它省流量。--custom-proxy http://127.0.0.1:7890:走代理拉流;需要直连时用--use-system-proxy false。--log-level DEBUG --log-file-path ./debug.log:下载出问题时开 debug 日志,报 bug 时把日志一并贴上,能省不少来回沟通。
分片下载有重试机制,默认每个分片失败重试 3 次,--http-request-timeout可以调整请求超时。遇到"文件合并失败",先查临时目录权限和磁盘剩余空间——合并需要把全部分片先落盘,空间不足是最常见的翻车原因。
想动手改代码,从哪看起
如果你不满足于使用,想给它加个自定义解析规则,源码结构很清晰:
src/N_m3u8DL-RE.Parser/Extractor/:新增协议解析器的地方,实现IExtractor接口即可挂接新格式。src/N_m3u8DL-RE.Parser/Processor/:UrlProcessor与ContentProcessor负责对 URL 和清单内容做预处理,很多网站的特殊处理都写在这里。src/N_m3u8DL-RE/CommandLine/CommandInvoker.cs:命令行参数与内部配置的绑定层,想加新参数从这入手。src/N_m3u8DL-RE.Tests/:现成的测试工程,改完代码跑一遍dotnet test能防止把老功能改坏。
仓库根目录的README.md是完整参数手册,TestStreams.md是官方测试流清单,调试新功能时非常好用。
最后说句实在话
工具本身只是"搬运工",能不能用、该不该用,取决于内容本身。请只下载自己有权访问的流媒体——比如你购买过的课程、公开的测试资源、或自家平台的回放。尊重平台条款与版权,让好工具待在合规的边界内,才能长期帮到你。
N_m3u8DL-RE 的上手成本极低:装好 .NET,克隆仓库,编译,然后丢给它一个链接就行。剩下的分片调度、解密、合并,全交给它在终端里默默搞定。从今天第一条测试流开始,你离"想存的视频都能存"只差一个链接的距离。
【免费下载链接】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),仅供参考
