流媒体下载完整实战:6 步从零玩转 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)视频"只能在线看、没法保存"的难题,同时支持点播下载与直播录制,界面还自带中英繁三种语言。下面我用一次真实的下载经历,带你从装好工具到搞定加密流、录下整场直播,全程走一遍。
一个差点让我放弃的下午
上个月,同事找上我,说他报了一门付费在线课,网页端只有播放器,连个下载按钮的影子都没有,课程还被切成几百个 6 秒一段的分片。
他问我:"能弄下来吗?我想在通勤路上离线看。"
说实话,我第一反应是拒绝的——手动抓包、拼接几百个分片、再考虑音视频同步,想想就头大。但那天下午我还是硬着头皮搜了一圈,结果只花了不到十分钟就摸到了正路:把链接丢给一个叫 N_m3u8DL-RE 的命令行工具,剩下的事它全包了。半小时后,整门课以一个完整的 MP4 躺在了硬盘里。
如果你也遇到过下面这些情况,这篇文章就是为你准备的:
- 网站有在线课程或影视资源,却没有下载入口
- 想录制一场正在进行的直播赛事或会议
- 下载时只想挑 1080p 的清晰度,不想要一堆重复轨道
- 遇到 AES 加密甚至带 DRM 的流,不知道从哪下手
我们直接开始。
第一步:先认识这位"下载老兵"
它到底能干什么
一句话:N_m3u8DL-RE 能读取流媒体清单文件(MPD / M3U8 / ISM),把视频流切成的大量分片自动下载下来,再用 FFmpeg 合并成一个完整文件。点播、直播都支持,Windows / macOS / Linux 三大平台通吃。
它内部拆得很干净,想深入了解的可以顺着源码看:
| 源码目录 | 负责的事 |
|---|---|
src/N_m3u8DL-RE.Parser/ | 解析 MPD / M3U8 / ISM 清单,提取音视频轨道信息 |
src/N_m3u8DL-RE/DownloadManager/ | 下载调度,包含直播录制相关逻辑 |
src/N_m3u8DL-RE/Crypto/ | AES、ChaCha20 等加解密实现 |
src/N_m3u8DL-RE/Util/ | 合并、字幕、杂项工具 |
src/N_m3u8DL-RE.Common/ | 公共实体、日志、HTTP 工具等基础层 |
需要提前准备什么
下载本身零依赖,但合并与解密阶段建议装好 FFmpeg。装完后在终端确认一下:
ffmpeg -version能看到版本号就说明没问题。如果后续要解 DRM 加密流,再按需准备 mp4decrypt 或 shaka-packager(后面第六步会用到)。
第二步:三分钟完成安装
安装方式很多,挑一条适合你的就行。
方式一:下载预编译版本(最省事)
打开项目的 Release 页面,按自己的系统挑压缩包——Windows 选N_m3u8DL-RE-win-x64.zip,macOS 选 darwin 版本,Linux 选对应发行版。解压后直接运行可执行文件即可,不用装任何运行时。
方式二:Arch 系一行搞定
Arch Linux 用户用 AUR 最方便,社区维护的包有两个:
# 安装正式发行版 yay -Syu n-m3u8dl-re-bin # 安装开发版(体验最新功能) yay -Syu n-m3u8dl-re-git方式三:从源码构建
想追最新改动,可以克隆仓库后用 .NET 编译:
git clone https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE.git cd N_m3u8DL-RE/src/N_m3u8DL-RE dotnet build -c Release装完先验证一下
不管哪种方式,先跑版本号确认能正常启动:
N_m3u8DL-RE --version第三步:跑通第一行下载命令
一条命令搞定首战
程序的用法简单到不像话:把链接或本地清单文件直接丢给它就行。
N_m3u8DL-RE "https://media.axprod.net/TestVectors/v7-Clear/Manifest_1080p.mpd"这个链接是项目TestStreams.md里收录的官方测试流,多音轨多字幕,非常适合第一次练手。程序会自动解析清单、挑选最佳画质、下载并合并,全程进度一目了然。
推荐再加三个参数
实战中我通常顺手带上输出目录、文件名和线程数:
N_m3u8DL-RE "https://media.axprod.net/TestVectors/v7-Clear/Manifest_1080p.mpd" \ --save-dir ./videos \ --save-name "我的收藏" \ --thread-count 8| 参数 | 解决什么问题 |
|---|---|
--save-dir | 指定保存目录,不存在会自动创建 |
--save-name | 自定义文件名,比默认的乱码 ID 好认 |
--thread-count | 并发线程数,宽带够时可以调到 CPU 核心数的 2 倍左右提速 |
几个顺手的小技巧
- 想换中文界面:加
--ui-language zh-CN(支持 en-US / zh-CN / zh-TW) - 不想让日志文件刷屏:加
--no-log - 程序也吃本地文件:把
.m3u8清单下载到本地后,N_m3u8DL-RE playlist.m3u8一样能跑
第四步:踩坑现场——默认下载"太大方"了
测试流跑通后,我第一次正式下载就栽了个跟头。
当时我下的是一个多音轨多字幕的片源,心想反正默认会"自动挑最佳",结果下完之后发现视频只有一个,音频却下回来五六条,字幕也全糊在一起。原来默认只挑最佳视频轨,但音频和字幕会全收——对只是想存个片的人来说,这明显有点"大方"过头了。
踩坑之后找到正解:按需挑选
还好轨道选择参数用起来不难。三个选择参数都支持正则表达式,格式是字段=正则,用冒号拼接,最后用for=best|worst|all决定取几条:
# 只选 1080p 且 HEVC 编码的最佳视频轨 N_m3u8DL-RE "清单链接" -sv res="1920*":codecs=hvc1:for=best # 只选最佳英语音轨 N_m3u8DL-RE "清单链接" -sa lang=en:for=best # 所有名字里带"中文"的字幕全要 N_m3u8DL-RE "清单链接" -ss name="中文":for=all对应的-dv / -da / -ds则是反向剔除,把不想要的轨道扔出去。
懒人模式与字幕专属
如果你就是想全都要,也有现成的懒人开关:
# 所有轨道都下回来 N_m3u8DL-RE "清单链接" --auto-select # 只下字幕,跳过音视频,输出 VTT 格式 N_m3u8DL-RE "清单链接" --sub-only --sub-format VTT--sub-format默认输出 SRT,可以切成 VTT;想提速就加-mt(即--concurrent-download),让音视频和字幕并发下载。
多轨道防重名:给文件加上"身份证"
多轨道同时下载时,文件名容易撞车,用--save-pattern让文件名自动带上清晰度和码率:
N_m3u8DL-RE "清单链接" --save-name "video" \ --save-pattern "<SaveName>_<Resolution>_<Bandwidth>"最终会得到类似video_1920x1080_5000000.mp4的文件。模板还支持<Language>、<Codecs>、<FrameRate>、<MediaType>等变量,随便组合。
第五步:进阶玩法——直播也能边播边录
直播录制是很多人入坑的原因。直播流的分片会无限增长且边播边删,和点播完全是两码事,所以有专门的参数配合。
边播边录,录完即得成品
直播默认是"先下载完再合并",录几小时的直播会拖很久。开启实时合并后,录完就是成品:
N_m3u8DL-RE "https://cmafref.akamaized.net/cmaf/live-ull/2006350/akambr/out.mpd" \ --live-real-time-merge(上面是官方直播测试流,来自TestStreams.md,可用来验证录制流程。)
限定录制时长
不想让它一直录下去,用--live-record-limit设上限,格式是时:分:秒:
N_m3u8DL-RE "直播链接" \ --live-real-time-merge \ --live-record-limit 02:00:00直播的其他玩法
- 把正在播的直播当点播一次性拉取:
--live-perform-as-vod - 追求低延迟成品:
--live-pipe-mux,通过管道把数据实时喂给 FFmpeg 混流输出 - 画面和字幕对不上:
--live-fix-vtt-by-audio,程序会读音频起始时间修正 VTT 字幕
⚠️ 注意:网络不够稳定时别开
--live-pipe-mux——管道内数据读取由 FFmpeg 负责,弱网环境下容易丢直播数据。另外录制时默认保留分片(--live-keep-segments),想省空间记得关掉。
第六步:当视频上了锁——手动密钥解密
HLS / DASH 常见加密方式有 AES-128、CENC(ClearKey)等,N_m3u8DL-RE 支持手动指定密钥解密。
先判断流是否加密
看清单里有没有#EXT-X-KEY(HLS)或ContentProtection(DASH)字段,也可以直接看程序解析时的提示。加密流一般需要KID:KEY形式的密钥。
手动指定 KID:KEY
每个密钥用一次--key,格式为KID:KEY:
N_m3u8DL-RE "https://media.axprod.net/TestVectors/v7-MultiDRM-SingleKey/Manifest_1080p_ClearKey.mpd" \ --key 9eb4050de44b4802932e27d75083e266:166634c675823c235a4a9446fad52e4d(这条是项目测试流里的 ClearKey 加密流,密钥在TestStreams.md中有标注。)如果多个分片共用同一个 KEY,也可以直接简写--key 密钥值;密钥多了还能写进文件,用--key-text-file按 KID 自动查找。
切换解密引擎
解密依赖第三方程序,用--decryption-engine切换,默认是 MP4DECRYPT:
N_m3u8DL-RE "加密流链接" \ --key "KID:KEY" \ --decryption-engine FFMPEG可选FFMPEG | MP4DECRYPT | SHAKA_PACKAGER。若程序没装进 PATH,用--decryption-binary-path指定完整路径。
HLS 直接硬指定
HLS 场景如果已知加密方法、密钥和 IV,也可以直接硬指定,省去猜流程:
N_m3u8DL-RE "链接" \ --custom-hls-method AES_128 \ --custom-hls-key 000102030405060708090a0b0c0d0e0f \ --custom-hls-iv 000102030405060708090a0b0c0d0e0f温馨提示:请只对你有合法权限的内容使用解密功能,工具本身仅用于学习与技术研究。
出问题了别慌:四个常见症状对症下药
症状一:提示找不到 FFmpeg
合并或解密阶段报 FFmpeg 相关错误,多半是没装。Ubuntu / Debian 上:
sudo apt install ffmpegWindows 用户从官网下载 FFmpeg 后,把bin目录加进 PATH,或者直接用--ffmpeg-binary-path指定 exe 全路径。
症状二:速度上不去
先看线程数是不是太低,加大--thread-count;如果是不想占满带宽,反而要用限速参数-R(支持 Mbps / Kbps):
N_m3u8DL-RE "链接" --thread-count 16 -R 15M症状三:网络不稳定,分片老失败
分片下载失败会自动重试,默认 3 次,弱网环境调高重试次数和超时时间:
N_m3u8DL-RE "链接" --download-retry-count 10 --http-request-timeout 60走代理的加--custom-proxy,例如--custom-proxy http://127.0.0.1:8888。
症状四:合并后文件不完整
程序默认会做分片数量校验(--check-segments-count),发现下载数和预期不符会给出提示。排查时先关掉--del-after-done,保留临时分片方便二次检查。
通用手段:打开调试日志
N_m3u8DL-RE "链接" \ --log-level DEBUG \ --log-file-path ./download.log--log-level支持DEBUG / INFO / WARN / ERROR / OFF,出问题先开 DEBUG 看日志,基本都能定位到原因。
顺便说几个"知道的人都说香"的参数
上面已经覆盖了 90% 的使用场景,下面这几个属于锦上添花:
| 参数 | 作用 | 示例 |
|---|---|---|
--custom-range | 只下载指定分片区间,适合先试看一段 | --custom-range 05:00-20:00 |
--task-start-at | 定时执行任务,格式yyyyMMddHHmmss | --task-start-at 20260815230000 |
-M/--mux-after-done | 下载完成后混流成指定容器 | -M format=mp4或-M format=mkv:muxer=mkvmerge |
--mux-import | 混流时引入外部音轨/字幕 | --mux-import path=zh-Hans.srt:lang=chi:name="中文 (简体)" |
--ad-keyword | 用正则匹配广告分片 URL 并跳过 | --ad-keyword "ad\|promo" |
--append-url-params | 给分片追加 URL 参数,部分网站必须开 | --append-url-params |
收尾:一张自查清单,帮你完整走一遍
把全文浓缩成一张清单,跟着勾就不会迷路:
- ✅ 装好 N_m3u8DL-RE 与 FFmpeg,
--version验证可用 - ✅ 用官方测试流跑通第一条
N_m3u8DL-RE "链接"命令 - ✅ 用
--save-dir / --save-name / --thread-count规范输出 - ✅ 多轨道用
-sv / -sa / -ss精确挑选,-mt并发提速 - ✅ 直播用
--live-real-time-merge+--live-record-limit边录边合并 - ✅ 加密流用
--key KID:KEY配合--decryption-engine解密 - ✅ 出问题先开
--log-level DEBUG,再看日志对症下药
想继续深入的话,推荐三个方向:
- 通读项目 README:里面有全部命令行参数的详细说明,每个复杂参数都有
--morehelp专属示例。 - 翻一翻
TestStreams.md:覆盖点播、直播、加密、多字幕等场景的官方测试流都在这里,是练手的最佳素材。 - 对照源码目录:了解 Parser(解析器)、DownloadManager(下载管理)与 Crypto(解密)的实现,想给项目做贡献或定制行为时用得上。
工具再好,不如亲手跑通一次。现在就去复制一条测试流链接,把属于你的第一段视频下载下来吧——从此"只能在线看"这五个字,基本可以从你的字典里删掉了 🚀
【免费下载链接】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),仅供参考