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、HLS、MSS 三种清单格式(对应 mpd / m3u8 / ism 文件),点播下载和直播录制都能做。本文讲三件事:第一条命令怎么跑通、点播/直播/加密流三个高频场景的参数怎么配、出问题时按什么顺序排查。读完你应该能拿着一个清单链接,自己挑出想要的画质和音轨,产出能直接播放的文件。
环境准备与首次运行
获取程序有两条路:clone 源码自己构建,或直接下载官方发布渠道对应平台的发行版。构建前提是你本机装好了 .NET 10 运行时,程序目标框架是net10.0,版本不对会起不来。
clone 仓库:
git clone https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE拿到可执行文件后,一条链接加一个文件名就能跑:
N_m3u8DL-RE "你的视频链接" --save-name 自定义文件名启动后的流程是固定的:先请求并解析清单,把所有可选轨道(各档视频、各语言音轨、字幕)打印出来;再按选中的轨道并发拉取分片;最后合并成完整文件,默认删掉临时分片(--del-after-done默认开)。
装好没装好,跑一次"只解析不下载"就知道。仓库根目录的TestStreams.md列了一批公开测试流,挑一个填进下面这条命令:
N_m3u8DL-RE "你挑选的测试流地址" --skip-download预期输出特征:终端先列出清单里的视频轨道(分辨率、编码、码率)、音轨(语言、声道)和字幕轨道,然后直接结束,不产生任何下载。轨道列表能完整打印,说明解析链是通的;去掉--skip-download完整跑一遍,文件能落地且能播放,就算验证完毕。
场景实战
场景一:点播存档,自动挑最好的轨道
你拿到了一个课程 m3u8 链接,变体列表里有 720p、1080p 好几档,诉求是一个能直接播放的完整文件,不想逐条轨道挑。
N_m3u8DL-RE "你的课程m3u8链接" --save-name Python实战 --auto-select -M format=mp4--save-name Python实战:决定文件名主干。不写它程序会生成一个很长的自动名,事后不好找;要批量下多个流时再配--save-pattern "<SaveName>_<Resolution>",文件名会带上分辨率避免撞名。--auto-select:变体轨道一多,手写-sv正则容易漏掉音频和字幕,这个参数让所有类型各自自动选最佳,一步到位。想控制结果时替代方案是-sv best -sa best,逐类型指定。-M format=mp4:不加它,视频和音轨是分开落盘的两个文件,你得多一步手动合并;加它下载完直接混流成 mp4。想要 mkv 容器就写format=mkv:muxer=mkvmerge。
场景二:直播录制,边录边成型 📺
输入是直播链接,诉求是文件在录制过程中就持续成型、录满 3 小时自动停,而不是录两小时后再干等合并。
N_m3u8DL-RE "你的直播链接" --save-name 技术大会 --live-record-limit 03:00:00 --live-real-time-merge --thread-count 8--live-record-limit 03:00:00:录满 3 小时自动结束,格式HH:mm:ss。不加它程序会一直录到你手动中断。--live-real-time-merge:默认 False,即分片要等录制全部结束才合并成成品。开它意味着分片滚入时就实时合并进成品文件,中途断了也能拿到前面已合并的部分。--thread-count 8:默认是 10。直播分片按固定节奏产出,并发拉满意义不大,压低一点给实时合并的写入留带宽。
两个坑提前说:保持默认的--live-keep-segments(默认 True,实时合并的同时保留分片),丢数据后还能用分片重拼;反过来--live-pipe-mux是走管道加 ffmpeg 实时混流,README 明确提醒网络不稳时别开,管道里读数据的 ffmpeg 更容易丢分片。
场景三:带外部密钥的加密流,参数最复杂的一档
部分平台的 CENC 类加密流里只有 KID(密钥 ID),KEY 得你自己从别处拿到再喂给程序。
N_m3u8DL-RE "你的加密流链接" --key "你的KID:你的KEY" -sv best -sa best --decryption-engine FFMPEG--key "你的KID:你的KEY":格式KID1:KEY1,多组密钥就重复传参;整个流共用一把钥匙时直接--key 你的KEY也行,不用带 KID 前缀。十六进制值别加0x。-sv best -sa best:加密流分辨率档位往往不少,best直接各取最佳,比手写res=正则在不确定编码名时省事。要精确挑再上组合正则,例如-sv res="3840*":codecs=hvc1:for=best只挑 4K HEVC。--decryption-engine FFMPEG:默认引擎是 MP4DECRYPT,对 MP4 分片加密最对口,但遇到它解不动的方案就报错;FFMPEG 覆盖面更宽,这里先换它试。需要系统里能找到 ffmpeg,或用--ffmpeg-binary-path给全路径。
解密仍报错的话,还有--custom-hls-method手动指定清单加密方式(AES_128、CHACHA20、SAMPLE_AES等),再配--custom-hls-key/--custom-hls-iv直接喂密钥材料,下一节展开。
关键参数速查
只列你大概率会主动去动的,默认值以 README 帮助输出为准:
| 分组 | 参数 | 默认值 | 什么时候需要动它 |
|---|---|---|---|
| 输出 | --save-name/--save-dir | 当前目录 | 要控制文件名和落地目录 |
| 输出 | --save-pattern "<SaveName>_<Resolution>" | 无 | 一次下多个同类流避免撞名 |
| 输出 | -M format=mp4 | 关闭 | 音视频分开落盘,想混成一个文件 |
| 输出 | --sub-format | SRT | 想要 VTT 输出时 |
| 轨道选择 | --auto-select | False | 轨道太多,不想写正则 |
| 轨道选择 | -sv/-sa/-ss | 全部下载 | 要按分辨率、语言、编码精确挑轨 |
| 网络 | --thread-count | 10 | 带宽和并发不匹配,卡或打满 |
| 网络 | --http-request-timeout | 100 秒 | 弱网下频繁超时重试 |
| 网络 | --download-retry-count | 7 | 分片失败率高,要加预算 |
| 网络 | --custom-proxy | 跟随系统代理 | 必须走指定代理才能访问源 |
| 加密 | --key KID:KEY | 无 | 流需要外部提供密钥 |
| 加密 | --decryption-engine | MP4DECRYPT | 默认引擎解不开时换 FFMPEG |
| 加密 | --mp4-real-time-decryption | False | MP4 分片想边下边解缩短总时长 |
| 诊断 | --skip-download | False | 只验证解析、查看轨道清单 |
| 诊断 | --log-level | INFO | 出问题后用 DEBUG 定位环节 |
完整参数列表运行N_m3u8DL-RE --help查看,-sv、-M这类组合参数的详细语法用--morehelp select-video、--morehelp mux-after-done在程序内看。
出问题时看哪里
按症状走排查链,每一步对应一个具体动作:
下不动、极慢或满屏超时重试
- 先拉并发:
--thread-count 16试一次,确认是不是线程太少拖住了。 - 日志里反复出现超时重试的话,把
--http-request-timeout从默认 100 提到 120 以上,同时--download-retry-count给点余量(默认 7)。 - 需要代理的源,确认
--custom-proxy指向的代理本身是通的;程序默认跟随系统代理(--use-system-proxy默认开),公司内网尤其注意。 - 都正常却下 403 / 空清单,多半是反爬要登录态:用
--cookies 你的cookies.txt喂浏览器导出的 Cookie 文件,或-H "Cookie: 你的值"手动加头。
下载调度在src/N_m3u8DL-RE/DownloadManager/,网络请求层在src/N_m3u8DL-RE.Common/Util/HTTPUtil.cs,定位到卡在哪一环后可以对照看。
解密报错或播放花屏
- 核对密钥格式:
--key只认KID:KEY或纯KEY,十六进制不带0x,多组密钥逐条传,最常见的翻车点就是这里。 - 换引擎:
--decryption-engine FFMPEG,再确认第三方程序在 PATH 中,或者--decryption-binary-path/--ffmpeg-binary-path给全路径。 - 怀疑 HLS 清单加密方式被误判时,
--custom-hls-method手动指定(AES_128、CHACHA20、SAMPLE_AES等),配--custom-hls-key/--custom-hls-iv直接喂密钥材料。
内置解密实现在src/N_m3u8DL-RE/Crypto/(AES 与 ChaCha20),工具调用的解密流程也集中在DownloadManager目录。
输出缺音、缺画或选错轨道
--log-level DEBUG跑一遍,对照解析阶段打印的轨道清单和你实际选中的是不是同一批。- 读不懂轨道列表就单独
--skip-download重跑一次,只看解析结果。 - 音画分离想合并,补
-M format=mp4或-M format=mkv:muxer=mkvmerge;要引入外部字幕/音轨用--mux-import path=你的字幕.srt:lang=chi:name="中文 (简体)",注意它依赖-M开启混流,单独用会直接报错。 - 字幕时间轴对不上,先确认
--auto-subtitle-fix没有被从默认值改掉。
程序起不来或终端表现异常
先跑一条自检命令,它会把版本和系统环境打印出来:
N_m3u8DL-RE doctor旧版 Windows(NT6.0 及以下)自带终端跑不动本程序,换 cmder 执行;Arch 系从 AUR 装n-m3u8dl-re-bin;macOS 必须先装 .NET 运行时,否则命令行找不到程序本体。终端颜色显示乱码加--no-ansi-color关掉彩色输出,不影响功能。
进一步阅读
- README.md:参数全集、配置文件格式、
--morehelp详细帮助都在这,比任何二手文档都准。 - TestStreams.md:一批公开测试流,含多音轨多字幕 DASH、直播、带 KID/KEY 的加密流,冒烟测试和复现问题直接用。
- src/N_m3u8DL-RE.Parser/StreamExtractor.cs:解析入口,想弄清轨道列表怎么来的从这里进;配套测试在 src/N_m3u8DL-RE.Tests/。
最后一句:项目基于 MIT License 开源,仅限学习和技术研究使用,只下载你拥有合法权限的内容,侵权用途的责任由使用者自行承担。
【免费下载链接】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),仅供参考