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 是一款跨平台流媒体下载工具,支持 DASH/HLS/MSS 格式,覆盖点播(MPD/M3U8)下载、直播录制与加密内容解密。本文从跑通第一条命令讲到批量自动化。
跑通第一条命令
前置检查,动手前先确认这几点:
- 系统为 Windows、macOS 或 Linux;源码编译需要 .NET 10 SDK(项目目标框架为 net10.0),也可直接从 Release 获取预编译版本
- 已安装 ffmpeg:合并分片、
-M混流都靠它 - 已安装 mp4decrypt:默认解密引擎 MP4DECRYPT 依赖它,下载加密内容时才需要
- 较老版本 Windows 的自带终端可能不支持本程序的输出,README 建议改用 cmder 运行
- 目标源需要代理时,确认系统默认代理可用,或准备
--custom-proxy的值
安装,走源码这一条路径即可:克隆、编译、把产物目录加入 PATH。
git clone https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE # 克隆源码 cd N_m3u8DL-RE/src && dotnet build -c Release # Release 模式编译产物位于src/N_m3u8DL-RE/bin/Release/net10.0/目录(Windows 下带.exe后缀),把该目录加入 PATH,之后任意位置都能直接调用N_m3u8DL-RE命令。Arch Linux 用户也可以直接从 AUR 取n-m3u8dl-re-bin包,免去编译。
第一次下载,用仓库 TestStreams.md 里给出的官方示例流,无需密钥、最容易跑通:
N_m3u8DL-RE "https://media.axprod.net/TestVectors/v7-Clear/Manifest_1080p.mpd"命令执行后的流程是:解析 MPD → 列出可选的视频、音频、字幕轨道并自动选择最佳 → 逐分片下载 → 合并输出。看到终端打印最终文件路径,且输出目录里出现了可播放的文件,说明整条链路成功。
验证,一行命令确认工具本身可用:
N_m3u8DL-RE --version能打印出版本号即可;如果报命令不存在,说明 PATH 没配对或可执行文件位置找错了,回到上一步检查。
按需选择:三种典型下载场景
点播视频:分辨率、音轨、字幕怎么选
点播的核心难点是"选流":一条流往往带多档分辨率视频、多条音轨和字幕,过滤条件写错就会下载错东西。分三步配:
先定视频:
-sv用正则过滤视频轨,res匹配分辨率,for=best表示在命中项里挑码率最高的一条。-sv res="1920*":for=best再定音轨:按
lang语言代码过滤;正则里的|表示"或",best2表示最多取 2 条。-sa lang="en|ja":for=best2最后字幕:
-ss all取全部字幕轨,输出格式由--sub-format决定,默认 SRT,也可改 VTT。N_m3u8DL-RE "https://media.axprod.net/TestVectors/v7-Clear/Manifest_1080p.mpd" \ -sv res="1920*":for=best -sa lang="en|ja":for=best2 -ss all这条示例流恰好是多音轨多字幕的,跑完能同时拿到 1080p 视频、英语或日语音轨和 SRT 字幕,适合当"三选一"功能的演练场。
直播录制:怎么限时、怎么扛断流
直播录制的难点在时间与稳定性:录多久要能自动停,断流之后任务不能整个报废。三个高频问题:
录到什么时候停?直接加录制时长限制,到点任务自动结束:
--live-record-limit "2:30:00"格式是时:分:秒。不设这个参数的话,录制会一直持续到手动终止,长会话有写满磁盘的现实风险。
断流了怎么办?两层防护:--live-wait-time 60手动设置直播列表刷新间隔(秒),断流后程序按这个节奏继续拉新列表;--download-retry-count 20把每个分片的下载重试次数从默认 3 次调高,个别分片掉线也能补回来。
长时间录制要等到最后才合并吗?开--live-real-time-merge,分片边下边并入成品文件。还可以试--live-pipe-mux,通过管道加 ffmpeg 实时混流到 TS 文件,但 README 明确提示:网络不稳定时管道内数据读取容易丢失直播数据,弱网环境不要开。
安全提示:直播录制获取的是他人服务的内容,请确认自己拥有录制与保存的权限,仅用于合法用途。
加密内容:密钥与解密引擎怎么配
加密内容的核心难点是两件事:密钥要按 KID 对号入座,解密要靠外部工具执行。先把参数摆齐:
| 参数 | 作用 | 示例 / 推荐值 |
|---|---|---|
--key | 指定解密密钥,KID:KEY格式;所有轨共用一把密钥时可只写 KEY | --key e5114f87b3e54b9faca331e6e6d646a6:55c5d9f1cedfd018b75623f2565a1d29 |
--key-text-file | 密钥文件,按 KID 检索 KEY,适合多密钥场景 | --key-text-file keys.txt |
--decryption-engine | 解密引擎:MP4DECRYPT / FFMPEG / SHAKA_PACKAGER | 默认 MP4DECRYPT |
--custom-hls-key | HLS 专用密钥,接受 HEX、Base64 或文件 | 视流的加密方式而定 |
--custom-hls-iv | HLS 专用 IV,格式同上 | 视流的加密方式而定 |
--decryption-binary-path | mp4decrypt 工具全路径,未入 PATH 时用 | 指向工具的实际位置 |
表中有两个参数值得展开:
--decryption-engine:默认 MP4DECRYPT 需要安装 mp4decrypt;如果机器上只有 ffmpeg,切到 FFMPEG 即可。引擎只是"执行解密的工具",所以密钥本身填错时换引擎不会解决问题——报错时先核对密钥,再怀疑工具。--custom-hls-key与--custom-hls-iv:这两个参数配合--custom-hls-method使用,用于播放列表里没有附带解密信息、需要你手动补全密钥和 IV 的 HLS 流。它们与--key面向的加密体系不同,先确认流的加密方式再选参数,不确定时用--morehelp查看对应选项的详细说明。
批量与自动化
批量下载:把 URL 一行一条写进urls.txt,用 shell 循环即可:
while IFS= read -r url; do # 逐行读取 URL,不做单词拆分 N_m3u8DL-RE "$url" \ --save-dir ~/Downloads/course \ # 统一输出目录 --thread-count 8 \ # 每任务 8 个下载线程 --download-retry-count 10 \ # 每分片多重试几次,容忍弱网 -mt # 音视频字幕并发下载,省时间 sleep 2 # 任务间歇 2 秒,避免请求过于密集 done < urls.txt想让批任务在固定时刻才开始,再给单条命令加--task-start-at(格式yyyyMMddHHmmss),程序在该时间之前不会启动任务。
参数速查表(仅收录本文出现过的参数):
| 参数 | 作用 | 推荐值 |
|---|---|---|
--save-dir | 输出目录 | 空间充足的目录 |
--save-name | 输出文件名 | 有辨识度的短名 |
--thread-count | 下载线程数 | CPU 核心数的 2 倍,如 8 |
--download-retry-count | 每分片重试次数 | 10–20 |
-sv | 视频轨过滤 | res="1920*":for=best |
-sa | 音频轨过滤 | lang=en:for=best |
--sub-format | 字幕输出格式 | SRT(默认) |
--live-record-limit | 直播录制时长限制 | HH:mm:ss,如2:30:00 |
--live-wait-time | 直播列表刷新间隔(秒) | 30–60 |
--live-real-time-merge | 录制时实时合并 | 长录制开启 |
--key | 解密密钥,KID:KEY | 视流而定 |
--decryption-engine | 解密引擎 | 默认 MP4DECRYPT |
故障对照表:
| 症状 | 可能原因 | 处理动作 |
|---|---|---|
| 安装后提示命令不存在 | 产物目录未加入 PATH | 用--version验证,先修 PATH |
| 请求 403 或解析失败 | 服务端要求 Cookie/UA 等请求头 | 加-H "Cookie: ..."重试 |
| 下载到一半中断 | 网络波动、重试次数不足 | --download-retry-count 20,必要时调大--http-request-timeout |
| 解密报错或输出无法播放 | 缺 mp4decrypt 工具,或密钥格式错误 | 安装工具;核对--key KID:KEY与流的 KID 是否一致 |
| 直播录制中途停止 | 断流后刷新超时 | --live-wait-time 60,重新运行命令续录 |
| 旧版 Windows 终端输出乱码 | 自带终端不兼容 | 换用 cmder 运行 |
参数都用熟之后,还有三个方向可以继续挖:一是用-M format=mp4:muxer=mkvmerge定制混流行为,或通过环境变量RE_LIVE_PIPE_OPTIONS调整live-pipe-mux背后的 ffmpeg 命令行;二是--task-start-at配合系统级定时任务,把批量下载变成无人值守的定时录制;三是仓库src/N_m3u8DL-RE/Processor/下的 URL Processor 扩展机制——遇到链接会过期、带签名校验的站点,可以写一个 Processor 接管整套链接处理,并用--urlprocessor-args传参,具体行为以项目最新文档为准。
【免费下载链接】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),仅供参考