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
N_m3u8DL-RE 是一款跨平台流媒体下载工具,支持 MPD(DASH)、M3U8(HLS)、ISM(MSS)三种格式的解析与下载,覆盖点播和直播录制。本文按"安装验证 → 点播下载 → 加密解密 → 直播录制"四个任务依次展开,最后给出常见故障的排查路径,帮你第一次使用就能跑通核心流程。
安装 N_m3u8DL-RE 并验证环境
按操作系统获取二进制
Arch Linux 及其衍生版可以从 AUR 源装发行版(该源非作者维护):
# 安装 AUR 稳定版包,一条命令完成 yay -Syu n-m3u8dl-re-bin其他系统从项目 Releases 页面下载对应平台的压缩包(Windows / Linux / macOS 各有独立包),解压后把可执行文件放入 PATH 可达的目录,比如 Linux 的/usr/local/bin,Windows 则把解压目录加入系统 PATH 环境变量。
确认 ffmpeg 与解密工具就绪
ffmpeg 是合并、混流环节的硬依赖,mp4decrypt 则是默认解密引擎的底层程序,两者都装好后再验证:
# 预期输出类似 "N_m3u8DL-RE (Beta version) 20251027",说明程序可正常执行 N_m3u8DL-RE --version # 两条命令都应输出版本号,说明合并与解密依赖可用 ffmpeg -version mp4decrypt --version💡 提示:Windows 上较老版本的系统终端可能跑不了本程序,换 cmder 或 Windows Terminal 即可。第三方工具不在默认路径时,用
--ffmpeg-binary-path和--decryption-binary-path显式指定位置。
三条命令都能跑通,就可以开始下载了。不过播放列表里往往挂着十几条流,下一步先解决"挑流"问题。
点播下载:按清晰度、语言、字幕挑流
解析结果通常包含多条视频、音频和字幕轨,用-sv、-sa、-ss按正则挑选,再用for=指定挑选策略:
# res="1920*" 匹配宽度为 1920 的所有视频轨,for=best 取其中带宽最高的一条 # lang=zh 挑中文音轨;-ss all 拿全部字幕并输出为 SRT 格式 N_m3u8DL-RE "https://example.com/lesson.m3u8" \ -sv res="1920*":for=best \ -sa lang=zh:for=best \ -ss all:for=all \ --sub-format SRT \ --save-name "Lesson1" \ --save-dir "./output"这就像看衣服吊牌选尺码——先筛出"1920"这一档,再在命中里挑码数最大的。完整字段(codecs、frame、plistDur 等)在命令行跑N_m3u8DL-RE --morehelp select-video即可看到,文档示例见 README.md。
如果下载后音视频是两个文件(DASH 流很常见),加-M format=mp4让它在任务结束时自动混流成一个 MP4;想要 mkv 容器就写-M format=mkv:muxer=mkvmerge。懒得挑流时,--auto-select会自动选各类型的最佳轨。
但很多平台的流是加密的,播放列表里只有关键 ID,密钥得你自己提供——这就进入下一节。
解密加密流:--key 的两种写法与三种解密引擎
传密钥的两种写法
# 单密钥:全部分片共用一个 KEY 时,直接传 16 字节 HEX 串即可 N_m3u8DL-RE "https://example.com/enc.mpd" --key "0123456789abcdef0123456789abcdef" # 多密钥:多次传 KID:KEY 对,程序按分片携带的 KID 自动匹配对应密钥 N_m3u8DL-RE "https://example.com/enc.m3u8" \ --key "69423282-80b2-4800-85f9-5b86d29703d3:aaaaaaaaaaaaaaaaaaaaaaaaaaaa" \ --key "b10d44b4-3e57-44f9-a1d6-e834178a5b71:bbbbbbbbbbbbbbbbbbbbbbbbbbbb"密钥较多时,把KID:KEY按行写入文本文件,用--key-text-file指向它,避免命令行超长。
三种解密引擎怎么选
解密动作由第三方程序完成,--decryption-engine在三者中切换:
| 引擎 | 底层程序 | 适用场景 |
|---|---|---|
| MP4DECRYPT(默认) | mp4decrypt | CENC 加密的 MP4/fMP4 分片,最常见的 DASH 场景 |
| FFMPEG | ffmpeg | TS 分片的 AES-128 加密 HLS |
| SHAKA_PACKAGER | shaka-packager | 前两者无法处理时的复杂 DASH 加密兜底 |
直播边下边解的场景可加--mp4-real-time-decryption,每个 MP4 分片下载后立即解密,省掉事后整段重跑。HLS 流若自动识别不出加密方式,用--custom-hls-method CHACHA20强制指定(可选值含 AES_128、CHACHA20、SAMPLE_AES 等)。
⚠️ 注意:解密报错先别急着换引擎。绝大多数失败是密钥本身抄错——核对 KID 和 KEY 的 HEX 串是否完整、有没有多余空格或漏位,确认无误后再切
--decryption-engine。
|| 📚 延伸:加密方式的识别逻辑在 src/N_m3u8DL-RE.Parser/ 的 Extractor 目录下,HLS 侧可看 HLSExtractor.cs,DASH 侧看 DASHExtractor2.cs。 ||
点播是一次性拿完;直播则要一直跑到你喊停,下一节讲录制。
直播录制:设定时长并实时合并
直播播放列表像一张不断更新的购物清单:下载器按--live-wait-time(秒)轮询它,把新出现的分片挑下来(开播默认取最近 16 片,由--live-take-count控制)。两个核心参数决定录制行为:
# --live-record-limit 01:30:00 表示录满 1.5 小时后自动停止 # --live-real-time-merge 边下边合并,录制中断时已合并的部分不会丢 N_m3u8DL-RE "https://live.example.com/stream.m3u8" \ --live-real-time-merge \ --live-record-limit "01:30:00" \ --thread-count 16 \ # 16 线程并发抓取新分片 -mt \ # 音视频字幕多轨并发下载 --save-name "LiveShow"临时目录是这次录制的"暂存区",用--tmp-dir指到 SSD 之类的高速存储;合并完成后--del-after-done(默认开启)会自动清掉临时分片。
网络不稳时怎么办
--live-pipe-mux让分片经 ffmpeg 管道直接写入 TS 文件,中间落盘少、同步更好,但弱网下不建议开:
⚠️ 注意:pipe-mux 的管道数据由 ffmpeg 读取,网络不稳的环境容易丢直播数据。这种环境请保持普通实时合并,靠
--download-retry-count 5和--http-request-timeout 180提高容错。
需要给该 ffmpeg 传参时,设置环境变量RE_LIVE_PIPE_OPTIONS,例如export RE_LIVE_PIPE_OPTIONS="-c:v copy -c:a aac -b:a 192k",含义可在 src/N_m3u8DL-RE/Config/EnvConfigKey.cs 查看。录制跑得越久越容易碰上网络问题,下面把高频故障汇成一张表。
下载失败排查:403、解密报错与超时速查
排查顺序:先开--log-level DEBUG拿详细日志,再对照下表定位。--write-meta-json(默认开启)会把解析结果写成 JSON,是判断"解析问题还是网络问题"的第一手证据。
| 现象 | 原因 | 解法 |
|---|---|---|
| 分片全部 403/404 | 缺 Cookie、Referer 等鉴权头 | 用-H "Cookie: ..."-H "Referer: ..."逐条补请求头 |
| 解密失败、文件无法播放 | 密钥抄错或引擎不匹配 | 核对 KID:KEY 后,按上表切换--decryption-engine |
| 分片超时反复重试 | 服务器响应慢,默认 100 秒不够 | --http-request-timeout 180并调大--download-retry-count |
| 合并后文件打不开 | ffmpeg 缺失或临时文件损坏 | 验证ffmpeg -version;换--use-ffmpeg-concat-demuxer重跑 |
| 直播录到一半中断 | 流源临时下线 | --live-wait-time 30留足重连窗口,实时合并保留已下载部分 |
💡 提示:个别网站的分片 URL 不继承输入链接的查询参数,导致签名失效返回 403。加
--append-url-params把输入 URL 的 Params 拼到每个分片上即可解决(README 中以 kakao.com 为例)。
下一步:三件马上能做的事
- 跑一遍
N_m3u8DL-RE --help通读全部参数,再用--morehelp select-video看挑流字段明细,建立参数手感。 - 对目标流先做一次"干跑":加
--skip-download只解析不下载,配合--write-meta-json检查轨道结构,确认无误再正式下载。 - 需要定制特殊站点逻辑时,读 src/N_m3u8DL-RE/CommandLine/CommandInvoker.cs 的参数字段定义,然后从 https://gitcode.com/GitHub_Trending/nm3/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),仅供参考