N_m3u8DL-RE 从 0 到 1:DASH/HLS 流媒体下载的完整配方、参数清单与故障排查
【免费下载链接】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/HLS/MSS 流媒体下载工具,面向想把在线课程存档、想录直播、想管理多音轨字幕的你。DASH(清单文件是 mpd)和 HLS(清单文件是 m3u8)是两种最常见的流媒体协议,你把链接丢给它,它负责解析出视频、音频、字幕轨道,拉完分片,再合并成成品文件。本文按四步讲:五分钟跑通、三个需求的参数配方、参数速查表、出问题怎么查。
五分钟跑通:拿到工具,跑通第一单
工具从官方发布渠道下载对应平台的发行版,或者克隆源码自己构建:
git clone https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE代码基于 .NET,系统里要有对应平台的 .NET 运行时。拿到可执行文件后,最小化命令就是"链接 + 输出名",下面这条同时拿项目 TestStreams.md 里的公开测试流验证安装:
N_m3u8DL-RE "http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes.m3u8" --save-name demo跑完输出目录里出现合并好的成品,说明解析、下载、合并三环节都正常。--save-name决定输出文件的基础名,不改的话程序会按自己的规则起名。还有个省事技巧:只想看解析出哪些轨道、不实际下载,就在同一条命令上加--skip-download,程序解析完清单就停,适合先摸清一个陌生链接里有什么再决定怎么下。
命令跑通只是第一步,接下来下载什么、下载成什么样,全由参数决定。按三个真实需求来配:点播挑画质、直播定时录、加密流喂密钥。
三个真实需求的参数配方:点播挑轨、直播定时、加密解密
点播保存:一次挑两档画质,文件不打架
你想达到的效果:一个课程 m3u8 里同时挂着 1080p 和 720p,两档都要,且文件名能区分。
N_m3u8DL-RE "课程m3u8链接" -sv res="1920*|1280*":for=all -sa best --save-name 实战课 --save-pattern "<SaveName>_<Resolution>" -M format=mp4-sv res="1920*|1280*":for=all:按分辨率正则把两档画质都选中;for=all表示匹配的全部要,不带它时默认 best 只挑一条最好的。-sa best:音频轨自动挑最佳,不用你判断哪条码率高。--save-name 实战课:输出基础名。--save-pattern "<SaveName>_<Resolution>":文件名追加分辨率变量,两档文件各叫各的;不写它,同类型多轨道容易撞名。-M format=mp4:所有工作完成时把分离的音视频混流进 mp4 容器,拿到手就是能直接播放的成品。
挑完轨,下一个需求是时间:直播往往不在你现在这个点,想按表开播再录,怎么配?
直播定时录制:到点开播,录够就收
你想达到的效果:晚八点的大会,九点准时开始录,录满两小时自动结束,不用人盯着。
N_m3u8DL-RE "直播链接" --save-name 技术大会 --live-real-time-merge --task-start-at 20260921090000 --live-record-limit 02:00:00 --thread-count 8--task-start-at 20260921090000:到这个时间(yyyyMMddHHmmss 十六位)之前不开始执行任务,是定时录制的开关;马上录就不用它。--live-record-limit 02:00:00:录满两小时自动收尾,格式 HH:mm:ss。--live-real-time-merge:分片下载时实时合并进成品文件;默认是关的,不加则等录完再统一合并。--thread-count 8:显式指定 8 个拉分片线程;不调则按本机 CPU 线程数走。
这里有个风险点要提醒:想进一步省盘可以换--live-pipe-mux,通过管道加 ffmpeg 实时混流进 TS 文件,但项目 README 明确说网络不稳时别开它,管道数据由 ffmpeg 读,容易丢直播数据。默认情况下--live-keep-segments会保留分片,等于留了份备份,丢数据还能重拼,建议别动它。
定时和画质都解决了,最后一种麻烦是:链接本身是加密的,怎么把密钥递进去?
加密流解密:喂对密钥,边下边解
你想达到的效果:清单里标着需要密钥的加密流,下载的同时就解密,不二次返工。
N_m3u8DL-RE "https://media.axprod.net/TestVectors/v7-MultiDRM-SingleKey/Manifest_1080p_ClearKey.mpd" --key "9eb4050de44b4802932e27d75083e266:166634c675823c235a4a9446fad52e4d" -sv best --mp4-real-time-decryption--key "KID:KEY":KID 是密钥标识,KEY 是密钥本体,都是十六进制串;上面这条是项目 TestStreams.md 里自带密钥的测试流,密钥就在文档同一行,抄下来就能跑通解密全流程。多个 KID 对应不同密钥时重复传--key;若所有 KID 共用一把密钥,只写 KEY 也行。-sv best:只取最佳视频轨,音频轨用-sa同理追加。--mp4-real-time-decryption:MP4 分片边下边解,默认关着;不加它,解密就落在下载完成后由 mp4decrypt 等第三方工具统一批处理。
三条配方下来,用上的参数不到十个,剩下的按"动手频率"分三档,用哪档查哪档。
参数速查:每次必写、看情况调、知道有就行
必备档:每次都要写
| 参数 | 作用 | 什么时候需要动它 |
|---|---|---|
--save-name | 输出文件基础名 | 每次都要,不改则由程序自动命名 |
--save-dir | 输出目录 | 不想落在当前目录时 |
-sv/-sa/-ss | 正则挑视频、音频、字幕轨,或写 best/all | 多轨道流必须收一收,否则全下 |
--key | 解密密钥,KID:KEY 或纯 KEY | 流是加密的才用 |
常调档:看环境定
| 参数 | 作用 | 什么时候需要动它 |
|---|---|---|
--thread-count | 下载线程数 | 默认 CPU 线程数,嫌慢就调大 |
--http-request-timeout | 单次 HTTP 超时秒数 | 弱网频繁超时;默认 100 秒 |
--download-retry-count | 单分片异常重试次数 | 网络抖动多时加预算;默认 3 次 |
--custom-proxy | 指定请求代理 | 目标站必须走代理;默认用系统代理 |
-R | 限速,单位 Mbps 或 Kbps(如 15M、100K) | 不想占满带宽时 |
--sub-format | 字幕输出为 SRT(通用字幕格式)或 VTT(Web 字幕格式) | 想换字幕类型;默认 SRT |
-M | 完成时混流分离的音视频 | 要 mp4/mkv 成品而非散文件 |
少碰档:不报错就别动
| 参数 | 作用 | 什么时候需要动它 |
|---|---|---|
--decryption-engine | 选解密用的第三方程序 | 默认 MP4DECRYPT 不够时换 FFMPEG 或 SHAKA_PACKAGER |
--mp4-real-time-decryption | MP4 分片实时解密 | 想免掉下载后的二次解密 |
--live-pipe-mux | 管道加 ffmpeg 实时混流进 TS | 想省盘,但弱网下有丢数据风险 |
--log-level | 日志级别 | 排查时开 DEBUG 看细节;默认 INFO |
--no-ansi-color | 关闭终端彩色输出 | 颜色显示乱码时 |
--append-url-params | 把输入链接的参数带到分片上 | 个别站点(如 kakao.com)不带上就 403 |
参数都对了,真跑起来也可能翻车。别翻长文档,对着症状找行就行。
出问题了怎么办:下载慢、解密失败、音画分离先查什么
| 症状 | 先查什么 | 对应参数动作 |
|---|---|---|
| 下载慢 | 是不是线程太少,或请求一直在超时长 | 调大--thread-count;日志里超时重试多就把--http-request-timeout调大,并给--download-retry-count加预算 |
| 解密失败 | 密钥格式对不对,解密程序在不在 PATH | 核对--key是否 KID:KEY 格式;程序找不到就用--decryption-binary-path指全路径,或--decryption-engine FFMPEG换引擎;HLS 加密方式判错时加--custom-hls-method(如 AES_128、CHACHA20、SAMPLE_AES)手动指定 |
| 老 Windows 终端报错或颜色乱码 | 系统终端不支持本程序 | 换 cmder 跑;乱码就加--no-ansi-color;Arch 系发行版可走 AUR 的 n-m3u8dl-re-bin |
| 音画分成两个文件 | 完成时没指定混流 | 加-M format=mp4,或-M format=mkv:muxer=mkvmerge;想引入外部字幕或音轨用--mux-import path=xx.srt:lang=chi:name="中文字幕" |
每个参数想深入了解语法,运行--morehelp 参数名在程序内直接看,比如--morehelp select-video会把正则挑选的完整写法列给你。
读源码比读博客更靠谱,按数据流走三处就够。解析入口是src/N_m3u8DL-RE.Parser/StreamExtractor.cs,同目录Extractor/放着 DASH、HLS、MSS 各自解析器,Processor/管内容地址和密钥处理。任务调度在src/N_m3u8DL-RE/DownloadManager/,点播走 SimpleDownloadManager,直播录制走 SimpleLiveRecordManager2,真正的多线程拉分片在Downloader/SimpleDownloader.cs。命令行参数如何变成运行配置,看CommandLine/加Config/里的 DownloaderConfig。
边界问题必须说清:本工具基于MIT 协议开源,仅限学习与技术研究;只下载你拥有合法权限的流媒体内容,遵守所在地区法律法规与平台服务条款,侵权后果与工具无关。
三步自检清单
- 用 TestStreams.md 里的测试流加
--skip-download跑一遍,轨道列表正常打出,安装就没问题。 - 拿真实链接只带
--save-name做最小化下载,成品落在输出目录才算跑通。 - 卡住时按"速查表 → 排查表"的顺序加参数:慢查线程和超时,解密失败查密钥格式和引擎。
三步走完,N_m3u8DL-RE 就已经是你手边的日常工具了。
【免费下载链接】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),仅供参考